第二个模型:线性模型

=======================================================================                Machine Learning notebook
2019-01-16,阅读第一本书时记录的笔记
Python机器学习基础教程(introduction to Machine Learning with Python)
https://github.com/amueller/introduction_to_ml_with_python/blob/master/02-supervised-learning.ipynb

时间:2019-05-06,阅读第二本书后追加修改。
机器学习实战基于scikit-learn和tensorflow(Hands-On Machine Learning with Scikit-Learn and TensorFlow)

=======================================================================

  线性模型利用输入特征的线性函数进行预测。

一、用于回归的线性模型

公式1:线性回归模型预测

对于回归问题,线性模型预测的一般公式为:
y=w[0]*x[0]+w[1]*x[1]+······+w[p]*x[p]+b
x[0]到x[p]表示单个数据点的特征,w和b是学习模型的参数,y是模型的预测结果。对于单一特征的数据集,公式如下:
  y=w[0]*x[0]+b
w[0]是斜率,b是y轴偏移。
对于有更多特征的数据集,w包含沿每个特征坐标轴的斜率。(或者,将预测响应值看做输入特征的加权求和,权重由w的元素给出(可以取负值)。)

公式2:线性回归模型预测(向量化)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在数学中,数量积(dot product; scalar product,也称为点积)是接受在实数R上的两个向量并返回一个实数值标量的二元运算。它是欧几里得空间的标准内积。
https://baike.baidu.com/item/点积/9648528?fr=aladdin

1.1 线性回归(普通最小二乘法,ordinary least squares ,OLS)

是回归问题中最简单也最经典的线性方法。线性回归寻找参数w和b,使得对训练集的预测值与真实的回归目标值y之间的均方误差(mean squared error)最小。均方误差是预测值与真实值之差的平方和除以样本数。
线性回归没有参数,这是一个优点,但也因此无法控制模型的复杂度。

1.2 岭回归(Ridge Regression)

用于回归的线性模型,预测公式与线性回归相同。但在岭回归中,对系数(w)的选择不仅要在训练集上得到好的预测结果,而且还要拟合附加约束。我们还希望系数尽量小(w的所有元素都应接近于0)。直观上看,这意味着每个特征对输出的影响应尽可能小(即斜率很小),同时仍给出很好的预测结果。这种约束是所谓的正则化的一个例子。正则化是指对模型做显示约束,以避免过拟合。岭回归使用的是L2正则化(Ridge惩罚了系数的L2范数或欧式长度)。
Ridge模型在模型的简单性(系数都接近与0)与训练集性能之间做出了权衡。简单性和训练集性能二者对于模型的重要程度可以由用户通过设置alpha参数来指定。alpha值越大,对模型的约束力度就越大,相应的可能会降低训练集性能,提高泛化性能。具体建议根据不同alpha值绘制视图,从而找出最佳alpha值。

1.3 套索回归(Lasso Regression)

用于回归的线性模型,正则化的线性回归。与岭回归相同,使用Lasso也是约束系数使其接近于0,但用到的方法不同,叫做L1正则化(即,Lasso惩罚系数向量的L1范数或系数的绝对值之和。)L1正则化的结果是,使用Lasso时某些系数刚好为0。这说明某些特征被模型完全忽略。这可以看作是一种自动化的特征选择。某些系数刚好为0,这样模型更容易理解,也可以呈现模型最重要的特征。
与Ridge类似,Lasso也有一个参数alpha,这个参数控制系数(w)趋近于0的强度。在每次调整alpha的值时还需调整max_iter的值,(max_iter的作用是控制运行迭代的最大次数)这方面会有编译器给出提示。

较小的alpha值可以拟合一个更复杂的模型。

过小的alpha值,会消除正则化的效果,并出现过拟合,得到与LinearRegression类似的结果。

1.4 弹性网络(Elastic Net)

结合了Lasso和Ridge的惩罚项,在实践中效果最好,不过麻烦的是要调整两个参数:一个用于L1正则化,一个用于L2正则化。

二、用于分类的线性模型

2.1 二分类

预测公式:
  y=w[0]*x[0]+w[1]*x[1]+······+w[p]*x[p]+b>0
这个公式与线性回归的公式相似,但没有返回特征的加权求和,而是为预测设置了阈值(0)。如果函数值小于0,预测类别-1;如果函数值大于0,预测类别+1。对于所有用于分类的线性模型,这个预测规则都是通用的。

