DataWhale-西瓜书+南瓜书第3章线性模型学习总结-Task02-202110

3.1 基本形式

样本\mathbf{x}=(x_1,x_2,\dots,x_d),其中x_i\mathbf{x}在第i个属性上的取值。线性模型试图学得一个通过属性得线性组合来进行预测得函数,即 

                                              \begin{equation} \begin{aligned} f(\mathbf{x})&=w_1x_1+w_2x_2+\dots+w_dx_d+b\\ &=\mathbf{w}^T\mathbf{x}+b \end{equation} \end{aligned}   

3.2 线性回归 

3.2.1 一元线性回归

均方误差\mathit{E}_{(w,b)}=\sum_{i=1}^m(y_i-wx_i-b)^2最小化,对w和b求导:

                                 \frac{\partial\mathit{E}}{\partial w}=2[w\sum_{i=1}^mx_i^2-\sum_{i=1}^m(y_i-b)x_i]

                                 \frac{\partial\mathit{E}}{\partial b}=2[mb-\sum_{i=1}^m(y_i-wx_i)]

上面两个方程等于0可以得到

                                w=\frac{\sum_{i=1}^m y_i(x_i-\bar{x})}{\sum_{i=1}^mx_i^2-\frac{1}{m}(\sum_{i=1}^mx_i)^2}

                                b=\frac{1}{m}\sum_{i=1}^m(y_i-wx_i)

3.2.2 多元线性回归

m个d个元素得示例,把数据集D表示为一个m\times(d+1)的大小的矩阵\mathbf{X}:

                 DataWhale-西瓜书+南瓜书第3章线性模型学习总结-Task02-202110_第1张图片

 则均方误差为:

                             \mathit{E}_{\hat{\mathbf{w}}}=(\mathbf{y}-\mathbf{X}\hat{\mathbf{w}})^T(\mathbf{y}-\mathbf{X}\hat{\mathbf{w}})

\hat{\mathbf{w}}求导得到:

                               \frac{\partial\mathit{E_{\hat{\mathbf{w}}}}}{\partial\hat{\mathbf{w}}}=2\mathbf{X}^T(\mathbf{X}\hat{\mathbf{w}}-\hat{\mathbf{y}})

\mathbf{X}^T\mathbf{X}为满秩矩阵或正定矩阵时,上式为0可得:

                              \hat{\mathbf{w}}^*=(\mathbf{X^T}\mathbf{X})^{-1}\mathbf{X}^T\mathbf{y}

代码实现1:

import numpy as np
class LinearRegression:
    def __init__(self):
        self._theta = None
        self.intercept_ = None
        self.coef_ = None
    
    def fit(self,x_train,y_train):
        X_b = np.hstack([np.ones((len(x_train),1)), x_train])
        self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)
        self.intercept_ = self._theta[0]
        self.coef_ = self._theta[1:]
        
        return self
    
    def predict(self,x_predict):
        X_b = np.hstack([np.ones((len(x_predict),1)), x_predict])
        return X_b.dot(self._theta)

3.2.3 梯度下降法

因为

                                           \frac{\partial\mathit{E_{\hat{\mathbf{w}}}}}{\partial\hat{\mathbf{w}}}=2\mathbf{X}^T(\mathbf{X}\hat{\mathbf{w}}-\hat{\mathbf{y}})

所以

                                     \hat{\mathbf{w}}_{next}=\hat{\mathbf{w}}_{next}-\frac{\eta}{m}\mathbf{X}^T(\mathbf{X}\hat{\mathbf{w}}-\mathbf{y})

 代码实现如下:

import numpy as np 

alpha = 0.01

def cost_function(theta, X, y):
    diff = np.dot(X, theta) - y
    return (1./(2*m)) * np.dot(np.transpose(diff), diff)

def gradient_function(theta, X, y):
    diff = np.dot(X, theta) - y
    return (1./m) * np.dot(np.transpose(X), diff)

def gradient_descent(X, y, alpha):
    theta = np.ones((X.shape[1]+1,1))
    gradient = gradient_function(theta, X, y)
    while not np.all(np.absolute(gradient) <= 1e-5):
        theta = theta - alpha * gradient
        gradient = gradient_function(theta, X, y)
    return theta

3.3 对数几率回归

对于二分类任务,

DataWhale-西瓜书+南瓜书第3章线性模型学习总结-Task02-202110_第2张图片

 使用对数几率函数可以得到:

                                                            y=\frac{1}{1+e^{-(\mathbf{w}^T\mathbf{x}+b)}}

变换后得到:

                                                           \ln\frac{y}{1-y}=\mathbf{w}^T\mathbf{x}+b

将y视为样本x作为正例的可能性,1-y是反例的可能性,则有

                                            p_1=p(y=1|x)=\frac{e^{w^Tx+b}}{1+e^{w^Tx+b}}

                                            p_0=p(y=0|x)=\frac{1}{1+e^{w^Tx+b}}  

为简便计算令\mathbf{\beta}=(\mathbf{w},b),\hat{\mathbf{x}}=(\mathbf{x},1),  对数回归模型的最大化似然函数为:

                                         \mathit{l}(\mathbf{\beta})=\sum_{i=1}^m\ln p(y_i|\hat{\mathbf{x}}_i,\mathbf{\beta})

带入p的表达式:

                         p(y_i|\hat{\mathbf{x}}_i,\mathbf{\beta})=y_ip_1(\hat{\mathbf{x}}_i,\mathbf{\beta})+(1-y_i)p_0(\hat{\mathbf{x}}_i,\mathbf{\beta})

可以得到:

                             \mathit{l}(\mathbf{\beta})=\sum_{i=1}^m[-y_i\beta^T\hat{\mathbf{x}}_i+\ln(1+e^{\beta^T\hat{\mathbf{x}}_i})]

利用这个表达式,可以用梯度下降法求解参数。

你可能感兴趣的