在python中拟合数据时,我通常这样做:
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
我将我的数据分成两个块:一个用于训练,另一个用于测试。
之后我用:
拟合我的数据model.fit(X_train,y_train)
y_pred = model.predict(X_test,y_test)
,我可以得到精度:
accuracy_score(y_test,y_pred)
我明白这些步骤。但是sklearn.model_selection.cross_val_score
发生了什么?例如:
cross_val_score(estimator= model, X= X_train,y=y_train,cv=10).
它是否在做我之前做过的所有事情,只是做了10次?
我必须把数据分割成训练集、测试集吗?从我的理解来看,它将数据拆分,拟合,预测测试数据并获得准确性分数。10次。
但是我没有看到训练和测试集有多大。我可以手动设置吗?还有,它们每次都是相同的尺寸吗?
函数" train_testrongplit ";使用分割比率随机分割训练集和测试集。
而下面的"cross_val_score"函数进行10倍交叉验证。
cross_val_score(estimator= model, X= X_train,y=y_train,cv=10)
在这种情况下,主要区别在于10-Fold CV不会打乱数据,并且折叠按照与原始数据相同的顺序循环。如果数据的顺序对交叉验证很重要,您应该批判性地思考,这取决于您的特定应用程序。
选择使用哪个验证方法:https://stats.stackexchange.com/questions/103459/how-do-i-know-which-method-of-cross-validation-is-best
您可以在这里阅读有关K-Fold的文档:https://scikit-learn.org/stable/modules/generated/sklearn.model_selection.KFold.html#sklearn.model_selection.KFold
根据我的理解,如果你设置cv=10
,它会将你的数据集分成10个折叠。如果你有1000行数据,也就是说900行是训练数据,剩下的100行是测试数据。因此,您不需要像在train_test_split
中那样设置任何test_size
。