使用类权重时不同的重要性特征和 aoc
Posted
技术标签:
【中文标题】使用类权重时不同的重要性特征和 aoc【英文标题】:Different importance features and aoc when using class weights 【发布时间】:2018-05-07 05:20:54 【问题描述】:我正在使用 scikit learn,代码如下所示。
我的班级不平衡(大约 90:10 的班级比例为 0:1)。在阅读了许多其他问题后,我使用了 class_weighted 参数。
但是,每次我运行代码时,我都会得到一组不同的重要特性和不同的 AOC、精度、召回率等。
当我删除 class_weight 参数时,问题就不存在了。
如图所示,我已将 random_state 设置为常量,因此这不是问题。很多预测变量是高度相关的。有谁知道问题是什么? (注意我昨天发布了一个类似的问题,但由于我不够清楚,所以我删除了这个问题,希望其他人更清楚,现在提供所需的信息,而不是有一长串的 cmets。 /p>
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())
【问题讨论】:
正如我在上一个(现已删除)问题中所说的那样。仅在一处设置 random_state 不会使代码重复。您需要检查拆分。train_test_split
也使用随机混洗对数据进行混洗然后拆分。所以这是一个随机的地方。那么GridSearchCV也会因为cv
参数而具有随机性。
啊,我现在明白你的意思了!是的,你是对的-谢谢。正如我所说,我对这一切都很陌生,不知道这可能是问题的原因。标记为已回答。
【参考方案1】:
在上面的代码中,有多个随机点。
1) train_test_split
使用随机混洗对数据进行混洗,然后拆分为训练和测试。所以首先你需要稳定它。
2) GridSearchCV 使用cv
参数,对于分类任务,该参数使用 StratifiedKFold() 将数据拆分为不同的折叠。所以这也是随机性。
解决方法:请在处理数据之前在代码中设置此行(最好在顶部,就在导入行的下方)。
numpy.random.seed(SOME_INTEGER)
使用已导入的numpy
或np
。
说明:请看以下问题:-
Should I use `random.seed` or `numpy.random.seed` to control random number generation in `scikit-learn`? How to seed the random number generator for scikit-learn?【讨论】:
以上是关于使用类权重时不同的重要性特征和 aoc的主要内容,如果未能解决你的问题,请参考以下文章