对于回归的线性模型,输出y是特征的线性函数,是直线、平面或超平面(对于更高维的数据集)。对于用于分类的线性模型,决策边界是输入的线性函数。换句话说(二元)线性分类器是利用直线、平面或超平面来分开两个类别的分类器。

用于线性模型的算法有很多种,这些算法的区别有两点:
  1:系数和截距的特定组合对训练数据拟合好坏的度量。
  2:是否使用正则化,以及使用哪种正则化方法。

最常见的两种线性分类算法是Logistic回归(logistic regression)和线性支持向量机(linear support vector machine,线性SVM),前者在linear_model.LogisticRegression中实现,后者在svm.LinearSVC(SVC代表支持向量分类器)中实现。
虽然LogisticRegression的名字中含有回归(regression),但它是一种分类算法,并不是回归算法,不应与LinearRegression混淆。

对于LogisticRegression和LinearSVC,决定正则化强度的权衡参数叫做C(默认值为1)。C值越大,对应的正则化越弱。换句话说,如果参数C值较大,那么LogisticRegression和LinearSVC将尽可能将训练集拟合到最好,而如果C值较小,那么模型更强调使系数向量(w)接近于0。
参数C的作用还有另一个有趣之处。较小的C值可以让算法尽量适应“大多数”数据点,而较大的C值更强调每个数据点都分类正确的重要性。
penalty参数的作用是选择正则化类型,默认情况下使用L2正则化。

较大的C值使得模型更关注分类错误的样本,尽量使所有的点都分类正确,但可能无法掌握类别的整体分布。换句话说这个模型很可能过拟合。

与回归的情况类似,用于分类的线性模型在低维空间中看起来可能非常受限,决策边界只能使直线或平面。通样,在高维空间中,用于分类的线性模型变得非常强大,当考虑更多特征时,避免过拟合变得越来越重要。

2.2 用于多分类的线性模型

许多分类模型只适用于二分类问题,不能轻易推广到多类别问题(除了Logistic回归)。
将二分类算法推广到多分类算法的一种常见方法是“一对其余”(one-vs.-rest)方法。
  在“一对其余”方法中,对每个类别都学习一个二分类模型,将这个类别与所有其他类别尽量分开,这样就生成了与类别个数一样多的二分类模型。在测试点上运行所有二分类器来进行预测。在对应类别上得分最高的分类器“胜出”,将这个类别标签返回作为预测结果。
每个类别对应一个二分类器,这样每个类别也都有一个系数(w)向量和一个截距(b)。
  分类置信方程,其结果中最大值对应的类别即为预测的类别标签:
    w[0]*x[0]+w[1]*x[1]+······+w[p]*x[p]+b

多分类Logistic回归背后的数学与“一对其余”方法稍有不同,但它也是对每个类别都有一个系数向量和一个截距,也使用了相同的预测次数

2.3 优点、缺点和参数

线性模型的主要参数是正则化参数,在回归模型中叫做alpha,在LinearSvC和Logistic-Regression中叫做C。alpha值较大或C值较小,说明模型比较简单。特别是对于回归模型而言,调节这些参数非常重要。通常参数在对数尺度上对C和alpha进行搜索。你还需要确定的是用L1正则化还是L2正则化。如果你假定只有几个特征是真正重要的,那么你应该用L1正则化,否则应默认使用L2正则化。如果模型的可解释性很重要的话,使用L1也会有帮助。由于L1只用到几个特征,所以更容易解释哪些特征对模型是重要的,以及这些特征的作用。

线性模型的训练速度非常快,预测速度也很快。这种模型可以推广到非常大的数据集,对稀疏矩阵也很有效。如果你的数据包含数十万甚至上百万个样本,你可能需要研究如何使用LogisticRegression和Ridge模型的solver='sag’选项,在处理大型数据时,这一选项比默认值要更快。其它选项还有SGDClassfier类和SGDRegressor类,他们对前面提到的线性模型实现了可扩展性更强的版本。

线性模型的另一个优点在于,利用我们之间见过的用于回归和分类的公式,理解如何进行预测是相对比较容易的。不行的是,往往并不完全清楚系数为什么是这样的。如果你的数据集中包含高度相关的特征,这一问题尤其突出。这种情况下,可能很难对系数做出解释。

如果特征数量大于样本数量,线性模型的表现通常都很好。它也常用于非常大的数据集,只是因为训练其它模型并不可行。但在更低维的空间中,其它模型的泛华性能可能更好。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值