简介
解决回归问题,思想简单,实现容易,许多强大的非线性模型的基础,结果具有很好的可解释性,蕴含机器学习中的很多重要思想。
简单线性回归
y(i)=ax(i)+b
其中 y^(i)为预测值
我们希望 y(i)与 y^(i)的差距尽可能小,考虑所有样本:
i=1∑m(y(i)−y^(i))2
目标: 找到a和b,使得 i=1∑m(y(i)−y^(i))2尽可能小
典型的最小二乘法问题:最小化误差的平方
a=i=1∑m(x(i)−xˉ)2i=1∑m(x(i)−xˉ)(y(i)−yˉ)
b=yˉ−axˉ
向量化运算
i=1∑mw(i)⋅v(i)⟹w⋅v
w=(w(1),w(2),⋯,w(m))
v=(v(1),v(2),⋯,v(m))
回归算法的评价
均方误差MSE(Mean Squared Error)
MSE=m1i=1∑m(ytest(i)−y^test(i))2
均方根误差RMSE(Root Mean Squared Error)
RMSE=m1i=1∑m(ytest(i)−y^test(i))2
平均绝对误差MAE(Mean Absolute Error)
MAE=m1i=1∑m∣ytest(i)−y^test(i)∣
from sklearn.metrics import mean_squared_error
from sklearn.metrics import mean_absolute_error
msek = mean_squared_error(y_test,y_predict)
maek = mean_absolute_error(y_test,y_predict)
R Square
最好的衡量线性回归法的指标
R2=1−i=1∑m(yˉ−y(i))2i=1∑m(y^(i)−y(i))2=1−i=1∑m(yˉ−y(i))2/mi=1∑m(y^(i)−y(i))2/m=1−Var(y)MSE(y^,y)
其中分子是使用我们的模型预测产生的错误,分母是使用 y=yˉ预测产生的错误
R2≤1
R2越大越好,当我们的预测模型不犯任何错误时, R2得到最大值1
当我们的模型等于基准模型时, R2为0
如果 R2<0,说明我们学习到的模型还不如基准模型。此时,很有可能我们的数据不存在任何线性关系。
from sklearn.metrics import r2_score
print(r2_score(y_test,y_predict))
多元线性回归
x(i)=(X1(i),X2(i),⋯,Xn(i))
y=θ0+θ1x1+θ2x2+⋯+θnxn
y^(i)=θ0+θ1X1(i)+θ2X2(i)+⋯+θnXn(i),其中 X0(i)=1
θ=(θ0,θ1,θ2,⋯,θn)T
目标:使 i=1∑m(y(i)−y^(i))2尽可能小
X(i)=(X0(i),X1(i),X2(i),⋯,Xn(i))
Xb=⎝⎜⎜⎜⎛11⋯1X1(1)X1(2)X1(m)X2(1)X2(2)X2(m)………Xn(1)Xn(2)⋯Xn(m)⎠⎟⎟⎟⎞
θ=⎝⎜⎜⎜⎜⎛θ0θ1θ2⋯θn⎠⎟⎟⎟⎟⎞
y^=Xb⋅θ
多元线性回归的正规方程解(Normal Equation)
θ=(XbTXb)−1XbTy
时间复杂度高: O(n3)优化过后 O(n2.4)
优点:不需要对数据做归一化处理
sklearn中的回归问题
from sklearn.linear_model import LinearRegression
lin_reg = LinearRegression()
lin_reg.fit(X_train,y_train)
print(lin_reg.coef_)
print(lin_reg.intercept_)
from sklearn.neighbors import KNeighborsRegressor
knn_reg =KNeighborsRegressor()
knn_reg.fit(X_train,y_train)
aa = knn_reg.score(X_test,y_test)
print(aa)
线性回归算法总结
1.典型的参数学习,而KNN是非参数学习
2.只能解决回归问题,虽然很多分类方法中,线性回归是基础。而KNN既可以解决分类问题,也可以解决回归问题。