【问题标题】:different results regression directly vs a generic sklearn function直接与通用 sklearn 函数的不同结果回归
【发布时间】:2017-08-20 15:21:15
【问题描述】:

当我直接进行简单的线性回归与可以接受任何建模参数并进行交叉验证的函数时,我得到了不同的结果。这似乎是我唯一的区别,但为什么结果如此不同。

直接使用linear_model.LinearRegression()

x_train,x_test,y_train,y_test = train_test_split(features.values,target.values)
regr = linear_model.LinearRegression()
regr.fit(x_train, y_train)
print(np.mean((regr.predict(x_test) - y_test) ** 2))

结果:

395.68

使用泛型函数

from sklearn.model_selection import KFold
from scipy.sparse import csr_matrix
from sklearn.metrics import r2_score

def cv_predict_report(func,params,features,target,fold,verbose=False):
    model_details,rmse = [],[]
    kf = KFold(n_splits=fold)

    for train_ix, test_ix in kf.split(features):

        x_train_poly, x_test_poly = features.iloc[train_ix].values,features.iloc[test_ix].values
        y_train,y_test = target.iloc[train_ix],target.iloc[test_ix]

        #model
        model = func(**params)
        model.fit(csr_matrix(x_train_poly),y_train)

        #save model details
        model_details.append(model)

        #predictions
        preds = model.predict(x_test_poly)

        model_rmse = np.mean((preds - y_test) ** 2)
        rmse.append(model_rmse)

    return model_details,rmse

使用 linear_model.LinearRegression 调用函数

from sklearn import linear_model
lm_model,lm_rmse = cv_predict_report(linear_model.LinearRegression,{},features,target,fold = 2)
print(lm_rmse)

结果

[440.2067193330667, 437.6263639733618]

【问题讨论】:

  • 你为什么指望train_test_split给你和KFold一样的分裂?
  • 我同意拆分在每种情况下都会有所不同。但我不认为这是他们的 MSE 差异巨大的唯一原因。或者可以吗?我尝试了多次运行不同随机状态的 train_test_split。结果波动不大。
  • MSE 的差异约为 10%,不是吗?这不是我所说的巨大,当然,很好在我期望使用数据集的不同拆分来训练相同的可变性范围内模型。此外,问题不是随机状态,而是训练集的大小不同。 train_test_split 默认使用 0.25 分割。您正在使用带有KFold 的 2 折,这将是 0.50 拆分。试试folds=4
  • 我尝试了 4 折吐出,mse 仍在 436 - 440 范围内。可能你是对的,差异只有 10%,如果这是分裂差异的结果,我可以。但我很担心,因为它们只是不重叠我运行它们的次数。 train_test_split 一直低于 400,kfold 一直高于 435s。

标签: python scikit-learn linear-regression


【解决方案1】:

嗯,我刚刚意识到问题出在哪里。通用函数调用“csr_matrix”,其行为怪异并导致更高的错误。我将阅读 csr_matrix 以及它为什么会导致这种差异

【讨论】:

    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 2021-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    相关资源
    最近更新 更多