机器学习---线性回归推导以及python实现

机器学习笔记

线性回归

对于给定的特征X和标签y,可以直接调用sklearn里的LinearRegression()类初始化一个线性回归模型,之后通过fit()函数在给定的数据上做拟合。

# 实例化一个线性回归模型
regr = linear_model.LinearRegression()
# 拟合给定数据
regr.fit(X_train,y_train)

拟合完之后对象regr里存储着已经训练好的线性回归模型的参数,并可以使用regr来对未来的数据做预测了。这里需要注意的是,对于给定的数据我们可以提前分好训练集和测试集。

验证模型效果

对于验证模型的效果,可以从两个方面考虑。一方面,我们可以观察在训练数据上的 拟合度 ,另外一方面观察在测试数据上的 预测能力 。在训练数据上的拟合度是根本,如果在训练数据上都没有很好地拟合,就更不要谈测试数据上的验证了。

对于线性回归模型,它的拟合度可以通过真实值和预测值之间的误差来表示,具体计算细节会在线性回归的部分做更详细的讲解。

# 计算好训练好的模型在训练数据的拟合度
print(regr.score(X_train, y_train))
# 可视化在训练数据上拟合后的线条,这部分通过matplotlib库来实现,线条可以通过plot()函数来实现
# 首先,画出给定的训练数据
plt.scatter(x_train,y_train, color="red")
# 画出训练好的线条
plt.plot(x_train, regr.predict(x_train), color="blue")
# 画出x,y的标题
plt.xlabels('height(cm)')
plt.ylabels("weight(kg)")

编程实现

这里我们使用一个线性回归模型来拟合身高-体重的数据,也就是希望通过身高来预测标准体重。我们需要在训练数据上拟合模型,并在测试数据上做效果的评估。


%matplotlib inline 
# 引用 sklearn库,主要为了使用其中的线性回归模块 
from sklearn import datasets, linear_model 
# train_test_split用来把数据集拆分为训练集和测试集 
from sklearn.model_selection import train_test_split 
# 引用numpy库,主要用来做科学计算 
import numpy as np 
# 引用matplotlib库,主要用来画 
import matplotlib.pyplot as plt 
  
# 创建数据集,把数据写入到numpy数组 
data = np.array([[152,51],[156,53],[160,54],[164,55], 
        [168,57],[172,60],[176,62],[180,65], 
        [184,69],[188,72]]) 
# 打印出数据大小 
print("The size of dataset is (%d,%d)"% data.shape) 
# X,y分别存放特征向量和标签. 注:这里使用了reshape(-1,1), 其主要的原因是 
# data[:,0]是一维的数组(因为只有一个特征),但后面调用模型的时候对特征向量的要求 
# 是矩阵的形式,所以这里做了reshape的操作。 
X,y = data[:,0].reshape(-1,1), data[:,1] 

# 使用train_test_split函数把数据随机分为训练数据和测试数据。 训练数据的占比由 
# 参数train_size来决定。如果这个值等于0.8,就意味着随机提取80%的数据作为训练集 
X_train , X_test , y_train , y_test =train_test_split(X,y,train_size=0.8) 

# 实例化一个线性回归的模型 
regr = linear_model.LinearRegression()

# 在X_train,y_train上训练一个线性回归模型。 如果训练顺利,则regr会存储训练完成之后的结果模型 
regr.fit(X_train, y_train)
# 在训练集上做验证,并观察是否训练得当,首先输出训练集上的决定系数R平方值 
print ("Score for training data %.2f"% regr.score(X_train, y_train)) 

# 画训练数据 
plt.scatter(X_train, y_train, color='red') 
# 画在训练数据上已经拟合完毕的直线 
plt.plot(X_train,regr.predict(X_train),color="blue")
# 画测试数据 
plt.scatter(X_test, y_test, color='black') 
# 画x,y轴的标题 
plt.xlabel('height (cm)') 
plt.ylabel('weight(kg)') 
plt.show() 
# 输出在测试集上的决定系数R平方值 
print ("Score for testing data %.2f"%regr.score(X_test, y_test)) 
print ("Prediction for a person with height 163 is: %.2f"%regr.predict([[163]])) 

