Python 直接回归与一般sklearn函数的不同结果

Python 直接回归与一般sklearn函数的不同结果,python,scikit-learn,linear-regression,Python,Scikit Learn,Linear Regression,当我直接做一个简单的线性回归和一个可以接受任何建模参数并进行交叉验证的函数时,我得到了不同的结果。这似乎是我唯一的不同,但为什么结果如此不同 直接使用linear_model.LinearRegression() 结果: 使用泛型函数 使用线性模型调用函数。线性回归 结果 我才意识到问题出在哪里。通用函数调用“csr_矩阵”,该矩阵行为异常,并导致更高的错误。我将阅读csr_矩阵,以及它导致这种差异的原因。我刚刚意识到问题是什么。通用函数调用“csr_矩阵”,该矩阵行为异常,并导致更高的错误。我

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

直接使用linear_model.LinearRegression() 结果: 使用泛型函数 使用线性模型调用函数。线性回归 结果
我才意识到问题出在哪里。通用函数调用“csr_矩阵”,该矩阵行为异常,并导致更高的错误。我将阅读csr_矩阵,以及它导致这种差异的原因。我刚刚意识到问题是什么。通用函数调用“csr_矩阵”,该矩阵行为异常,并导致更高的错误。我将阅读csr_矩阵,以及为什么它会导致这种差异

为什么您希望
列车测试_分割
给您提供与
KFold
相同的分割?我同意在每种情况下分割都会不同。但我不认为这是他们中小企业之间存在巨大差异的唯一原因。或者可以吗?我试过多次运行不同随机状态的列车测试。结果波动不大。最小均方误差的差值约为10%,不是吗?这并不是我所说的巨大,当然也在我所期望的使用不同的数据集分割来训练同一个模型的可变性范围之内。此外,问题不在于随机状态,而在于训练集的不同大小<代码>列车测试分割默认使用0.25分割。您将使用2倍的
KFold
,这将是0.50倍的分割。用
folds=4试试看
我试了4次,mse仍然在436-440范围内。也许你是对的,差异仅为10%,如果这是分裂差异的结果,我可以接受。但我很担心,因为我运行它们的次数并不重叠。列车测试分割始终低于400,kfold始终高于435s。为什么您希望
列车测试分割
为您提供与
kfold
相同的分割?我同意在每种情况下分割都会不同。但我不认为这是他们中小企业之间存在巨大差异的唯一原因。或者可以吗?我试过多次运行不同随机状态的列车测试。结果波动不大。最小均方误差的差值约为10%,不是吗?这并不是我所说的巨大,当然也在我所期望的使用不同的数据集分割来训练同一个模型的可变性范围之内。此外,问题不在于随机状态,而在于训练集的不同大小<代码>列车测试分割默认使用0.25分割。您将使用2倍的
KFold
,这将是0.50倍的分割。用
folds=4试试看
我试了4次,mse仍然在436-440范围内。也许你是对的,差异仅为10%,如果这是分裂差异的结果,我可以接受。但我很担心,因为我运行它们的次数并不重叠。列车测试分割始终低于400,kfold始终高于435s。
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
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]