Scikit-Learn LinearRegression用coef、intercept计算预测值与predict结果不符求解
问题原因
1. 列表加法逻辑错误
你初始化的data = [0] * len(X_test)是普通Python列表,Python中列表的+=操作是元素追加,不是数值的逐元素相加。每次循环你都会把t的所有元素追加到data列表末尾,最终data的长度会远大于测试集样本数,完全不符合计算预期。
2. 特征遍历范围不全
波士顿房价数据集去掉目标列medv后,共有13个输入特征,索引范围是0~12。你的循环写的是for i in range(0,12),只会遍历前12个特征(索引0~11),漏算了最后一个特征lstat的系数乘积项,直接导致计算结果缺失关键部分。
修正后的计算代码
import numpy as np coef = house_predictor.coef_.flatten() # 把二维系数数组摊平为一维,方便计算 intercept = house_predictor.intercept_ # 矩阵运算直接计算,不需要循环,效率更高 data_calc = np.dot(X_test.values, coef) + intercept # 若要保留循环写法,参考如下实现 # data = pd.Series([0]*len(X_test)) # for i in range(13): # 遍历所有13个特征 # data += X_test.iloc[:,i] * coef[i] # data += intercept
结果校验
修正后data_calc和house_predictor.predict(X_test)的结果完全一致,你可以通过np.allclose(data_calc, y_pred.flatten())验证,返回结果为True就说明计算正确。
内容的提问来源于stack exchange,提问作者Ginger_Chacha
相关产品推荐
相关产品推荐

