NJU机器学习导论课程笔记之线性模型

目录

1 线性回归

2 对数几率回归

3 线性判别分析

4 多分类学习


1 线性回归

    线性回归(linear regression)试图学得一个线性模型以尽可能准确地预测实值输出标记。

    1. 线性模型

        给定由d个属性描述的示例\textit{\textbf{x}} =(x_{1};x_{2}:...;x_{d}), 其中x_{i}\textit{\textbf{x}}在第i个属性上的取值,线性模型(linear model)试图学得一个通过属性的线性组合来进行预测的函数,即

                                                                    f(\textit{\textbf{x}})=w_{1}x_{1}+w_{2}x_{2}+...+w_{d}x_{d}+b

向量形式为

                                                                                      f(\textit{\textbf{x}})=\textit{\textbf{w}}^{\mathrm{T}}\textit{\textbf{x}}+b

其中\textit{\textbf{w}} =(w_{1};w_{2}:...;w_{d})\textit{\textbf{w}}和b学得之后,模型就得以确定。

    2. 线性回归的正规方程解

        对于由d个属性描述的数据集D,试图学得

                                                                            f(\textit{\textbf{x}}_{i})=\textit{\textbf{w}}^{\mathrm{T}}\textit{\textbf{x}}_{i}+b,\;f(\textit{\textbf{x}}_{i})\approx y_{i}

                                                                                     \textbf{X}=\begin{pmatrix} \textit{\textbf{x}}^{\mathrm{T}}_{1} &1 \\ \textit{\textbf{x}}^{\mathrm{T}}_{2} &1 \\ \vdots & \vdots \\ \textit{\textbf{x}}^{\mathrm{T}}_{m} &1 \end{pmatrix}

D中标记为\textit{\textbf{y}}=(y_{1};y_{2};...;y_{m}),则最终学得的多元线性回归模型为

                                                                             f(\hat{ \textit{\textbf{x}}}_{i})=\hat{ \textit{\textbf{x}}}_{i}^{\mathrm{T}}(\textbf{X}^{\mathrm{T}}\textbf{X})^{-1}\textbf{X}^{\mathrm{T}}\textit{\textbf{y}}

    3. 对数线性回归(log-linear regression):当输出标记在指数尺度上变化,时,该模型起到了将线性回归模型的预测值与真实标记联系起来的作用。

                                                                                    \ln y=\textit{\textbf{w}}^{\mathrm{T}}\textit{\textbf{x}}+b

    4. 广义线性模型(generalized linear model):对数线性回归的推广。

        考虑单调可微函数g(\cdot ),令

                                                                                  y=g^{-1}(\textit{\textbf{w}}^{\mathrm{T}}\textit{\textbf{x}}+b)

即得广义线性模型,g(\cdot )被称为联系函数(link function)

    5. sklearn中的LinearRegression类

        LinearRegression的构造函数中有两个常用的参数可以设置:

        ● fit_intercept:是否有截据,如果没有则直线过原点,默认为Ture。
        ● normalize:是否将数据归一化,默认为False。

        LinearRegression类中的fit函数用于训练模型,fit函数有两个向量输入:

        ● X:大小为[样本数量,特征数量]的ndarray,存放训练样本
        ● Y:值为整型,大小为[样本数量]的ndarray,存放训练样本的标签值

        LinearRegression类中的predict函数用于预测,返回预测值,predict函数有一个向量输入:

        ● X:大小为[样本数量,特征数量]的ndarray,存放预测样本

        LinearRegression的使用代码如下:

from sklearn.linear_model import LinearRegression   
lr = LinearRegression()
lr.fit(X_train, Y_train)
predict = lr.predict(X_test)

2 对数几率回归

    对数几率回归(logistic regression)亦称为逻辑回归,通过回归的思想,实现二分类问题,是一种分类学习方法。

    1. Sigmoid函数:

                                                                                    y=\frac{1}{1+e^{-z}}

        函数图像如下图所示:

    2. 对数几率回归:将Sigmoid函数作为广义线性模型g^{-1}(\cdot ),得到

                                                                              y=\frac{1}{1+e^{-\textit{\textbf{w}}^{\mathrm{T}}\textit{\textbf{x}}+b}}

    3. 损失函数: 通过极大似然法(maximum likelihood method)来估计\textit{\textbf{w}}b。经数学推导(略去)可得到损失函数,寻求一组合适的\textit{\textbf{w}}b以最小化损失函数的值。损失函数如下:

                                                      l(\boldsymbol{w},b)=-\frac{1}{m}\sum_{i=0}^{m}(y^{(i)}\ln \hat p^{(i)}+(1-y^{(i)}) \ln (1-\hat p^{(i)}))

