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

Python 使用类权重时的不同重要性特征和aoc,python,scikit-learn,classification,decision-tree,Python,Scikit Learn,Classification,Decision Tree,我正在使用scikit学习,代码如下所示 我的班级不平衡(班级0:1的比例大约为90:10)。在阅读了许多其他问题之后,我使用了class_加权参数 然而,每次运行代码时,我都会得到一组不同的重要特性和不同的AOC、精度、召回率等 当我删除class_weight参数时,问题并不存在 如图所示,我已将随机_状态设置为常量,因此这不是问题所在。许多预测因子高度相关。有人知道问题是什么吗?(注意,我昨天发布了一个类似的问题,但这被否决了,因为我不够清楚,所以我没有一长串的评论,而是删除了这个问题,希

我正在使用scikit学习,代码如下所示

我的班级不平衡(班级0:1的比例大约为90:10)。在阅读了许多其他问题之后,我使用了class_加权参数

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

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

如图所示,我已将随机_状态设置为常量,因此这不是问题所在。许多预测因子高度相关。有人知道问题是什么吗?(注意,我昨天发布了一个类似的问题,但这被否决了,因为我不够清楚,所以我没有一长串的评论,而是删除了这个问题,希望对其他人更清楚,现在提供了所需的信息)


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


1)
train\u test\u split
使用随机洗牌来洗牌数据,然后分割为train和test。所以首先你需要稳定它

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

解决方法:请在处理数据之前在代码中设置此行(最好位于导入行的正下方上方)

使用导入的
numpy
np

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


正如我在上一个(现已删除)问题中所说。仅在一个位置设置随机_状态不会使代码成为可复制的代码。您需要检查分割。
train\u test\u split
还使用随机洗牌来洗牌数据,然后进行分割。所以这是一个随机的地方。然后GridSearchCV也会有随机性,因为
cv
param.Arh我现在明白你的意思了!是的,你是对的,谢谢。正如我所说,我对这一切都是新手,不知道这可能是问题的原因。标记为已回答。
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()) 
numpy.random.seed(SOME_INTEGER)