【问题标题】:Scikit-learn: Perform cross-validation on training data then fit the model on the test dataScikit-learn:对训练数据执行交叉验证,然后在测试数据上拟合模型
【发布时间】:2020-03-13 02:59:06
【问题描述】:

我希望对训练数据进行n-fold交叉验证方法,然后在测试子集上用优化参数拟合模型。

from sklearn.model_selection import train_test_split
from sklearn import datasets
from sklearn import linear_model
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import TimeSeriesSplit

iris = datasets.load_iris()
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.3, 
                                                        random_state=1234)

lm = linear_model.LinearRegression() 
cv = TimeSeriesSplit(n_splits=10).split(y_train) # [Question: 1]
cv_score = cross_val_score(lm, X_train, y_train, cv=cv, scoring="r2")

我的问题是:

  • [问题:1]假设它是逻辑回归,这是否正确 如果我想考虑类不平等(检查代码的第 12 行)?
  • [问题:2]如何将来自cross_val_score 的模型拟合到 X_test 数据上以预测 y_test 数据?

【问题讨论】:

    标签: python scikit-learn cross-validation


    【解决方案1】:
    • [问题:1]假设它是逻辑回归,这是否正确 如果我想考虑类不平等(检查代码的第 12 行)?

    是的

    • [问题:2]如何将来自cross_val_score 的模型拟合到 X_test 数据上以预测 y_test 数据?

    您将需要 GridSearch。然后可以检索到最佳模型并将其用于测试集。

    例子:

    from sklearn import svm, datasets
    from sklearn.model_selection import GridSearchCV
    iris = datasets.load_iris()
    parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
    svc = svm.SVC(gamma="scale")
    clf = GridSearchCV(svc, parameters, cv=5)
    clf.fit(iris.data, iris.target)
    
    y_test = clf.best_estimator_.predict(X_test)
    
    

    更多:https://scikit-learn.org/stable/modules/cross_validation.html

    【讨论】:

    • 感谢您的回复。 cross_val 根据训练数据返回每个 i-fold 的分数。不过,我想要的是使用 training-cv 中的系数/模型并将它们拟合到测试数据上。有什么想法吗?
    猜你喜欢
    • 2014-05-01
    • 2018-12-07
    • 2020-09-14
    • 2018-02-28
    • 2017-06-23
    • 2015-12-18
    • 2021-03-04
    • 2020-06-17
    • 1970-01-01
    相关资源
    最近更新 更多