python – 解释Scikit-Learn模型输出,额外的树分类器不同的措施
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 解释Scikit-Learn模型输出,额外的树分类器不同的措施,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3903字,纯文字阅读大概需要6分钟。
内容图文
![python – 解释Scikit-Learn模型输出,额外的树分类器不同的措施](/upload/InfoBanner/zyjiaocheng/787/36c746a15d3244c3990f84cdcbb84e37.jpg)
我有一组数据,我正在使用Extra Trees Classifier开发一个预测模型,如下面的代码所示,在最初的代码集上显示et_scores看起来非常令人失望我运行时看到下面的内容并且它看起来更好,然后我做了一个学习图,事情看起来不太热.总而言之,令人困惑.
初始代码:
from sklearn.ensemble import ExtraTreesClassifier
from sklearn.cross_validation import cross_val_score
#split the dataset for train and test
combnum['is_train'] = np.random.uniform(0, 1, len(combnum)) <= .75
train, test = combnum[combnum['is_train']==True], combnum[combnum['is_train']==False]
et = ExtraTreesClassifier(n_estimators=200, max_depth=None, min_samples_split=10, random_state=0)
labels = train[list(label_columns)].values
tlabels = test[list(label_columns)].values
features = train[list(columns)].values
tfeatures = test[list(columns)].values
et_score = cross_val_score(et, features, labels.ravel(), n_jobs=-1)
print("{0} -> ET: {1})".format(label_columns, et_score))
给我:
['Campaign_Response'] -> ET: [ 0.58746427 0.31725003 0.43522521])
不是那么热!
然后根据我提供的数据:
et.fit(features,labels.ravel())
et.score(tfeatures,tlabels.ravel())
Out[16]:0.7434136771300448
还不错
然后是关于训练数据:
et.score(features,labels.ravel())
Out[17]:0.85246473144769563
再次,相当不错,但与之前的分数无关?
然后运行:
from sklearn.learning_curve import validation_curve
def plot_validation_curve(estimator, X, y, param_name, param_range,
ylim=(0, 1.1), cv=5, n_jobs=-1, scoring=None):
estimator_name = type(estimator).__name__
plt.title("Validation curves for %s on %s"
% (param_name, estimator_name))
plt.ylim(*ylim); plt.grid()
plt.xlim(min(param_range), max(param_range))
plt.xlabel(param_name)
plt.ylabel("Score")
train_scores, test_scores = validation_curve(
estimator, X, y, param_name, param_range,
cv=cv, n_jobs=n_jobs, scoring=scoring)
train_scores_mean = np.mean(train_scores, axis=1)
test_scores_mean = np.mean(test_scores, axis=1)
plt.semilogx(param_range, train_scores_mean, 'o-', color="r",
label="Training score")
plt.semilogx(param_range, test_scores_mean, 'o-', color="g",
label="Cross-validation score")
plt.legend(loc="best")
print("Best test score: {:.4f}".format(test_scores_mean[-1]))
其次是:
clf = ExtraTreesClassifier(max_depth=8)
param_name = 'max_depth'
param_range = [1, 2, 4, 8, 16, 32]
plot_validation_curve(clf, features,labels.ravel(),
param_name, param_range, scoring='roc_auc')
给我一个似乎不反映先前信息的图表和图例:
Best test score: 0.3592
最后sklearn指标给了我
Accuracy:0.737
Classification report
precision recall f1-score support
0 0.76 0.79 0.78 8311
1 0.70 0.66 0.68 6134
avg / total 0.74 0.74 0.74 14445
在我看来,我应该能够更好地解释这些东西可以有人帮忙吗?
解决方法:
您在这里遇到的是不同的交叉验证方法和分类器参数会导致不同的分数.
在您的第一个实验中,您将cross_val_score方法的结果与您自己的75%/ 25%随机分割进行比较. cross_val_score方法使用StratifiedKFold方法,K为3来确定折叠. StratifiedKFold或多或少保留数据的顺序,而随机分割通过随机抽样删除数据中的任何自然顺序.这可以解释分数的差异,特别是当您的数据依赖于自然顺序时.例如,如果您的数据按时间戳排序,则数据的特征可能会随着时间的推移而发生变化.当列车和测试集来自不同的时间段时,这导致较差的分数,这将是StratifiedKFold采样的情况.
在第二个实验中,您使用分类器的默认参数和5倍的交叉验证,这又会导致不同的结果.例如,默认情况下,ExtraTreeClassifier使用10个估算器,但在第一个实验中,您使用了200个估算器 – 并且您改变了max_depth参数.对于解释,max_depth参数确定树的复杂性,并且仅训练10棵树,大量叶子导致过度拟合,这正是您在验证图表中看到的效果.最佳测试分数实际为0.6而不是0.315,您应该取最高分而不是最后分数.
我希望这有助于对分数的解释和对差异的理解.接下来我会检查数据的排序,如果是暂时的,我会通过可视化对其进行调查.如果您希望最终在预测的数据中出现这种漂移,则不应使用随机抽样 – 如果您确信您的训练集反映了所有变化,您可以在测试之前对数据进行混洗或设置StratifiedKFold的shuffle参数为true.对于分类器,我宁愿从一个简单的RandomForestClassifier开始,并在查看ExtraTrees之前将n_estimators设置为100.
内容总结
以上是互联网集市为您收集整理的python – 解释Scikit-Learn模型输出,额外的树分类器不同的措施全部内容,希望文章能够帮你解决python – 解释Scikit-Learn模型输出,额外的树分类器不同的措施所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。