【问题标题】:Python - k fold cross validation for linear_model.LassoPython - linear_model.Lasso 的 k 折交叉验证
【发布时间】:2017-07-02 21:05:49
【问题描述】:

我有一个使用linear_model.Lasso的代码:

X_train, X_test, y_train, y_test = cross_validation.train_test_split(X,y,test_size=0.2)
clf = linear_model.Lasso()
clf.fit(X_train,y_train)
accuracy = clf.score(X_test,y_test)
print(accuracy)

我想执行 k 折(具体为 10 次)cross_validation。什么是正确的代码来做到这一点?

【问题讨论】:

    标签: python linear-regression cross-validation


    【解决方案1】:

    这是我用来对线性回归模型执行交叉验证并获取详细信息的代码:

    from sklearn.model_selection import cross_val_score
    scores = cross_val_score(clf, X_Train, Y_Train, scoring="neg_mean_squared_error", cv=10)
    rmse_scores = np.sqrt(-scores)
    

    正如this book 第 108 页所述,这就是我们使用 -score 的原因:

    Scikit-Learn 交叉验证功能需要一个实用函数 (越大越好)而不是成本函数(越低越好),所以 评分函数实际上是 MSE 的反面(即 负值),这就是前面的代码计算 -scores 的原因 在计算平方根之前。

    并使用这个简单的函数来可视化结果:

    def display_scores(scores):
        print("Scores:", scores)
        print("Mean:", scores.mean())
        print("Standard deviation:", scores.std())
    

    【讨论】:

      【解决方案2】:

      您可以使用model_selection 模块运行 10 倍:

      # for 0.18 version or newer, use:
      from sklearn.model_selection import cross_val_score
      
      # for pre-0.18 versions of scikit, use:
      from sklearn.cross_validation import cross_val_score
      
      X = # Some features
      y = # Some classes
      
      clf = linear_model.Lasso()
      scores = cross_val_score(clf, X, y, cv=10)
      

      此代码将返回 10 个不同的分数。你可以很容易地得到平均值:

      scores.mean()
      

      【讨论】:

      • 我正在使用 Python3,我收到以下错误消息:ImportError: No module named 'sklearn.model_selection'。有什么线索吗?
      • 您使用的是哪个 scikit-learn 版本? model_selection 模块功能曾经在 cross_validation 模块中
      • 我正在使用'0.17.1'
      • 在这种情况下,您需要导入 sklean.cross_validation。我正在相应地更新我的答案。
      • 对不起...我能够导入模块,但是,当我运行其余模块时,我收到以下错误消息:TypeError: __init__() got an unexpected keyword argument 'n_splits'跨度>
      猜你喜欢
      • 2016-01-15
      • 2016-12-15
      • 1970-01-01
      • 1970-01-01
      • 2020-08-29
      • 2018-08-29
      • 2017-06-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多