线性回归以及应用场景

线性回归作为一个必不可少的方法论,在几乎所有的回归问题上都可以派上用场。

线性会对的特点:

  • 最简单的回归模型
  • 适用于几乎所有的回归模型
  • 可解释性强
  • 适用于大数据

线性回归的应用:股价预测、营收预测、销量预测、成绩预测等

  • 几乎所有的回归问题都可以使用线性回归来解决
  • 线性回归训练效率高,可用于数据量特别大的情况
  • 线性回归的可解释性强,这也是很多模型不具备的优点

目标函数:平方误差

定义误差

在这里插入图片描述

​ 设蓝点为[[152,51],[156,53],[160,54],[164,55],[168,57],[172,60],[176,62],[180,65],[184,69],[188,72]],红线为线性回归拟合的直线

设蓝点的坐标为 ( x i , y i ) (x_i,y_i) (xi,yi) y ~ i \tilde{y}_i y~i表示预测值,则 ε i = ∣ y ~ i − y i ∣ \varepsilon_i=|\tilde{y}_i-y_i| εi=y~iyi表示误差,故平方误差为:
ε 2 = ∑ i = 1 N ε i 2 \varepsilon^2=\sum_{i=1}^N \varepsilon_i^2 ε2=i=1Nεi2
​ 我们吧上述的误差表示成了包含 ε \varepsilon ε的式子,用其来表式真实值和预测值之间的差异。

​ 一条线可以由两个参数来表示,分别是斜率 w w w和偏移量 b b b,所以寻求拟合度最好的那条线实际上是求解最好的 w w w b b b值。为了求解这两个值,我们需要把 ε \varepsilon ε表示成包含 w , b w,b w,b的函数,这样一来整个误差就可以表示成包含 w , b w,b w,b的函数。

①拟合曲线的参数可以表示为
y = w x + b y=wx+b y=wx+b
②设 l = ε 2 l=\varepsilon^2 l=ε2,其中 l l l为当误差最小时的值,其中
ε i 2 = ( y i − y ~ i ) 2 y ~ i = w x i + b ∴ l = ∑ i = 1 N ( y i − w x i − b ) 2       = ∑ i = 1 N ( w x i + b − y i ) 2 \varepsilon_i^2=(y_i-\tilde{y}_i)^2\\ \tilde{y}_i=wx_i+b\\ ∴l=\sum_{i=1}^N (y_i-wx_i-b)^2\\ \ \ \ \ \ =\sum_{i=1}^N (wx_i+b-y_i)^2 εi2=(yiy~i)2y~i=wxi+bl=i=1N(yiwxib)2     =i=1N(wxi+byi)2
​ 上式为目标函数(objective function),有了目标函数我么就可以通过最小化误差,求得 w , b w,b w,b的值,进而求得拟合曲线,这就是模型训练的过程。

求解一元函数的最优解

一元线性回归的最小二乘法

​ 对于一元线性回归的求解,我们首先把样本误差的平方作为 目标函数 ,再通过优化算法去寻求最优参数 w , b w,b w,b,整个过程称之为普通最小二乘法(ordinary least-square method)。利用 求导 的方法来求解 **极值点 (extreme point)**是解决最小二乘的一个经典的优化方法.。

线性回归的求解:

假设我们定义数据集: D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } D=\begin{Bmatrix}(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\end{Bmatrix} D={(x1,y1),(x2,y2),...,(xN,yN)}, N N N是样本总数。

第一步:先求目标函数对 b b b的偏导
l = ∑ i = 1 N ( w x ~ i + b − y i ) 2 令 偏 导 等 于 零 : ∂ l ∂ b = ∑ i = 1 N 2 ( w x i + b − y i ) = 0 b = ∑ i = 1 N y i − w ∑ i = 1 N x i N 其 中 令 X ˉ = 1 N ∑ i = 1 N x i            Y ˉ = 1 N ∑ i = 1 N y i 即 : b = Y ˉ − w X ˉ l =\sum_{i=1}^N (w\tilde{x}_i+b-y_i)^2 \\ 令偏导等于零:\frac{\partial l}{\partial b}=\sum_{i=1}^N2(wx_i+b-y_i)=0 \\ b=\frac{\sum_{i=1}^Ny_i-w\sum_{i=1}^Nx_i}{N} \\ 其中令\bar{X}=\frac{1}{N}\sum_{i=1}^Nx_i \\ \ \ \ \ \ \ \ \ \ \ \bar{Y}=\frac{1}{N}\sum_{i=1}^Ny_i \\ 即:b=\bar{Y}-w\bar{X} l=i=1N(wx~i+byi)2bl=i=1N2(wxi+byi)=0b=Ni=1Nyiwi=1NxiXˉ=N1i=1Nxi          Yˉ=N1i=1Nyib=YˉwXˉ

第二步:再求目标函数对 w w w的偏导
l = ∑ i = 1 N ( w x ~ i + b − y i ) 2 令 偏 导 等 于 零 : ∂ l ∂ w = ∑ i = 1 N 2 x i ( w x i + b − y i ) = 0 将    b = Y ˉ − w X ˉ    代 入 化 简 得 : w ∑ i = 1 N x i 2 + Y ˉ ∑ x = 1 N x i − w X ˉ ∑ i = 1 N x i − ∑ i = 1 N x i y i = 0 N w X 2 ‾ + N Y ˉ X ˉ − N w X ˉ 2 − N X Y ‾ = 0 故 : w = X Y ‾ − X ˉ Y ˉ X 2 ‾ − X ˉ 2 其 中 令 X ˉ = 1 N ∑ i = 1 N x i             Y ˉ = 1 N ∑ i = 1 N y i             X 2 ‾ = 1 N ∑ i = 1 N x i 2             X Y ‾ = 1 N ∑ i = 1 N x i y i l =\sum_{i=1}^N (w\tilde{x}_i+b-y_i)^2 \\ 令偏导等于零:\frac{\partial l}{\partial w}=\sum_{i=1}^N2x_i(wx_i+b-y_i)=0 \\ 将\ \ b=\bar{Y}-w\bar{X}\ \ 代入化简得:\\ w\sum_{i=1}^Nx_i^2+\bar{Y}\sum_{x=1}^Nx_i-w\bar{X}\sum_{i=1}^Nx_i-\sum_{i=1}^Nx_iy_i=0\\ Nw\overline{X^2}+N\bar{Y}\bar{X}-Nw\bar{X}^2-N\overline{XY}=0\\ 故:w=\frac{\overline{XY}-\bar{X}\bar{Y}}{\overline{X^2}-\bar{X}^2}\\ 其中令\bar{X}=\frac{1}{N}\sum_{i=1}^Nx_i \\ \ \ \ \ \ \ \ \ \ \ \ \bar{Y}=\frac{1}{N}\sum_{i=1}^Ny_i\\ \ \ \ \ \ \ \ \ \ \ \ \overline{X^2}=\frac{1}{N}\sum_{i=1}^Nx_i^2\\ \ \ \ \ \ \ \ \ \ \ \ \overline{XY}=\frac{1}{N}\sum_{i=1}^Nx_iy_i\\ l=i=1N(wx~i+byi)2wl=i=1N2xi(wxi+byi)=0  b=YˉwXˉ  wi=1Nxi2+Yˉx=1NxiwXˉi=1Nxii=1Nxiyi=0NwX2+NYˉXˉNwXˉ2NXY=0w=X2Xˉ2XYXˉYˉXˉ=N1i=1Nxi           Yˉ=N1i=1Nyi           X2=N1i=1Nxi2           XY=N1i=1Nxiyi

最终得到线性回归曲线的参数 w , b w,b w,b

{ w = X Y ‾ − X ˉ Y ˉ X 2 ‾ − X ˉ 2 b = Y ˉ − w X ˉ \begin{cases} w=\frac{\overline{XY}-\bar{X}\bar{Y}}{\overline{X^2}-\bar{X}^2} \\ b=\bar{Y}-w\bar{X} \\ \end{cases} {w=X2Xˉ2XYXˉYˉb=YˉwXˉ

一元线性回归编程实现
# 线性回归手动实现
# 创建数据集,把数据写入到numpy数组
import numpy as np 
import matplotlib.pyplot as plt 

# 生成数据
data = np.array([[152,51],[156,53],[160,54],[164,55], 
        [168,57],[172,60],[176,62],[180,65], 
        [184,69],[188,72]])
# 将数据分为x,y
x,y = data[:,0], data[:,1]
# 打印x,y的大小
print(x.shape,y.shape)
# 手动实现一元线性回归算法
# 实现w和b参数,这里w是斜率,b是偏移量
w = (np.mean(x*y)-np.mean(x)*np.mean(y))/(np.mean(x**2)- (np.mean(x))**2)
b = np.mean(y) - w*np.mean(x)
print("通过手动实现的线性回归模型参数: %.5f %.5f"%(w,b)) 

# 使用sklearn来实现线性回归模型,可以用来比较与手动实现的结果
from sklearn.linear_model import LinearRegression
# 实例化线性回归模型
regr = LinearRegression()
model = regr.fit(x.reshape(-1,1),y)
print("基于sklearn的线性回归模型参数:%.5f %.5f"%(model.coef_,model.intercept_))


"""
输出结果为:
	(10,) (10,)
	通过手动实现的线性回归模型参数: 0.57576 -38.07879
	基于sklearn的线性回归模型参数:0.57576 -38.07879
"""

L2范数(Norm)是指向量各元素的平方和然后求平方根

多元线性回归

​ 在大多数情况下,给定的数据通常会包含多个特征,所以更实用的还是度欧安线性回归模型。多元线性回归除了特征的增加,本质上与一元线性回归没有区别。

多元线性回归的模型: y i ~ = w j x i 1 + w j x i 2 + . . . + w j x i j + b \tilde{y_i}=w_jx_{i1}+w_jx_{i2}+...+w_jx_{ij}+b yi~=wjxi1+wjxi2+...+wjxij+b
y i ~ = ∑ j = 1 d w j x i j + b \tilde{y_i}=\sum_{j=1}^dw_jx_{ij}+b yi~=j=1dwjxij+b

多元线性回归的目标函数

假设我们定义数据集: D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } , x i ∈ R d , y i ∈ R D=\begin{Bmatrix}(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\end{Bmatrix},x_i\in R^d,y_i\in R D={(x1,y1),(x2,y2),...,(xN,yN)},xiRd,yiR
设 w = ( w 1 , w 2 , . . . , w d ) , b ∈ R 平 方 误 差 为 : ε 2 = ∑ i = 1 N ε i 2 其 中 : ε i 2 = ( y ~ i − y i ) 2 = ( ∑ j = 1 α w i x i j + b − y i ) 2 ∴ l = ∑ i = 1 N ε i 2       = ∑ i = 1 N ( ∑ j = 1 d w i x i j + b − y i ) 2 故 多 元 线 性 回 归 的 目 标 函 数 为 : l = ∑ i = 1 N ( ∑ j = 1 d w i x i j + b − y i ) 2 设w=(w_1,w_2,...,w_d),b \in R \\ 平方误差为:\varepsilon^2=\sum_{i=1}^N \varepsilon_i^2 \\ 其中:\varepsilon_i^2=(\tilde{y}_i-y_i)^2\\ =(\sum_{j=1}^αw_ix_{ij}+b-y_i)^2\\ ∴l=\sum_{i=1}^N\varepsilon_i^2\\ \ \ \ \ \ =\sum_{i=1}^N(\sum_{j=1}^dw_ix_{ij}+b-y_i)^2 \\ 故多元线性回归的目标函数为:l=\sum_{i=1}^N(\sum_{j=1}^dw_ix_{ij}+b-y_i)^2 w=(w1,w2,...,wd)bRε2=i=1Nεi2εi2=(y~iyi)2=(j=1αwixij+byi)2l=i=1Nεi2     =i=1N(j=1dwixij+byi)2线l=i=1N(j=1dwixij+byi)2
多元线性回归模型目标函数(矩阵形态)
由 上 可 知 : l = ∑ i = 1 N ( ∑ j = 1 d w i x i j + b − y i ) 2 由上可知:l=\sum_{i=1}^N(\sum_{j=1}^dw_ix_{ij}+b-y_i)^2 l=i=1N(j=1dwixij+byi)2
定义:
X = [ 1 x 11 ⋯ x 1 d ⋮ ⋮ ⋱ ⋮ 1 x n 1 ⋯ x n d ] X=\begin{bmatrix} 1 & x_{11} & \cdots & x_{1d} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n1} & \cdots & x_{nd} \end{bmatrix} \\ X=11x11xn1x1dxnd

w = [ w 0 w 1 w 2 ⋮ w d ] w=\begin{bmatrix} w_0\\ w_1 \\ w_2 \\ \vdots\\ w_d \end{bmatrix} w=w0w1w2wd
令 b = [ w 0 w 0 ⋮ w 0 ] 令b = \begin{bmatrix} w_0\\ w_0 \\ \vdots\\ w_0 \end{bmatrix} \\ b=w0w0w0
则 X w = [ w 0 + ∑ j = 1 d x 1 j w 0 + ∑ j = 1 d x 2 j ⋮ w 0 + ∑ j = 1 d x n j ] = [ y 1 ~ y 2 ~ ⋮ y n ~ ] ∴ X w − y = [ y 1 ~ − y 1 y 2 ~ − y 2 ⋮ y n ~ − y n ] 则 Xw= \begin{bmatrix} w_0+\sum_{j=1}^dx_{1j}\\ w_0+\sum_{j=1}^dx_{2j}\\ \vdots\\ w_0+\sum_{j=1}^dx_{nj} \end{bmatrix} = \begin{bmatrix} \tilde{y_1}\\ \tilde{y_2}\\ \vdots\\ \tilde{y_n} \end{bmatrix} \\ ∴Xw-y=\begin{bmatrix} \tilde{y_1} - y_1\\ \tilde{y_2} - y_2\\ \vdots\\ \tilde{y_n} - y_n \end{bmatrix} \\ Xw=w0+j=1dx1jw0+j=1dx2jw0+j=1dxnj=y1~y2~yn~Xwy=y1~y1y2~y2yn~yn
最 后 : l = ∣ ∣ X w − y ∣ ∣ 2 2 = ( y 1 ~ − y 1 ) 2 + ( y 2 ~ − y 2 ) 2 + ⋯ + ( y n ~ − y n ) 2 = ∣ ∣ X w − y ∣ ∣ 2 2      ( L 2 范 数 的 平 方 写 法 ) 最后:l = ||Xw-y||_2^2 = (\tilde{y_1} - y_1)^2+(\tilde{y_2} - y_2)^2+\cdots+(\tilde{y_n} - y_n)^2 = ||Xw-y||_2^2 \ \ \ \ (L2范数的平方写法) l=Xwy22=(y1~y1)2+(y2~y2)2++(yn~yn)2=Xwy22    L2

有了目标函数,就可以通过优化算法找让目标函数最小的 w w w了。

​ 跟一元线性回归类似,首先需要把导数设置为0,之后在求解它的极值点。但需要用到向量的求导法则。

多元线性回归的解析解

求解参数 w w w,使得 l = ∣ ∣ X w − y ∣ ∣ 2 2 l=||Xw-y||_2^2 l=Xwy22最小
                 l = ∣ ∣ X w − y ∣ ∣ 2 2 = ( X w − y ) T ( X w − y ) = ( ( X w ) T − y T ) ( X w − y ) = ( w T X T − y T ) ( X w − y )                        = w T X T X w − w T X T y − y T X w + y T y 此 时 由 于 :           w T X T y = ( y T X w ) T 且 w T 为 ( 1 , d + 1 ) 维 矩 阵 , X T 为 ( d + 1 , n ) 维 矩 阵 , y 为 ( n , 1 ) 维 矩 阵 , 故 w T X T y 为 常 数 , 故 : w T X T y = y T X w 此 时 : l = w T X T X w − 2 w T X T y + y T y 对 w 求 导 : ∂ l ∂ w = 2 X T X w − 2 w T X T y + y T y = 0 得 到 : X T X w = X T y 所 以 : w = ( X T X ) − 1 X T y \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ l=||Xw-y||_2^2 = (Xw-y)^T(Xw-y)\\ =((Xw)^T -y^T)(Xw-y)\\ =(w^TX^T-y^T)(Xw-y)\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ =w^TX^TXw-w^TX^Ty-y^TXw+y^Ty \\ 此时由于:\ \ \ \ \ \ \ \ \ w^TX^Ty=(y^TXw)^T \\ 且 w^T为(1,d+1)维矩阵,X^T为(d+1,n)维矩阵,y为(n,1)维矩阵,故 w^TX^Ty为常数,故: \\ w^TX^Ty=y^TXw \\ 此时:l=w^TX^TXw-2w^TX^Ty+y^Ty \\ 对w求导:\frac{\partial l}{\partial w} = 2X^TXw-2w^TX^Ty+y^Ty = 0\\ 得到:X^TXw=X^Ty\\ 所以:w=(X^TX)^{-1}X^Ty                 l=Xwy22=(Xwy)T(Xwy)=((Xw)TyT)(Xwy)=(wTXTyT)(Xwy)                      =wTXTXwwTXTyyTXw+yTy:         wTXTy=(yTXw)TwT(1,d+1)XT(d+1,n)y(n,1)wTXTy:wTXTy=yTXw:l=wTXTXw2wTXTy+yTywwl=2XTXw2wTXTy+yTy=0XTXw=XTyw=(XTX)1XTy
​ 解析解(Analytical Solution):对于多元线性回归的目标函数,通过求导的方式直接求出了对应的最优参数。

​ 注意:的一点是,并不是所有的目标函数我们都可以通过把导数设置为0的方式来求出极值点的,最经典的例子是逻辑回归

​ 线性回归中的参数 w w w:通过参数 w j w_j wj我们可以看出第j个特征对结果的影响。例如:某一特征的参数 w j w_j wj为整数,则该特征对结果的影响为正向的,反之则为负向的。

手动实现多元线性回归模型
# 手动实现多远线性回归模型
import numpy as np 
from sklearn.linear_model import LinearRegression 
# 生成样本数据,特征维度为2
X = np.array([[1, 1], [1, 2], [2, 2], [2, 3]])
# 此时线性回归模型为 有y = 1 * x_0 + 2 * x_2 +3
y = np.dot(X,np.array([1,2])) + 3 
# 先使用sklearn库来解决
# 实例化线性回归模型
regr = LinearRegression()
model = regr.fit(X, y)
# 打印参数以及偏移量
print("基于sklearn的线性回归的参数估计 coef:",model.coef_,"intercept: %.5f" %model.intercept_)
# 手动实现多元线性回归的参数估计,把最后的结果放在res变量里,res[0]存储的是偏移量,res[1:]存储的是模型参数。
# 在X的第一列添加 一列[1,1,1,1],为了与w0相乘,代表b(偏移量)
ones = np.ones(4).reshape(-1,1)
X = np.concatenate((ones,X), axis=1)
# X的转置
X_inverse = X.T
# X转置与X相乘的逆
XTX_1 = np.linalg.inv(np.dot(X_inverse, X))
temp = np.dot(XTX_1,X_inverse)
res = np.dot(temp,y)

# 打印参数以及偏移量(bias)
print("通过手动实现的线性回归模型参数为 coef:",res[1:], "intercept: %.5f" %res[0])

 在X的第一列添加 一列[1,1,1,1],为了与w0相乘,代表b(偏移量)
ones = np.ones(4).reshape(-1,1)
X = np.concatenate((ones,X), axis=1)
# X的转置
X_inverse = X.T
# X转置与X相乘的逆
XTX_1 = np.linalg.inv(np.dot(X_inverse, X))
temp = np.dot(XTX_1,X_inverse)
res = np.dot(temp,y)

# 打印参数以及偏移量(bias)
print("通过手动实现的线性回归模型参数为 coef:",res[1:], "intercept: %.5f" %res[0])

平方误差与高斯噪声

模型与误差
线性回归的最小二乘是基于高斯误差的假设得来的。

假设样本有一百万个,每个样本的预测值与真实值的误差,根据中心极限定理,该误差 ε \varepsilon ε服从高斯分布:
线 性 回 归 模 型 为 : y = w T X + b + ε 假 设 我 们 定 义 的 数 据 集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x N , y N ) } , 其 中 x i ∈ R d , N 是 样 本 总 数 , d 是 特 征 维 度 : y 1 = w T X + b + ε 1 y 2 = w T X + b + ε 2 ⋮ y N = w T X + b + ε N 上 述 ε ∼ N ( 0 , σ 2 ) 其 中 均 值 为 零 是 因 为 有 些 误 差 是 正 向 的 有 些 误 是 负 向 的 , 故 我 们 认 为 均 值 为 零 。 ε 为 一 个 随 机 变 量 。 线性回归模型为:y=w^TX+b+\varepsilon\\假设我们定义的数据集D=\{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\},其中x_i∈R^d,N是样本总数,d是特征维度:\\y_1=w^TX+b+\varepsilon_1\\y_2=w^TX+b+\varepsilon_2\\\vdots\\y_N=w^TX+b+\varepsilon_N\\上述\varepsilon\sim N(0,\sigma^2)\\其中均值为零是因为有些误差是正向的有些误是负向的,故我们认为均值为零。\varepsilon为一个随机变量。 线y=wTX+b+εD={(x1,y1),(x2,y2),,(xN,yN)}xiRd,Ndy1=wTX+b+ε1y2=wTX+b+ε2yN=wTX+b+εNεN(0,σ2)ε

