机器学习笔记

线性回归

对于给定的特征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]],红线为线性回归拟合的直线

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

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

①拟合曲线的参数可以表示为
y=wx+by=wx+b y=wx+b
②设l=ε2l=\varepsilon^2l=ε2,其中lll为当误差最小时的值,其中
εi2=(yi−y~i)2y~i=wxi+b∴l=∑i=1N(yi−wxi−b)2=∑i=1N(wxi+b−yi)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​=(yi​−y~​i​)2y~​i​=wxi​+b∴l=i=1∑N​(yi​−wxi​−b)2     =i=1∑N​(wxi​+b−yi​)2
​ 上式为目标函数(objective function),有了目标函数我么就可以通过最小化误差,求得w,bw,bw,b的值,进而求得拟合曲线,这就是模型训练的过程。

求解一元函数的最优解

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

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

线性回归的求解:

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

第一步:先求目标函数对bbb的偏导
l=∑i=1N(wx~i+b−yi)2令偏导等于零:∂l∂b=∑i=1N2(wxi+b−yi)=0b=∑i=1Nyi−w∑i=1NxiN其中令Xˉ=1N∑i=1NxiYˉ=1N∑i=1Nyi即:b=Yˉ−wXˉ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=1∑N​(wx~i​+b−yi​)2令偏导等于零:∂b∂l​=i=1∑N​2(wxi​+b−yi​)=0b=N∑i=1N​yi​−w∑i=1N​xi​​其中令Xˉ=N1​i=1∑N​xi​          Yˉ=N1​i=1∑N​yi​即:b=Yˉ−wXˉ

第二步:再求目标函数对www的偏导
l=∑i=1N(wx~i+b−yi)2令偏导等于零:∂l∂w=∑i=1N2xi(wxi+b−yi)=0将b=Yˉ−wXˉ代入化简得:w∑i=1Nxi2+Yˉ∑x=1Nxi−wXˉ∑i=1Nxi−∑i=1Nxiyi=0NwX2‾+NYˉXˉ−NwXˉ2−NXY‾=0故:w=XY‾−XˉYˉX2‾−Xˉ2其中令Xˉ=1N∑i=1NxiYˉ=1N∑i=1NyiX2‾=1N∑i=1Nxi2XY‾=1N∑i=1Nxiyil =\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=1∑N​(wx~i​+b−yi​)2令偏导等于零:∂w∂l​=i=1∑N​2xi​(wxi​+b−yi​)=0将  b=Yˉ−wXˉ  代入化简得:wi=1∑N​xi2​+Yˉx=1∑N​xi​−wXˉi=1∑N​xi​−i=1∑N​xi​yi​=0NwX2+NYˉXˉ−NwXˉ2−NXY=0故:w=X2−Xˉ2XY−XˉYˉ​其中令Xˉ=N1​i=1∑N​xi​           Yˉ=N1​i=1∑N​yi​           X2=N1​i=1∑N​xi2​           XY=N1​i=1∑N​xi​yi​

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

{w=XY‾−XˉYˉX2‾−Xˉ2b=Yˉ−wXˉ\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=X2−Xˉ2XY−Xˉ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)是指向量各元素的平方和然后求平方根

多元线性回归

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

多元线性回归的模型:yi~=wjxi1+wjxi2+...+wjxij+b\tilde{y_i}=w_jx_{i1}+w_jx_{i2}+...+w_jx_{ij}+byi​~​=wj​xi1​+wj​xi2​+...+wj​xij​+b
yi~=∑j=1dwjxij+b\tilde{y_i}=\sum_{j=1}^dw_jx_{ij}+b yi​~​=j=1∑d​wj​xij​+b

多元线性回归的目标函数

