多元线性回归获100%准确率存疑,请求代码合理性排查
多元线性回归得到100%准确率的问题排查
我在进行多元线性回归时得到了100%的准确率。我正在学习去年的一份教程,教程中使用相同模型并未获得100%准确率,但我却得到了,这让我感到困惑。以下是我的代码,请帮我判断做法是否正确,代码是否存在问题?
import numpy as np import matplotlib.pyplot as plt import pandas as pd dataset = pd.read_csv('M_Regression.csv') X = dataset.iloc[:, :-1].values Y = dataset.iloc[:, :1].values from sklearn.model_selection import train_test_split X_train, x_test, Y_train, y_test = train_test_split(X, Y, test_size=0.3, random_state=0) #regression from sklearn.linear_model import LinearRegression reg = LinearRegression() reg.fit(X_train,Y_train) #Prediction y_pred = reg.predict(x_test) print(str(y_test) + " - " + str(y_pred))
问题核心:目标变量提取错误
你代码里最关键的问题出在目标变量Y的提取方式上:
X = dataset.iloc[:, :-1].values是取数据集里所有行、除最后一列外的所有列作为特征,这部分逻辑是对的- 但
Y = dataset.iloc[:, :1].values是取所有行的第一列作为目标变量——这就出问题了!你的特征X里已经包含了第一列,等于模型在学习“用第一列预测第一列”,这当然会得到100%的完美预测结果,完全失去了回归任务的意义。
修正方法
把Y的提取代码改成取最后一列(也就是数据集里真正的目标变量列):
Y = dataset.iloc[:, -1].values
其他小建议
- 变量命名尽量保持一致:你现在混用了
X_train(大写)和x_test(小写),容易混淆,建议统一成X_train, X_test, Y_train, Y_test或者全小写格式 - 别用“准确率”评估线性回归:准确率是分类任务的专属指标,回归任务应该用均方误差(MSE)、R²分数这类指标来衡量模型性能,比如可以用
sklearn.metrics.r2_score(y_test, y_pred)来计算模型的拟合效果
这样修改后,你应该就能得到和教程类似的结果了~
内容的提问来源于stack exchange,提问作者Sidharth kaushik