其中m表示数据集中样本的数量,i表示数据集中第i个样本,y^{(i)}为第i个样本的标签值,\hat p^{(i)}为第i个样本的预测值。

        损失函数是高阶可导连续凸函数,根据凸优化理论,可采用梯度下降法(gradient decent method)、牛顿法(Newton method)等求得其最优解。

    4. sklearn中的LogisticRegression类

        LogisticRegression中默认实现了OVR,因此LogisticRegression可以实现多分类。

        LogisticRegression的构造函数中有三个常用的参数可以设置:

        ● solver:{'newton-cg' , 'lbfgs', 'liblinear', 'sag', 'saga'}, 分别为几种优化算法。默认为liblinear。
        ● C:正则化系数的倒数,默认为1.0,越小代表正则化越强。
        ● max_iter:最大训练轮数,默认为100。

        和 sklearn 中其他分类器一样,LogisticRegression类中的fit函数用于训练模型,fit函数有两个向量输入:

        ● X:大小为 [样本数量,特征数量] 的ndarray,存放训练样本
        ● Y:值为整型,大小为 [样本数量] 的ndarray,存放训练样本的分类标签

        LogisticRegression类中的predict函数用于预测,返回预测标签,predict函数有一个向量输入:

        ● X:大小为[样本数量,特征数量]的ndarray,存放预测样本

        LogisticRegression的使用代码如下:

from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression(solver='lbfgs', max_iter =10, C=10)
logreg.fit(X_train, Y_train)
result = logreg.predict(X_test)

3 线性判别分析

    线性判别分析(Linear Discriminant Analysis, 简称LDA)是一种经典的先行学习方法,亦称Fisher判别分析,用于分类问题。LDA也常被是为一种经典的监督降维技术。

    1. 算法思想:给定训练样例集,设法将样例投影到一条直线\boldsymbol{w}上。使得同类样例的投影点尽可能接近、异类样例的投影点尽可能远离;在对新样本分类时。将其投影刀同样的这条直线上,再根据投影点的位置来确定新样本的类别。

    2. 算法流程

        (1) 划分出第一类样本与第二类样本X_{0}X_{1}

        (2) 计算第一类样本和第二类样本的中心点(均值向量)\boldsymbol{\mu}_{0}\boldsymbol{\mu}_{1}及协方差矩阵\boldsymbol{\Sigma }_{0}\boldsymbol{\Sigma }_{1}

                                                                \boldsymbol{\Sigma }_{0}=\sum_{\boldsymbol{x}\in X_{0}}^{\,}(\boldsymbol{x}-\boldsymbol{\mu}_{0})(\boldsymbol{x}-\boldsymbol{\mu}_{0})^{\mathrm{T}}

                                                                \boldsymbol{\Sigma }_{1}=\sum_{\boldsymbol{x}\in X_{1}}^{\,}(\boldsymbol{x}-\boldsymbol{\mu}_{1})(\boldsymbol{x}-\boldsymbol{\mu}_{1})^{\mathrm{T}}

        (3) 计算类内散度矩阵\textbf{S}_{w}

                                                                           \textbf{S}_{w}=\boldsymbol{\Sigma }_{0}+\boldsymbol{\Sigma }_{1}

        (4) 计算出\boldsymbol{w}的值

                                                                       \boldsymbol{w}=\textbf{S}_{w}^{-1}(\boldsymbol{\mu}_{0}-\boldsymbol{\mu}_{1})

    3. sklearn中的LinearDiscriminantAnalysis类     

        在降维时,LinearDiscriminantAnalysis的构造函数中有一个常用的参数可以设置:

        ● n_components:即我们进行LDA降维时降到的维数。在降维时需要输入这个参数。需要注意的是,n_components值的范围是1到类别数-1之间的值。

        LinearDiscriminantAnalysis类中的fit函数用于训练模型,fit函数有两个向量输入:

        ● X:大小为[样本数量,特征数量]的ndarray,存放训练样本
        ● Y:值为整型,大小为[样本数量]的ndarray,存放训练样本的标签值

        LinearDiscriminantAnalysis类中的transform函数用于降维,返回降维后的数据,transform函数有一个向量输入:

        ● X:大小为[样本数量,特征数量]的ndarray,存放需降维的样本

        LinearDiscriminantAnalysis的使用代码如下:

from sklearn.discriminant_analysis import LinearDiscriminantAnalysis
lda = LinearDiscriminantAnalysis(n_components=1)
lda.fit(X,y)
X_new = lda.transform(X)

4 多分类学习

    现实中常遇到多分类学习任务。给定数据集D= \left \{ (\boldsymbol{x}_{1},y_{1}), (\boldsymbol{x}_{2},y_{2}),..., (\boldsymbol{x}_{m},y_{m})\right \}, \; y_{i}\in \left \{ C_{1}, C_{2},...,C_{N} \right \},基于一些基本策略,利用二分类学习器来解决多分类问题。

    1. 一对一(One vs. One, 简称OVO)

        OvO将这N个类别两两配对,从而产生N(N-1)/2个二分类任务。在测试阶段,新样本将同时提交给所有分类器,于是我们将得到N(N-1)/2个分类结果,最终结果课通过投票产生:即把被预测得最多的类别作为最终分类结果。

    2. 一对其余(One vs. Rest, 简称OVR)       

        OvR则是每次将一个类的样例作为正例、所有其它类的样例作为反例来训练N个分类器。在测试时若仅有一个分类器预测为正类,则对应的类别标记作为最终分类结果;若有多个分类器预测为正类,则通常考虑个分类器的预测置信度,选择置信度最大的类别标记作为分类结果。

 


未完待续......

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值