一、算法类型
有监督的回归算法
二、评估指标
残差平⽅和:
平均残差:
预测数据与标签均值之间差值的平⽅和:
实际值和均值之间的差值的平⽅和:
R方:
三、手写Python线性回归算法
1.简单线性回归
(1)损失函数公式
(2)参数w求解公式
(3)手写python算法
# 计算回归系数
def Standard_Regress(dataset):
xmat=np.mat(dataset.iloc[:,:-1].values)
ymat=np.mat(dataset.iloc[:,-1].values).T
xtx=xmat.T*xmat
if np.linalg.det(xtx)==0:
print('矩阵为奇异矩阵,无法求逆')
return
ws=xtx.I*(xmat.T*ymat) #关键的一步,ws的求解公式
return ws
(4)实战(调用函数)
2.局部加权线性回归
(1)损失函数公式
(2)参数w求解公式
说明:点越近,权重越大;k越小,大部分样本点的权重都接近0。
注意:wHat与W是不同的,wHat是斜率(截距),W是样本权重。
(3)手写python算法
def LWLR(dataset,newxdata,k=1.0):
'''
函数功能:计算局部加权线性回归的预测值
参数说明:
dataset:训练集,带标签,df格式
newxdata: 新样本,不带标签,df格式
返回:
y_re:新样本的标签预测值
'''
xmat=np.mat(dataset.iloc[:,:-1].values)
ymat=np.mat(dataset.iloc[:,-1].values).T
newxdata=np.mat(newxdata.values)
n=xmat.shape[0] # n个样本
weights=np.mat(np.eye(n)) #样本权重,不是斜率
m=newxdata.shape[0] # m个新样本
y_pre=np.zeros(m)
for i in range(m):
for j in range(n):
diff=xmat[j]-newxdata[i]
weights[j,j]=np.exp( (diff*diff.T) / ((-2)*(k**2)))
xtx=xmat.T * (weights * xmat) #关键的一步,对样本增加权重
if np.linalg.det(xtx)==0:
print('矩阵为奇异矩阵,无法求逆')
return
ws=xtx.I*(xmat.T*(weights*ymat)) #关键的一步,ws在各局部范围是不一样的
y_pre[i]=newxdata[i]*ws
return y_pre
(4)实战(调用函数)
3.Ridge线性回归
(1)损失函数公式
(2)参数w求解公式
说明:当惩罚力度越⼤,模型越不容易受到共线性的影响。
(3)手写python算法
#注:本质上还是构建一条线或一个超平面。所以要求解回归系数。
def Ridge_Regress(dataset,lam=0.2):
xmat=np.mat(dataset.iloc[:,:-1].values)
ymat=np.mat(dataset.iloc[:,-1].values).T
xtx=xmat.T*xmat
denom=xtx+lam*np.eye(xmat.shape[1])
ws=denom.I*(xmat.T*ymat) #关键的一步,ws的求解公式
return ws
(4)实战(调用函数)
4.Lasso线性回归
(1)损失函数公式
(2)参数w求解公式
(3)手写python算法
#注:本质上还是构建一条线或一个超平面。所以要求解回归系数。
def Lasso_Regress(dataset,lam=0.2):
xmat=np.mat(dataset.iloc[:,:-1].values)
ymat=np.mat(dataset.iloc[:,-1].values).T
xtx=xmat.T*xmat
i=np.eye(xmat.shape[1])
ws=(xtx.I)*((xmat.T*ymat)-((lam*i)/2)) #关键的一步,ws的求解公式
return ws
(4)实战(调用函数)
四、Python调包实现
import statsmodels.api as sm #线性回归与更多解释
from sklearn.linear_model import LinearRegression
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
from sklearn.metrics import mean_squared_error,r2_score #评估指标
from statsmodels.stats.outliers_influence import variance_inflation_factor #多重共线性判断
转载:https://blog.csdn.net/cqx2020/article/details/106555420
查看评论