【问题标题】:Sklearn training data and test data is not same sizeSklearn 训练数据和测试数据大小不同
【发布时间】:2023-03-12 14:20:01
【问题描述】:

我正在尝试在 sklearn 中做一个线性模型,因此我想测试我使用一些错误函数实现的模型。

首先,我为Xy 轴选择了功能。

#Predict the average parking rates per month
X = df[['Number of weekly riders', 'Price per week',
       'Population of city', 'Monthly income of riders']]

y = df['Average parking rates per month']

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

 #only 20% test size because we are working with a small dataset 
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=101)

lm = LinearRegression()

lm.fit(X_train, y_train)


在我拟合模型后,我尝试使用来自 sklearn 的 metrics 包中的一些错误函数

但显然我不能使用任何功能,因为没有等量的测试和训练数据

print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_train))  
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_train))  
print('Root Mean Squared Error:', np.sqrt(metrics.mean_squared_error(y_test, y_train)))

ValueError: Found input variables with inconsistent numbers of samples: [6, 21]

为了运行误差函数,您需要相同大小的训练数据和测试数据,这是真的吗?

【问题讨论】:

  • 你想用metrics 实现什么?如果你想测试模型的性能,你需要做mse(lm.predict(X_test), y_test),而不是在训练和测试标签之间。
  • @Chris 我怀疑重点是比较训练和测试的指标

标签: python machine-learning scikit-learn linear-regression


【解决方案1】:

当您使用 train/test-split 时,您希望划分训练和测试数据:

这个想法是,您使用训练数据训练算法,然后使用不可见的数据对其进行测试。所以所有的指标对于y_trainy_test 都没有任何意义。然后,您尝试比较的是预测和 y_test 这就像:

y_pred_test = lm.predict(X_test)
metrics.mean_absolute_error(y_test, y_pred_test)

也可以对训练分数有所了解;您可以通过预测训练数据来做到这一点:

y_pred_train = lm.predict(X_train)
metrics.mean_absolute_error(y_train, y_pred_train)

【讨论】:

    【解决方案2】:

    以下将引发inconsistent numbers of samples 错误。

    metrics.mean_absolute_error(y_test, y_train)
    

    原因是训练集和测试集的行数不同。

    在它们具有相同行数的极少数情况下,上述语句仍然没有意义:将测试集标签与训练集标签进行比较是没有用的。

    相反,您应该通过将X_test 输入到lm 来获得对测试功能的预测(X_test):

    y_hat = lm.predict(X_test)  # y_hat: predictions
    

    那么,这些指标就有意义了:

    metrics.mean_absolute_error(y_test, y_hat)
    

    【讨论】:

      【解决方案3】:

      您想比较y_testy_predict,这是x_test 通过您的回归器的输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-01-10
        • 2011-01-04
        • 2018-05-17
        • 2017-08-29
        • 2021-03-14
        • 2020-02-17
        • 2021-02-28
        相关资源
        最近更新 更多