python - 使用 for 循环交叉验证模型时查看每个折叠的分数
问题描述
我想查看每个拟合模型的个人分数以可视化交叉验证的强度(我这样做是为了向我的同事展示为什么交叉验证很重要)。
我有一个包含 500 行、200 个自变量和 1 个二进制目标的 .csv 文件。我定义skf
使用 . 将数据折叠 5 次StratifiedKFold
。
我的代码如下所示:
X = data.iloc[0:500, 2:202]
y = data["target"]
skf = StratifiedKFold(n_splits = 5, random_state = 0)
clf = svm.SVC(kernel = "linear")
Scores = [0] * 5
for i, j in skf.split(X, y):
X_train, y_train = X.iloc[i], y.iloc[i]
X_test, y_test = X.iloc[j], y.iloc[j]
clf.fit(X_train, y_train)
clf.score(X_test, y_test)
如您所见,我将 5 个零的列表分配给Scores
. 我想将clf.score(X_test, y_test)
5 个预测中的每一个分配给列表。但是,索引i
和j
不是 {1, 2, 3, 4, 5}。相反,它们是用于折叠X
和y
数据框的行号。
如何将每个k
拟合模型的测试分数分配Scores
到此循环中?我需要一个单独的索引吗?
我知道使用字面意思是完成所有这些,并为您提供分数cross_val_score
的几何平均值。k
但是,我想向我的同事展示库中的交叉验证函数背后发生了什么sklearn
。
提前致谢!
解决方案
如果我理解了这个问题,并且您不需要任何特定的分数索引:
from sklearn.model_selection import StratifiedKFold
from sklearn.svm import SVC
X = np.random.normal(size = (500, 200))
y = np.random.randint(low = 0, high=2, size=500)
skf = StratifiedKFold(n_splits = 5, random_state = 0)
clf = SVC(kernel = "linear")
Scores = []
for i, j in skf.split(X, y):
X_train, y_train = X[i], y[i]
X_test, y_test = X[j], y[j]
clf.fit(X_train, y_train)
Scores.append(clf.score(X_test, y_test))
结果是:
>>>Scores
[0.5247524752475248, 0.53, 0.5, 0.51, 0.4444444444444444]
推荐阅读
- amazon-web-services - 是否可以获得 aws sns 回复电子邮件通知
- python - 为 DataFlow 创建模板会引发错误 AttributeError: 'RuntimeValueProvider' object has no attribute 'tableId'
- perl - awk 或 perl 用特定值更新/替换模式
- excel - 在 Power BI 中创建用于计数的 DAX 语句
- xml - 尝试下载 CSV 文件,并使用 Powershell 输出为 XML
- regex - 替换中的空白替换将匹配的字符串更改为空
- python - Python pandas 没有将正确的元组顺序添加到新列
- python - 将redis作为队列的芹菜-我找不到一种方法来找出预取的任务
- mysql - ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO), can't reset password either
- r - train 函数中未使用的参数