假设我们定义数据集:D={(x1,y1),(x2,y2),...,(xN,yN)},xi∈Rd,yi∈RD=\begin{Bmatrix}(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\end{Bmatrix},x_i\in R^d,y_i\in RD={(x1​,y1​),(x2​,y2​),...,(xN​,yN​)​},xi​∈Rd,yi​∈R
设w=(w1,w2,...,wd),b∈R平方误差为:ε2=∑i=1Nεi2其中:εi2=(y~i−yi)2=(∑j=1αwixij+b−yi)2∴l=∑i=1Nεi2=∑i=1N(∑j=1dwixij+b−yi)2故多元线性回归的目标函数为:l=∑i=1N(∑j=1dwixij+b−yi)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​),b∈R平方误差为:ε2=i=1∑N​εi2​其中:εi2​=(y~​i​−yi​)2=(j=1∑α​wi​xij​+b−yi​)2∴l=i=1∑N​εi2​     =i=1∑N​(j=1∑d​wi​xij​+b−yi​)2故多元线性回归的目标函数为:l=i=1∑N​(j=1∑d​wi​xij​+b−yi​)2
多元线性回归模型目标函数(矩阵形态)
由上可知:l=∑i=1N(∑j=1dwixij+b−yi)2由上可知:l=\sum_{i=1}^N(\sum_{j=1}^dw_ix_{ij}+b-y_i)^2 由上可知:l=i=1∑N​(j=1∑d​wi​xij​+b−yi​)2
定义:
X=[1x11⋯x1d⋮⋮⋱⋮1xn1⋯xnd]X=\begin{bmatrix} 1 & x_{11} & \cdots & x_{1d} \\ \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n1} & \cdots & x_{nd} \end{bmatrix} \\ X=⎣⎢⎡​1⋮1​x11​⋮xn1​​⋯⋱⋯​x1d​⋮xnd​​⎦⎥⎤​

w=[w0w1w2⋮wd]w=\begin{bmatrix} w_0\\ w_1 \\ w_2 \\ \vdots\\ w_d \end{bmatrix} w=⎣⎢⎢⎢⎢⎢⎡​w0​w1​w2​⋮wd​​⎦⎥⎥⎥⎥⎥⎤​
令b=[w0w0⋮w0]令b = \begin{bmatrix} w_0\\ w_0 \\ \vdots\\ w_0 \end{bmatrix} \\ 令b=⎣⎢⎢⎢⎡​w0​w0​⋮w0​​⎦⎥⎥⎥⎤​
则Xw=[w0+∑j=1dx1jw0+∑j=1dx2j⋮w0+∑j=1dxnj]=[y1~y2~⋮yn~]∴Xw−y=[y1~−y1y2~−y2⋮yn~−yn]则 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=1d​x1j​w0​+∑j=1d​x2j​⋮w0​+∑j=1d​xnj​​⎦⎥⎥⎥⎥⎤​=⎣⎢⎢⎢⎡​y1​~​y2​~​⋮yn​~​​⎦⎥⎥⎥⎤​∴Xw−y=⎣⎢⎢⎢⎡​y1​~​−y1​y2​~​−y2​⋮yn​~​−yn​​⎦⎥⎥⎥⎤​
最后:l=∣∣Xw−y∣∣22=(y1~−y1)2+(y2~−y2)2+⋯+(yn~−yn)2=∣∣Xw−y∣∣22(L2范数的平方写法)最后: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=∣∣Xw−y∣∣22​=(y1​~​−y1​)2+(y2​~​−y2​)2+⋯+(yn​~​−yn​)2=∣∣Xw−y∣∣22​    (L2范数的平方写法)

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

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

多元线性回归的解析解

求解参数www,使得l=∣∣Xw−y∣∣22l=||Xw-y||_2^2l=∣∣Xw−y∣∣22​最小
l=∣∣Xw−y∣∣22=(Xw−y)T(Xw−y)=((Xw)T−yT)(Xw−y)=(wTXT−yT)(Xw−y)=wTXTXw−wTXTy−yTXw+yTy此时由于:wTXTy=(yTXw)T且wT为(1,d+1)维矩阵,XT为(d+1,n)维矩阵,y为(n,1)维矩阵,故wTXTy为常数,故:wTXTy=yTXw此时:l=wTXTXw−2wTXTy+yTy对w求导:∂l∂w=2XTXw−2wTXTy+yTy=0得到:XTXw=XTy所以:w=(XTX)−1XTy\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ 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=∣∣Xw−y∣∣22​=(Xw−y)T(Xw−y)=((Xw)T−yT)(Xw−y)=(wTXT−yT)(Xw−y)                      =wTXTXw−wTXTy−yTXw+yTy此时由于:         wTXTy=(yTXw)T且wT为(1,d+1)维矩阵,XT为(d+1,n)维矩阵,y为(n,1)维矩阵,故wTXTy为常数,故:wTXTy=yTXw此时:l=wTXTXw−2wTXTy+yTy对w求导:∂w∂l​=2XTXw−2wTXTy+yTy=0得到:XTXw=XTy所以:w=(XTX)−1XTy
​ 解析解(Analytical Solution):对于多元线性回归的目标函数,通过求导的方式直接求出了对应的最优参数。

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

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

