线性回归笔记

5 篇文章 1 订阅
3 篇文章 0 订阅

线性回归


一、原理

1.1 定义

寻找一条直线,最大程度“拟合”样本特征(X_data)和样本输出标记(Label)之间的关系。

1.2 解决的问题

分类问题和回归问题

二、简单线性回归(Sample Linear Regression Model)

2.1 公式推导

  1. 假设最佳拟合的直线方程为y=wx+b y=wx+b y = w x + b ,则有每一个样本点x(i) x(i) x ( i ) 就存在一个真实值y(i) y(i) y ( i ) 与其对应;
  2. 根据我们预测的直线方程ˆy(i)=wx(i)+b y^(i)=wx(i)+b y ^ ( i ) = w x ( i ) + b ,我们希望y(i) y(i) y ( i ) ˆy(i) y^(i) y ^ ( i ) 的差距尽量小;
  3. 那么我可以构造一个损失函数loss=ni=1(y(i)ˆy(i))2 loss=ni=1(y(i)y^(i))2 l o s s = ∑ i = 1 n ( y ( i ) − y ^ ( i ) ) 2 ,我的目标就是让损失函数尽可能的小;
  4. 将我们的预测函数ˆy(i)=wx(i)+b y^(i)=wx(i)+b y ^ ( i ) = w x ( i ) + b 带入损失函数中,得到
    loss=ni=1(y(i)wx(i)b)2
    l o s s = ∑ i = 1 n ( y ( i ) − w x ( i ) − b ) 2

    其中x(i) x ( i ) y(i) y ( i ) 均为已知量,我们需要找到w和b是loss的值尽可能小,这里需要使用最小二乘法
  5. 通过最小二乘法求得:
    w=ni=1(x(i)ˉx)(y(i)ˉy)ni=1(x(i)ˉx)2b=ˉywˉx
    w = ∑ i = 1 n ( x ( i ) − x ¯ ) ( y ( i ) − y ¯ ) ∑ i = 1 n ( x ( i ) − x ¯ ) 2 b = y ¯ − w x ¯

2.2 流程图

简单线性回归

2.3 代码实现

x_train =np.array([1.,2.,3.,4.,5.])
y_train =np.array([1.,3.,2.,3.,5.])
x_mean=np.mean(x_train)#x平均值
y_mean=np.mean(y_train)#y平均值
fraction_up=0.0#w的分子
fraction_down=0.0#w的分母
for x_i,y_i in zip(x_train,y_train):
    fraction_up+=(x_i-x_mean)*(y_i-y_mean)#分子加和
    fraction_down+=(x_i-x_mean)**2#分母加和
w=fraction_up/fraction_down#计算w
b=y_mean-w*x_mean#计算b
y_hat=w*x_train+b#构造预测函数

简单回归图像

2.4、向量化处理

x_train =np.array([1.,2.,3.,4.,5.])
y_train =np.array([1.,3.,2.,3.,5.])
x_mean=np.mean(x_train)#x平均值
y_mean=np.mean(y_train)#y平均值
fraction_up=(x_train-x_mean).dot(y_train-y_mean)#w的分子(修改此处)
fraction_down=(x_train-x_mean).dot(x_train-x_mean)#w的分母(修改此处)
w=fraction_up/fraction_down#计算w
b=y_mean-w*x_mean#计算b
y_hat=w*x_train+b#构造预测函数

三、多元线性回归(Multivariable Linear Regression Model)

3.1 公式推导

对于一般的数据集D D D={(xi,yi)}ni=1),样本存在d个特征,则线性回归公式为
y=wTX+b

y = w T X + b

b=w0X0(X01) b = w 0 X 0 ( X 0 ≡ 1 ) ,则 y=θX
y = θ X
其中
θ=(w0,w1,w2,w3,,wn)TX=[1X(1)1X(1)2X(1)n1X(2)1X(2)2X(2)n1X(d)1X(d)2X(d)n]y=(y0,y1,y2,y3,,yn)T
θ = ( w 0 , w 1 , w 2 , w 3 , … , w n ) T X = [ 1 X 1 ( 1 ) X 2 ( 1 ) ⋯ X n ( 1 ) 1 X 1 ( 2 ) X 2 ( 2 ) ⋯ X n ( 2 ) ⋮ ⋮ ⋮ ⋱ ⋮ 1 X 1 ( d ) X 2 ( d ) ⋯ X n ( d ) ] y = ( y 0 , y 1 , y 2 , y 3 , … , y n ) T

同样2.1一样构造损失函数,然后使用最小二乘法,求得正规方程解 θ θ (Normal Equation)
θ=(XTX)1XTy
θ = ( X T X ) − 1 X T y

3.2 优缺点

缺点:时间复杂度高,约n³的复杂度。
优点:θ θ 的结果是依赖矩阵运算得来,不依赖空间距离(不受特征量纲影响),所以数据集不需要做归一化处理。

3.3代码实现

在实现代码前,先明确sklearn中定义的两个参数名称截距(intercept)和系数(coefficients):
θ=(      θ0截距intercept_ θ1θ2θ3θn}系数coef_ )

θ = (             θ 0 → 截距intercept_  θ 1 θ 2 θ 3 ⋮ θ n } 系数coef_  )

'''这里只列出核心计算代码'''
X=np.hstack([np.ones((len(X_train),1)),X_train])#对原X数据集增加一列常数项1
theta=np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y_train)#np.linalg.inv矩阵求逆
intercept=theta[0]#截距
coef=theta[1:]#系数
###############预测y###############
X_t=np.hstack([np.ones((len(X_test),1)),X_test])#对原X数据集增加一列常数项1
y_hat=X_t.dot(theta)#构造预测函数,计算y_hat
'''之后可用R²对y_hat和y_test进行比较评分'''

四、sklearn实现多元线性回归

import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

boston=datasets.load_boston()#加载数据集
X=boston.data#分离X
y=boston.target#分离y
X=X[y<50.0]#去掉房价中高于50的样本点,该样本点定义房价大于50的部分恒为50,该值影响预测准确性
y=y[y<50.0]
X_train,X_test,y_train,y_test=train_test_split(X,y,random_state=666)#切分训练集和测试集
lin_reg=LinearRegression()#实例化线性回归模型
lin_reg.fit(X_train,y_train)#训练样本
y_hat=lin_reg.predict(X_test)#预测y
lin_reg.score(X_test,y_test)#获取得分R²
print("该模型截距为:",lin_reg.intercept_)#输出截距
print("该模型系数为:",lin_reg.coef_)#输出系数
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值