线性回归学习笔记

一、什么是线性回归

有一样本 x ,包含d个属性,可以表示为 x=\left \{ x_1;x_2;...x_n \right \},其中的 x_i 表示 x 在第 i 个属性上的取值,线性回归模型企图学得一个通过属性的线性组合来进行预测的函数,即:

f(x) = w_1x_1+w_2x_2+...+w_dx_d+b,一般用向量写成f(x)=w^{T}x+b,在学习获得 wb 从而找到最佳拟合各个样本的直线的过程就是线性回归。

二、怎样确定 wb

我们可以认为,当总体来说预测值 f(x_i) 与实际标签 y 的差别最小时,即误差最小时,我们就获得了最佳拟合直线,如何衡量误差,可以用均方误差,最小化均方误差时,我们解得的wb 就是最优的。

E(w,b)=\sum_{i=1}^{m}(y_i-wx_i-b)^{2}

(w^{*},b^{*}) = argmin\sum_{i=1}^{m}(f(x_i)-y_i)^{2}=argmin\sum_{i=1}^{m}(y_i-wx_i-b)^{2}

基于均方误差最小化来进行模型求解的方法称为最小二乘法。

在线性回归中,最小二乘法就是试图找到一条直线,使所有样本到直线上的欧氏距离之和最小。

容易知道,当\frac{\partial E(w,b)}{\partial w}=0时,损失降到最小。

我们令\hat{w}^{^{*}}=\left \{ w^{*},b^{*} \right \},可得w^{*} =argmin(y-X\hat{w})^{2}=argmin(y-X\hat{w})^{T}(y-X\hat{w}),

可得\frac{\partial E(\hat{w})}{\partial \hat{w}}=2X^{T}(X\hat{w}-y),令\frac{\partial E(\hat{w})}{\partial \hat{w}}=0,可得X^{T}X\hat{w}=X^{T}y。若X^{T}X满秩,那么可逆,

\hat{w}^{*}=(X^{T}X)^{-1}X^{T}y。若样本有p个特征,那么X有p+1列,X^{T}X有p+1行,p+1列。有n个样本,当p+1<=n时,X^{T}X满秩。

简单的线性回归

def standRegres(xArr,yArr):
        """
        xArr:特征向量;yArr:标签向量
        """
	xMat = np.mat(xArr);
	yMat = np.mat(yArr).T;
	xTx = xMat.T*xMat;
	if(np.linalg.det(xTx)==0): #行列式值为0
		print('这个矩阵不是满秩矩阵')
		return
	w = xTx.I*(xMat.T*yMat)
	yHat = xMat*w;
	# print(yHat,yMat)
	return w

三、局部加权线性回归(Locally Weighted Linear Regression)

局部加权线性回归就是给待遇测点附近的每个点都赋予一定的权重,用该种方法得:

\hat{w}=(X^{T}WX)^{-1}X^{T}Wy,其中,W 为一个矩阵,用于给每个点赋予权重。LWLR 使用核函数来给附近的点增加权重,高斯核对应的权重为:w(i,i) = exp(-(x_i-x)^{2}/2k^{2}),构建一个只有对角元素的权重矩阵,其中 x_i 为被侧点 x 的附近的点,两点越近,权重就会越大。k 值决定了要赋予附近的点多大的权重,k过大会欠拟合,过小会过拟合。

def lwlr(testPoint,xArr,yArr,k=1.0):
        """
        参数分别为 待测点、特征向量、标签向量,核的值
        """
	xMat = np.mat(xArr); yMat = np.mat(yArr).T
	m = xMat.shape[0]
	weights = np.eye(m)
	for i in range(m):
		diffMat = testPoint - xMat[i,:]
		weights[i,i] = np.exp(-diffMat*diffMat.T/(2.0*k**2))
	xTx = xMat.T*(weights*xMat)
	if(np.linalg.det(xTx)==0):
		print('这个矩阵不是满秩矩阵')
	ws = xTx.I*(xMat.T*(weights*yMat))
	return testPoint*ws 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值