手动实现多元线性回归模型

# 手动实现多远线性回归模型
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=wTX+b+ε假设我们定义的数据集D={(x1,y1),(x2,y2),⋯,(xN,yN)},其中xi∈Rd,N是样本总数,d是特征维度:y1=wTX+b+ε1y2=wTX+b+ε2⋮yN=wTX+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​)},其中xi​∈Rd,N是样本总数,d是特征维度:y1​=wTX+b+ε1​y2​=wTX+b+ε2​⋮yN​=wTX+b+εN​上述ε∼N(0,σ2)其中均值为零是因为有些误差是正向的有些误是负向的,故我们认为均值为零。ε为一个随机变量。

样本的似然概率

线性回归模型:y=wTX+b+εε∼N(0,σ2)根据高斯分布的性质y∼N(wTX+b,σ2)针对于样本(xi,yi),P(yi∣xi)∼N(wTxi+b,σ2)=12πσe−(wTX+b−yi)22σ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)根据高斯分布的性质y∼N(wTX+b,σ2)针对于样本(xi​,yi​),P(yi​∣xi​)∼N(wTxi​+b,σ2)=2π​σ1​e−2σ2(wTX+b−yi​)2​

所有样本的似然概率

由上可知,每个样本的条件概率为:∏i=1NP(yi∣xi)=∏i=1N12πσe−(wTX+b−yi)22σ2w∗,b∗=argmaxw,b∏i=1N12πσe−(wTX+b−yi)22σ2由于当条件概率的值越大,预测值越准确,故我们求当条件概率最大化是的w,b的值。为了方便计算,w∗,b∗=log(argmaxw,b∏i=1N12πσe−(wTX+b−yi)22σ2)=argmaxw,b∑i=1Nlog[12πσe−(wTX+b−yi)22σ2)]=argmaxw,b∑i=1N{−log(2πσ)−(wTX+b−yi)22σ2)}=argmaxw,b∑i=1N{−(wTX+b−yi)22σ2)}(由于−log(2πσ)为常量,不影响后续对w,b的取值,故可以舍去)=argmaxw,b∑i=1N{−(wTX+b−yi)2)}(由于分子2σ2也为常量,故也可以舍去)=argminw,b(wTX+b−yi)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=1∏N​P(yi​∣xi​)=i=1∏N​2π​σ1​e−2σ2(wTX+b−yi​)2​w∗,b∗=argmaxw,b​i=1∏N​2π​σ1​e−2σ2(wTX+b−yi​)2​由于当条件概率的值越大,预测值越准确,故我们求当条件概率最大化是的w,b的值。为了方便计算,w∗,b∗=log(argmaxw,b​i=1∏N​2π​σ1​e−2σ2(wTX+b−yi​)2​)=argmaxw,b​i=1∑N​log[2π​σ1​e−2σ2(wTX+b−yi​)2​)]=argmaxw,b​i=1∑N​{−log(2π​σ)−2σ2(wTX+b−yi​)2​)}=argmaxw,b​i=1∑N​{−2σ2(wTX+b−yi​)2​)}    (由于−log(2π​σ)为常量,不影响后续对w,b的取值,故可以舍去)=argmaxw,b​i=1∑N​{−(wTX+b−yi​)2)}    (由于分子2σ2也为常量,故也可以舍去)=argminw,b​(wTX+b−yi​)2       (去掉负号将最大化问题简化为最小化问题)

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

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

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

  1. 【机器学习基础】数学推导+纯Python实现机器学习算法30:系列总结与感悟

    Python机器学习算法实现 Author:louwill Machine Learning Lab 终于到了最后的总结.从第一篇线性回归的文章开始到现在,已经接近有两年的时间了.当然,也不是纯写这3 ...

  2. 【机器学习基础】数学推导+纯Python实现机器学习算法24:HMM隐马尔可夫模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab HMM(Hidden Markov Model)也就是隐马尔可夫模型,是一种由隐藏的马尔可夫链随机 ...

  3. 【机器学习基础】数学推导+纯Python实现机器学习算法28:CRF条件随机场

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文我们来看一下条件随机场(Conditional Random Field,CRF)模型.作为概 ...

  4. 【机器学习基础】数学推导+纯Python实现机器学习算法27:EM算法

    Python机器学习算法实现 Author:louwill Machine Learning Lab 从本篇开始,整个机器学习系列还剩下最后三篇涉及导概率模型的文章,分别是EM算法.CRF条件随机场和 ...

  5. 【机器学习基础】数学推导+纯Python实现机器学习算法26:随机森林

    Python机器学习算法实现 Author:louwill Machine Learning Lab 自从第14篇文章结束,所有的单模型基本就讲完了.而后我们进入了集成学习的系列,整整花了5篇文章的篇 ...

  6. 【机器学习基础】数学推导+纯Python实现机器学习算法25:CatBoost

    Python机器学习算法实现 Author:louwill Machine Learning Lab 本文介绍GBDT系列的最后一个强大的工程实现模型--CatBoost.CatBoost与XGBoo ...

  7. 【机器学习基础】数学推导+纯Python实现机器学习算法24:LightGBM

    Python机器学习算法实现 Author:louwill Machine Learning Lab 第17讲我们谈到了竞赛大杀器XGBoost,本篇我们来看一种比XGBoost还要犀利的Boosti ...

  8. 【机器学习基础】数学推导+纯Python实现机器学习算法23:kmeans聚类

    Python机器学习算法实现 Author:louwill Machine Learning Lab 聚类分析(Cluster Analysis)是一类经典的无监督学习算法.在给定样本的情况下,聚类分 ...

  9. 【机器学习基础】数学推导+纯Python实现机器学习算法22:最大熵模型

    Python机器学习算法实现 Author:louwill Machine Learning Lab 最大熵原理(Maximum Entropy Principle)是一种基于信息熵理论的一般原理,在 ...

