我是机器学习的初学者,我一直在尝试更详细地了解该过程。
对于任何机器学习方案:
(1)我要做的第一步是将数据按90%到10%的比例进行拆分,并在最后一步保留10%进行测试
代码:
X1, X_Val, y1, y_Val = train_test_split(X, y, test_size=0.1,
random_state=101)
(2)第二步,如果我的数据允许(不是太大),我运行K形交叉 验证数据。
从该得分中,我可以获得所选模型的偏差,方差和准确性。
从这里,我可以像调整超参数中那样调整模型,进行特征选择并尝试不同的算法(随机forrest等。),以查看提供最佳解决方案的方法
代码:
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import cross_val_score
logreg = LogisticRegression()
scores = cross_val_score(logreg,X1,y1,cv = 10, scoring = "accuracy")
scores.mean()
scores.std()
(3)现在,我使用cross_val_predict获得y个预测(y_pred)
代码:
from sklearn.model_selection import cross_val_predict
ypred = cross_val_predict(logreg,X1,y1,cv = 10)
(4)从那里,我可以运行分类报告:
代码:
print(classification_report(y1,ypred))
accuracy_score(y1,ypred)
confusion_matrix(y1,ypred)
(5)现在,如果我们对分类报告中的结果感到满意,则可以输入新数据或看不见的数据(X_val,y_val),在本例中是从步骤1中删除的测试集
这是这样完成的:
代码:
logreg2 = LogisticRegression()
logreg2.fit(X1,y1)
y_pred2 = logreg2.predict(X_Val)
然后,我们可以使用(y_Val,y_pred2)运行另一个分类报告
以上我有2个问题:
(1)步骤正确吗?如果您有任何遗漏,请随时告诉我。
(2)作为模型的实际准确性,我应该报告什么(步骤5或步骤4的分类报告)?
非常感谢您的帮助
答案 0 :(得分:2)
您的程序通常是正确的。 Order between using validation, training and test sets中的讨论将非常有用。次要问题/说明:
在步骤1中,我们通常使用术语“测试集”而不是“验证集”(此处的验证部分由K折CV覆盖),因此x_test
和{{1 }}将是更合适的变量名。
在步骤#5中,预期您将使用在交叉验证期间选择的特定超参数(您的示例未明确显示这一点)。
由于您已使用测试集进行模型的最终评估,因此正确的做法是报告确实来自步骤5的结果;不过,只要您提供适当的说明,即“ CV精度y_test
,测试精度x
”,您也可以始终报告步骤4的结果。