gpt4 book ai didi

scikit-learn - Scikit Learn 分层交叉验证中的差异

转载 作者:行者123 更新时间:2023-12-04 05:10:05 25 4
gpt4 key购买 nike

我发现使用相同数据的两种交叉验证技术之间的分类性能存在差异。我想知道是否有人可以阐明这一点。

  • 方法一:cross_validation.train_test_split
  • 方法 2:分层折叠。

具有相同数据集的两个例子

数据集 5500[n_samples::Class 1 = 500 ; Class 0 = 5000 ] by 193 Features

方法 1 [使用 train_test_split 进行随机迭代]

for i in range(0,5):
X_tr, X_te, y_tr, y_te = cross_validation.train_test_split(X_train.values, y_train, test_size=0.2, random_state=i)
clf = RandomForestClassifier(n_estimators=250, max_depth=None, min_samples_split=1, random_state=0, oob_score=True)
y_score = clf.fit(X_tr, y_tr).predict(X_te)
y_prob = clf.fit(X_tr, y_tr).predict_proba(X_te)
cm = confusion_matrix(y_te, y_score)
print cm
fpr, tpr, thresholds = roc_curve(y_te,y_prob[:,1])
roc_auc = auc(fpr, tpr);
print "ROC AUC: ", roc_auc

方法一的结果

Iteration 1 ROC AUC:  0.91
[[998 4]
[ 42 56]]

Iteration 5 ROC AUC: 0.88
[[1000 3]
[ 35 62]]

方法二【StratifiedKFold交叉验证】

cv = StratifiedKFold(y_train, n_folds=5,random_state=None,shuffle=False)
clf = RandomForestClassifier(n_estimators=250, max_depth=None, min_samples_split=1, random_state=None, oob_score=True)
for train, test in cv:
y_score = clf.fit(X_train.values[train], y_train[train]).predict(X_train.values[test])
y_prob = clf.fit(X_train.values[train], y_train[train]).predict_proba(X_train.values[test])
cm = confusion_matrix(y_train[test], y_score)
print cm
fpr, tpr, thresholds = roc_curve(y_train[test],y_prob[:,1])
roc_auc = auc(fpr, tpr);
print "ROC AUC: ", roc_auc

方法2的结果

Fold 1 ROC AUC:  0.76
Fold 1 Confusion Matrix
[[995 5]
[ 92 8]]

Fold 5 ROC AUC: 0.77
Fold 5 Confusion Matrix
[[986 14]
[ 76 23]]

最佳答案

train_test_split 没有分层。在当前的开发版本和即将到来的 0.17 中,您可以通过 stratify=y 来使其分层,但在 0.16.2 中则不行。此外,随机状态不固定且使用方式不同,因此您不能期望得到完全相同的结果。

关于scikit-learn - Scikit Learn 分层交叉验证中的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32589123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com