使用 Cross_Val_Score 进行多元线性回归评分

问题描述 投票:0回答:1

我从 cross_val_score 获取评分标准,它看起来不像默认值或输入的 (scoring='r2') r2 值。该值看起来像 RMS 或负平均误差。

我已经从简单的训练测试分割中查看了不同大小的测试数据集的预测值,尽管返回的 r2 指标在某些情况下看起来很低(0.14 到 0.97),但考虑到原始数据集的分层(预测的年龄),预测的年龄是合理的15 与真实的 10 对于该模型的使用需求来说并不可怕)。

这是原始模型构建代码:

#Using training and testing splits to check for model accuracy and overfitting
from sklearn.model_selection import cross_val_score, train_test_split
X_train, X_test, y_train, y_test = train_test_split(dftotal_ni, dfy_ni, test_size=0.12, random_state=42)
score = lm_ni.score(X_test, y_test)
print(score)

0.5729935257330477

#这对于所需目的来说并不可怕

Yhat_test = lm_ni.predict(X_test)
#Plot the relationaship between the Actual and Predicted Ages
plt.scatter(Yhat_test, y_test)
plt.xlabel("Actual Age (years)")
plt.ylabel("Predicted Age")
plt.show()

预测年龄与实际年龄

from sklearn import datasets
from sklearn.metrics import r2_score as r2
from sklearn.metrics import root_mean_squared_error as rms
from sklearn.model_selection import KFold
from numpy import mean, std
from sklearn.preprocessing import MinMaxScaler

# Create new model for KFolds
lm_ni_val = LinearRegression()
scoring = 'r2'

# Evaluate the model of KFolds
scores = cross_val_score(
    lm_ni_val, dftotal_ni, dfy_ni, scoring=scoring, cv=8, n_jobs=-1)

# Mean and standard deviation of accuracy
print('Accuracy: %.3f ,\nStandard Deviations :%.3f' %
      (mean(scores), std(scores)))

精度:-5076.400, 标准差:12227.956

#这些值没有任何意义,因为 r2 给出了多次迭代的训练测试分割,我使用 y_test 进行了研究,并预测了不同索引细分的 y

python cross-validation
1个回答
0
投票

可能是由于数据不匹配。因此,请确保 dftotal_ni(特征)和 dfy_ni(目标)正确对齐。交叉验证可能会看到意外的值或数据分割,从而导致奇怪的结果。 检查负 R² 值。在某些情况下,当模型拟合度非常差时,r2 可能会返回负值。 r2 为负表示模型的性能比预测 y 平均值的水平线差。然而,像 -5076 这样的极端值表明存在一些不寻常的情况。

如果 dftotal_ni 中的特征未正确缩放,这可能会扭曲模型在不同折叠上的性能,从而导致较大的变异性或极端评分。在运行交叉验证之前应用缩放可能会有所帮助,特别是当某些特征具有广泛的值时。 根据数据集的特征或折叠的分层方式,线性回归模型可能会出现过度拟合或欠拟合的情况。如果您不小心定义了自定义评分函数或修改了某些内容(例如,使用 rms 而不是 r2),这可能会解释不同的分数输出。仔细检查 Score='r2' 是否设置正确。我想如果你尝试解决这些问题,效果可能会更好。

© www.soinside.com 2019 - 2024. All rights reserved.