样本的似然概率

线 性 回 归 模 型 : y = w T X + b + ε       ε ∼ N ( 0 , σ 2 ) 根 据 高 斯 分 布 的 性 质 y ∼ N ( w T X + b , σ 2 ) 针 对 于 样 本 ( x i , y i ) , P ( y i ∣ x i ) ∼ N ( w T x i + b , σ 2 ) = 1 2 π σ e − ( w T X + b − y i ) 2 2 σ 2 线性回归模型:y=w^TX+b+\varepsilon\ \ \ \ \ \varepsilon \sim N(0,\sigma^2)\\ 根据高斯分布的性质 y \sim N(w^TX+b,\sigma^2)\\ 针对于样本(x_i,y_i),P(y_i|x_i) \sim N(w^Tx_i+b,\sigma^2) = \frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(w^TX+b-y_i)^2}{2\sigma^2}} 线y=wTX+b+ε     εN(0,σ2)yN(wTX+b,σ2)(xi,yi)P(yixi)N(wTxi+b,σ2)=2π σ1e2σ2(wTX+byi)2

所有样本的似然概率

由 上 可 知 , 每 个 样 本 的 条 件 概 率 为 : ∏ i = 1 N P ( y i ∣ x i ) = ∏ i = 1 N 1 2 π σ e − ( w T X + b − y i ) 2 2 σ 2 w ∗ , b ∗ = a r g m a x w , b ∏ i = 1 N 1 2 π σ e − ( w T X + b − y i ) 2 2 σ 2 由 于 当 条 件 概 率 的 值 越 大 , 预 测 值 越 准 确 , 故 我 们 求 当 条 件 概 率 最 大 化 是 的 w , b 的 值 。 为 了 方 便 计 算 , w ∗ , b ∗ = l o g ( a r g m a x w , b ∏ i = 1 N 1 2 π σ e − ( w T X + b − y i ) 2 2 σ 2 ) = a r g m a x w , b ∑ i = 1 N l o g [ 1 2 π σ e − ( w T X + b − y i ) 2 2 σ 2 ) ] = a r g m a x w , b ∑ i = 1 N { − l o g ( 2 π σ ) − ( w T X + b − y i ) 2 2 σ 2 ) } = a r g m a x w , b ∑ i = 1 N { − ( w T X + b − y i ) 2 2 σ 2 ) }      ( 由 于 − l o g ( 2 π σ ) 为 常 量 , 不 影 响 后 续 对 w , b 的 取 值 , 故 可 以 舍 去 ) = a r g m a x w , b ∑ i = 1 N { − ( w T X + b − y i ) 2 ) }      ( 由 于 分 子 2 σ 2 也 为 常 量 , 故 也 可 以 舍 去 ) = a r g m i n w , b ( w T X + b − y i ) 2         ( 去 掉 负 号 将 最 大 化 问 题 简 化 为 最 小 化 问 题 ) 由上可知,每个样本的条件概率为:\\\prod_{i=1}^N P(y_i|x_i)=\prod_{i=1}^N\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(w^TX+b-y_i)^2}{2\sigma^2}} \\w^*,b^* = argmax_{w,b}\prod_{i=1}^N\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(w^TX+b-y_i)^2}{2\sigma^2}} \\由于当条件概率的值越大,预测值越准确,故我们求当条件概率最大化是的w,b的值。\\为了方便计算,w^*,b^* = log(argmax_{w,b}\prod_{i=1}^N\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(w^TX+b-y_i)^2}{2\sigma^2}})\\= argmax_{w,b}\sum_{i=1}^Nlog[\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{(w^TX+b-y_i)^2}{2\sigma^2}})]\\=argmax_{w,b}\sum_{i=1}^N\{-log(\sqrt{2\pi}\sigma)-{\frac{(w^TX+b-y_i)^2}{2\sigma^2}})\} \\=argmax_{w,b}\sum_{i=1}^N\{-{\frac{(w^TX+b-y_i)^2}{2\sigma^2}})\} \ \ \ \ (由于-log(\sqrt{2\pi}\sigma)为常量,不影响后续对w,b的取值,故可以舍去)\\=argmax_{w,b}\sum_{i=1}^N\{-{(w^TX+b-y_i)^2})\} \ \ \ \ (由于分子2\sigma^2也为常量,故也可以舍去)\\=argmin_{w,b}(w^TX+b-y_i)^2 \ \ \ \ \ \ \ (去掉负号将最大化问题简化为最小化问题) i=1NP(yixi)=i=1N2π σ1e2σ2(wTX+byi)2w,b=argmaxw,bi=1N2π σ1e2σ2(wTX+byi)2w,b便w,b=log(argmaxw,bi=1N2π σ1e2σ2(wTX+byi)2)=argmaxw,bi=1Nlog[2π σ1e2σ2(wTX+byi)2)]=argmaxw,bi=1N{log(2π σ)2σ2(wTX+byi)2)}=argmaxw,bi=1N{2σ2(wTX+byi)2)}    log(2π σ)wb=argmaxw,bi=1N{(wTX+byi)2)}    2σ2=argminw,b(wTX+byi)2       

注意:不同的误差模型得出的结果是不同的,上述讨论的为误差模型为高斯分布时的情况。

  以上推导可以得出,当我们把误差分布假定为高斯分布时,最终得出来的所有样本的似然函数其实就是开始讨论的平方误差。这种分析的方法也叫做概率解释(Probabilistic Interpretation)的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

埃及法老

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值