使用类权重时,不同的重要性特征和aoc

时间:2017-11-23 09:41:08

标签: python scikit-learn classification decision-tree

我使用scikit学习下面显示的代码。

我有阶级不平衡(大致是0:1的90:10分裂)。在阅读了许多其他问题后,我使用了class_weighted参数。

然而,每次运行代码时,我都会得到一组不同的重要功能和不同的AOC,精度,召回等。

当我删除class_weight参数时,问题不存在。

如图所示,我已将random_state设置为常量,因此这不是问题。许多预测因子具有高度相关性。有谁知道这是什么问题? (注意我昨天发布了一个类似的问题,但由于我还不够清楚,所以我没有给出一长串评论,而是删除了一些问题,我希望其他人更清楚,现在提供了相关信息。需要)。

x_train, x_test, y_train, y_test = train_test_split(x, y)

parameters = {
    'max_depth': [6,7, 8],
    'min_samples_split': [100, 150],
    'min_samples_leaf': [50,75]
    }

clf = GridSearchCV(DecisionTreeClassifier(
    random_state=99,
    class_weight='balanced'), 
    parameters, refit=True, cv=10) 

clf.fit(x_train, y_train.ravel()

# create main tree using best settings
clf2 = DecisionTreeClassifier(
    max_depth=clf.best_params_['max_depth'],
    min_samples_split=clf.best_params_['min_samples_split'],
    min_samples_leaf=clf.best_params_['min_samples_leaf'],
    random_state=99,
    class_weight='balanced')

clf2.fit(x_train, y_train.ravel()) 

1 个答案:

答案 0 :(得分:1)

在上面的代码中,有多个随机点。

1)train_test_split使用随机改组来混洗数据,然后分成训练和测试。所以首先你需要稳定它。

2)GridSearchCV使用cv参数,对于分类任务,该参数使用StratifiedKFold()将数据拆分为不同的折叠。所以这也是随机性。

解决方法:请在处理数据之前在代码中设置此行(如果位于顶部,则位于导入行的下方,则更好。)

numpy.random.seed(SOME_INTEGER)

导入时使用numpynp

说明:请参阅以下问题: -