线性回归之最小二乘法推导及python实现

线性回归之最小二乘法推导及python实现

    • 前言
    • 线性模型基本形式
    • 模型评估
    • 寻找最优解
    • python实现最小二乘法

前言

本文章为个人的学习笔记。学习书籍《机器学习》(周志华著,俗称西瓜书)。

线性模型基本形式

首先是最基本的线性模型:
f ( x ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + . . . + w n x n + b f( \textbf{x} )=w_1x_1+w_2x_2+w_3x_3+...+w_nx_n+b f(x)=w1x1+w2x2+w3x3+...+wnxn+b

化简成向量形式
f ( x ) = xw + b f( \textbf{x})= \textbf{x}\textbf{w} +b f(x)=xw+b f ( x ) ≈ y f( \textbf{x})\approx y f(x)y

其中 x = ( x 1 , x 2 , x 3 , . . . , x n ) \textbf{x}=(x_1,x_2,x_3,...,x_n) x=(x1,x2,x3,...,xn) x i x_i xi 代表 x \textbf{x} x的第i个属性。而 w = ( w 1 ; w 2 ; w 3 ; . . . ; w n ) \textbf{w}=(w_1;w_2;w_3;...;w_n) w=(w1;w2;w3;...;wn)对应于 x \textbf{x} x 不同属性的系数。其中 y y y代表了数据 x \textbf{x} x的真实情况,而 f ( x ) f(\bf{x}) f(x)得到的是对 x \textbf{x} x的预测值,我们通过 ( y , x ) (y,\textbf{x}) (yx)对模型进行训练,力求通过线性模型 f ( x ) f(\bf{x}) f(x)来对 y y y未知的数据进行预测。

为了计算方便,令:
x = ( x 1 , x 2 , x 3 , . . . , x n , 1 ) \textbf{x}=(x_1,x_2,x_3,...,x_n,1) x=(x1,x2,x3,...,xn,1) w = ( w 1 ; w 2 ; w 3 ; . . . ; w n ; b ) \textbf{w}=(w_1;w_2;w_3;...;w_n;b) w=(w1;w2;w3;...;wn;b)

线性模型就写成如下形式:
f ( x ) = wx f( \textbf{x})= \textbf{w} \textbf{x} f(x)=wx

模型评估

线性回归的目标就是要找到一个最合适的模型来使得预测的准确度最大化。此时就需要找到最合适的 w \textbf{w} w来使模型的到的预测值尽可能的接近真实值 y y y

如何判断一个模型是否是一个好的模型,我们需要用到模型的评估方程:
J ( w ) = ∑ i = 1 n ( f ( x i ) − y i ) 2 J(\textbf{w})=\sum_{i=1}^n{(f(\bf{x_i})-y_i)^2} J(w)=i=1n(f(xi)yi)2
每一个 y i y_i yi对应与一个 x i = ( x i 1 , x i 2 , x i 3 , . . . , x i n ) \bf{x_i}=(x_{i1},x_{i2},x_{i3},...,x_{in}) xi=(xi1,xi2,xi3,...,xin)
可令:
Y = ( y 1 ; y 2 ; y 3 ; . . . ; y n ) Y=(y_1;y_2;y_3;...;y_n) Y=(y1;y2;y3;...;yn) X = ( x 1 ; x 2 ; x 3 ; . . . ; x n ) X=(\bf{x_1};\bf{x_2};\bf{x_3};...;\bf{x_n}) X=(x1;x2;x3;...;xn)
评估方程为:
J ( w ) = ( Y − X w ) T ( Y − X w ) J(\textbf{w})=(Y-X\textbf{w})^T(Y-X\textbf{w}) J(w)=(YXw)T(YXw)

寻找最优解

J ( w ) J(\textbf{w}) J(w)取值最小时可得到最优模型,因此我们对 J ( w ) J(\textbf{w}) J(w)求导:
J ( w ) ′ = 2 ( Y − X w ) T X J(w)^{'}=2(Y-X\textbf{w})^TX J(w)=2(YXw)TX
J ( w ) ′ = 0 J(w)^{'}=0 J(w)=0,可求得:
w = ( X X T ) − 1 X T Y \textbf{w}=(XX^T)^{-1}X^TY w=(XXT)1XTY
上面的方程也就是著名的最小二乘法。当矩阵较大时,用最小二乘法计算量会非常大,此时用梯度下降法或者牛顿法来进行替代。

python实现最小二乘法

def Fun(x,y):
    return dot(dot(inv(dot(x,x.T)),x.T),y)

你可能感兴趣的:(机器学习)