《python机器学习基础教程》笔记(第2章监督学习)(第1部分)

这是《python机器学习基础教程》的第二章——监督学习,上一章笔记中说,我们需要让模型去学习某种数据和正确答案之间的关系(比如鸢尾花的分类,机器在训练时应该学习到花瓣和花萼的长度宽度是一个什么关系时就是A类鸢尾花,什么关系时又是B类鸢尾花),这一章我们将了解到那些天才想出来的让机器可以学习到这些关系的一系列算法,不同算法都有它们各自存在的优势。另外还介绍了泛化,过拟合和欠拟合分别是什么意思,以及分类问题中的不确定度,就是说机器会认为这个花是A类花的概率是80%,是B类的概率是20%,这个80%和20%就是不确定度,其实我们可以极其浅显的说下为什么机器可以给出一个概率,这还要从两个不同的函数说起,他们分别是这样的
在这里插入图片描述
黑色的函数,给出的结果不是0 就是1 也就是相当于结果要么是A类,要么不是A类,然而蓝色的函数,则可以在0-1之间给一个小数,于是可以反映出有百分之多少的可能性是A类。
好了下面开始整理部分

1、分类与回归,泛化过拟合和欠拟合

所谓分类,就是预测出标签,回归,就是预测出一个连续的数(浮点数),上一章已经好多废话了这里就不再废话了。泛化,或者叫做泛化能力,我们知道,我们的模型是通过训练数据得到数据和结果之间的某种关系的,如果我们拿训练数据去做测试,模型一定会给出正确的结果,但是我们实际应用的时候,一定是拿不再训练数据中的数据给模型,希望得到正确的结果,这就是模型的泛化能力,表示是否对其他的数据也有正确分类的能力。过拟合,就是我的模型太过分的去拟合训练数据和正确结果之间的关系了,比如训练数据中所有男性都穿牛仔衣,用小米手机,带蓝色和绿色的手表,右手食指戴三个戒指分别是绿色蓝色红色,机器得到结论,只要穿牛仔衣,用小米手机,带蓝色和绿色的手表,右手食指戴三个戒指分别是绿色蓝色红色,就一定是男的。这样的一条判断男女的规律可能非常适用于用于训练的那10000张图片,但是对于其他图片来说,这条规律显然是没有道理的。相对应的。欠拟合就是,机器认为穿了牛仔衣的就很有可能是男的,这条规律显然还可以继续深入,比如牛仔衣是黑色的更可能是男的,而粉红色的则更可能是女的,所谓欠拟合,就是还有继续深入分析的空间。

2、监督学习算法

(1)K近邻(分类,回归)

from sklearn.neighbors import KNeighborsClassifier #分类
from sklearn.neighbors import KNeighborsRegressor #回归

将所有训练数据分布到同一个空间上(比如两个特征时就可以理解为分布在一个平面上),然后把我们的测试数据也分布到这个空间上,看看哪个训练数据和测试数据的距离最近,我就认为测试数据的结果就是该训练数据的结果(我们也可以采用由K个邻居决定该测试数据的结果,比如我们使用K=3,我们找到该测试数据最近的3个邻居,发现他们2个属于A类,1个属于B类,那么我们就认为该测试数据属于A类)。
同样,K近邻可以用于回归问题,这个时候就不是采取投票决定属于哪个类了,而是将所有邻居的结果取平均值,作为该次测试的结果。
可以认为,K近邻分类器的结果好坏由两个参数决定,一个是邻居的个数,另一个是数据点之间的距离的计算方法,很可惜,对计算距离的讨论超过了该书的讨论范围,也就超过了我的知识范围…不过大多数条件下,采用欧氏距离,可以得到非常好的效果(欧式距离就是坐标中两点距离的计算公式计算出的距离)
缺点:
若是数据特征非常多,或者训练数据集非常大,该算法速度较慢,效果可能不好。特别的,对于大多数特征的取值都是0的数据(稀疏矩阵),该算法的效果尤其不好

(2)线性模型(分类,回归)

就是用一条线(或者一个平面,或者更高维的超平面)来预测结果,可以想象,它可以应用到回归问题中

线性回归模型
from sklearn.linear_model import LinearRegression #线性回归,也叫普通最小二乘法

二维数据集中,就是想办法找到 y=ax+b 中的a(权重)和b(偏移)的值,线性回归模型没有参数这是一个优点,但是我们也因此无法控制模型的复杂度(线性回归在大量特征(高维)的数据集中将发挥更好的性能)

from sklearn.linear_model import Ridge  #岭回归模型

这也是一种线性模型,区别在于它对权重有约束存在,从而避免过拟合,这种约束也叫正则化,岭回归用到的叫做L2正则化,同理还有L1正则化,他们的区别你可以认为就是对权重的约束力度的不同
岭回归有一个参数 alpha ,增大它,将使得模型权重趋于0,这会减小训练集性能,但是可能会提高模型的泛化性,该参数的最佳取值取决于所用的数据集

from sklearn.linear_model import Lasso  #岭回归模型

同样是用到正则化的线性回归模型,和Ridge不同的是,lasso利用的是L1正则化

线性分类模型(二分类)
from sklearn.linear_model import LogisticRegression #有名的Logistic回归 叫回归,但是是用于分类的
from sklearn.svm import LinearSVC   #支持向量分类器

两者都有一个参数 c 决定对应的正则化强度,c越大,对应的正则化越弱,也就是说,c值越大,模型越强调把训练数据拟合好,越容易出现过拟合

线性分类模型(多分类)

许多线性分类模型只适用于二分类问题,不能轻易推广到多分类问题上去(除了Logistic回归)。线性分类用于多分类可使用“一对其余”方法,也就是对每个类别都使用二分类,不详细说了

总结

线性模型的主要参数是正则化参数(alpha 和 c)。线性模型训练和预测速度都非常快,适用于非常大的数据集中,,如果特征数量大于样本数量(训练数据数量),线性模型的表现通常较好,但是在低维(特征数量较少)空间中,往往得不到较好的泛化能力

(3)朴素贝叶斯分类器

sklearn中实现了几种朴素贝叶斯分类器,它们在下列路径

from sklearn.naive_bayes import *

朴素贝叶斯分类器是一种和线性模型非常相似的模型,但是他的速度更快,代价是泛化能力要比线性模型稍弱。其中BernoulliNB模型和MultinomiaNB模型主要用于文本数据分类
朴素贝叶斯模型是很好的基准模型,常用于巨大的数据集,这些数据集即使使用线性模型也会花费大量时间

发布了46 篇原创文章 · 获赞 13 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_42718004/article/details/104899434