最新文章

  1. 桐花万里python路-高级篇-并发编程-03-线程
  2. Java的自动装箱与自动拆箱
  3. 终于开通了,呵呵,以后跟大家一起讨论
  4. android 同步list数据,android SharedPreferences保存list数据
  5. 四种插入数据的MySQL语句比较
  6. Debian系统apt-get build-dep命令
  7. 如何将 Mac 显示器投放到 Apple TV 或非 Apple 智能电视?
  8. 汽车故障诊断技术【8】
  9. 第二十次CCF CSP认证考试经验
  10. 使用FFmpeg和Intel显卡视频转码——10张DVD光盘压缩成8小时4G的MP4
  11. 期货的结算价和收盘价(期货的结算价和收盘价一样吗)
  12. X书app数美-sid分析
  13. CVPR 2022 | End-to-End Referring Video Object Segmentation with MultimodalTransformers
  14. 使用Snakemake搭建分析流程
  15. 视频直播iOS端技术
  16. C# WebAPI 上传文件和图片
  17. 什么是IP Routing
  18. NLP( 包括语音识别)
  19. 更改airsim无人机模型
  20. Excel数据录入快捷操作:

热门文章

  1. vivo怎么切换为Android,vivox60怎么切换系统
  2. 云计算大数据学习中心作业2
  3. 动态规划-骨头收集者(一维数组,二维数组)
  4. 三菱 FX5U PLC结构化4轴伺服机器人程序
  5. ElasticSearch学习(四)—— 中文按拼音排序拼音检索
  6. 学习嵌入式Linux,做底层还是应用?底层要掌握哪些技能?
  7. 十万部冷知识:“澳大利亚”为什么属于亚洲球队?
  8. 【拔刀吧 TensorFlow】TensorFlow学习笔记八——何为卷积神经网络
  9. 计算机win7开超级性能模式,电脑如何打开高性能模式?[多图]
  10. 远程桌面分辨率取决于服务器还是客户端,关于Windows8.1高分辨率,远程桌面连接的界面显示很小的问题~...