Python 残差图诊断与回归模型的改进

Python 残差图诊断与回归模型的改进,python,regression,linear-regression,knn,Python,Regression,Linear Regression,Knn,在为此创建回归模型时,我们可以绘制实际值函数中的残差 from sklearn.linear_model import LinearRegression X = housing[['lotsize']] y = housing[['price']] model = LinearRegression() model.fit(X, y) plt.scatter(y,model.predict(X)-y) 我们可以清楚地看到,对于较低的价格,差异(预测-实际值)主要是正的,而对于较高的价格,

在为此创建回归模型时,我们可以绘制实际值函数中的残差

from sklearn.linear_model import LinearRegression

X = housing[['lotsize']]
y = housing[['price']]

model = LinearRegression()
model.fit(X, y)

plt.scatter(y,model.predict(X)-y)

我们可以清楚地看到,对于较低的价格,差异(预测-实际值)主要是正的,而对于较高的价格,差异是负的

线性回归也是如此,因为模型针对RMSE进行了优化(因此未考虑残差符号)

但在做KNN的时候

from sklearn.neighbors import KNeighborsRegressor
model = KNeighborsRegressor(n_neighbors = 3)
我们可以找到类似的情节

在这种情况下,我们可以给出什么解释,以及如何改进模型

编辑:我们可以使用所有其他预测因子,结果相似

housing = housing.replace(to_replace='yes', value=1, regex=True)
housing = housing.replace(to_replace='no', value=0, regex=True)
X = housing[['lotsize','bedrooms','stories','bathrms','bathrms','driveway','recroom',
        'fullbase','gashw','airco','garagepl','prefarea']]
下图是具有3个邻居的KNN。因为有3个邻居,人们可能会认为装修过度,我不明白为什么会出现这种趋势


如果您查看适合度:

plt.scatter(X,y)
plt.plot(X,model.predict(X), '--k')

y值越高,则会得到负值,因为x=8000左右有一组数据,y值越高,与预期值相差很大

现在,如果你做knn,记住你的自变量只有一维,这意味着,你是根据你的成衣大小定义邻居,你使用组的平均值作为预测值。对于x=8000左右的高离群值,它们将与低于它们的值组合在一起,使差值为负值

如果你把它画出来:

plt.scatter(X,y)
plt.scatter(X,model.predict(X))


如何改进模型?由于只有一个预测因子,您无法做太多的事情,也许可以对
lotsize
进行分类,但我怀疑它会有多大变化。最有可能的情况是,您需要其他变量来查看是什么导致lotsize=8000左右的波动,然后您可以更好地建模因变量。

感谢stupidwolf的回答。您可以添加其他预测值。它确实改变了很多结果。很抱歉,有一个输入错误,它不会改变很多结果。在实际值函数中绘制残差时,有一个明显的趋势。很抱歉,你的问题非常广泛。看看数据,你看到的那些高价格值,它们可能是异常值,没有变量可以解释。因此,无论是knn还是线性回归,都无法将这些值与其他值区分开来