栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

scikit学习中的交叉验证指标用于每个数据拆分

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

scikit学习中的交叉验证指标用于每个数据拆分

您的方法存在一些问题。

首先,您当然不必在培训和验证列表(即您的2个内部循环)中 一个接一个地手动 添加数据

for
。简单的索引就可以完成工作。

此外,我们通常从不计算和报告训练CV折叠的错误-仅验证折叠的错误。

请记住这些,并将术语切换为“验证”而不是“测试”,这是一个使用波士顿数据的可复制示例,应直接进行调整以适应您的情况:

from sklearn.model_selection import KFoldfrom sklearn.datasets import load_bostonfrom sklearn.metrics import mean_absolute_errorfrom sklearn.tree import DecisionTreeRegressorX, y = load_boston(return_X_y=True)n_splits = 5kf = KFold(n_splits=n_splits, shuffle=True)model = DecisionTreeRegressor(criterion='mae')cv_mae = []for train_index, val_index in kf.split(X):    model.fit(X[train_index], y[train_index])    pred = model.predict(X[val_index])    err = mean_absolute_error(y[val_index], pred)    cv_mae.append(err)

之后,您

cv_mae
应该是这样的(由于简历的随机性质,细节会有所不同):

[3.5294117647058827, 3.3039603960396042, 3.5306930693069307, 2.6910891089108913, 3.0663366336633664]

当然,所有这些显式的东西并不是真正必需的。您可以使用轻松得多

cross_val_score
。不过有一个小问题:

from sklearn.model_selection import cross_val_scorecv_mae2 =cross_val_score(model, X, y, cv=n_splits, scoring="neg_mean_absolute_error")cv_mae2# resultarray([-2.94019608, -3.71980198, -4.92673267, -4.5990099 , -4.22574257])

除了不是真正的问题的负号之外,您还会注意到结果的方差看起来比

cv_mae
上面的要大得多;原因是我们没有对数据进行 洗牌
。不幸的是,
cross_val_score
没有提供改组选项,因此我们必须使用手动进行
shuffle
。因此,我们的最终代码应为:

from sklearn.model_selection import cross_val_scorefrom sklearn.utils import shuffleX_s, y_s =shuffle(X, y)cv_mae3 =cross_val_score(model, X_s, y_s, cv=n_splits, scoring="neg_mean_absolute_error")cv_mae3# result:array([-3.24117647, -3.57029703, -3.10891089, -3.45940594, -2.78316832])

褶皱之间的差异明显较小,并且更接近我们的初始

cv_mae



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/610459.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号