从2017年初到现在,涉足机器学习领域已经5个月有余,越来越觉得这是一个难度很大但又非常有意思的技术领域,我会坚持学下去。既然开始,就一定要有一个对得起自己与时间的结果。
一 有监督学习
1. 分类学习(classification)
分类问题包括二分类问题(Binary Classification,0/1)、多类分类(Multi-class Classification,在多于两个类别中选择一个)、多标签分类(Multi-label Classification,判断一个样本是否属于多个不同的类别)。
- 对于分类问题,模型性能分析标准有accuracy,precision,recall,f1-score,support,后面四个可以通过classification_report得到。另外,还有一个分析标准是ROC/AUC
- 针对分类问题,常见的分类算法包括:
1.1 线性分类器
线性分类器是一种假设特征与分类结果/标签存在线性关系的模型,这个模型通过累加计算每个维度的特征与各自权重的乘积来帮助类别决策。线性分类器是最常见的机器学习模型,尽管受限于数据特征与分类目标之间的线性假设,我们仍然在实践中将线性分类器的表现性能作为基准。
线性分类器包括LogisticRegression(逻辑回归)和SGDClassifier,前者是采用精确解析的方式(我理解就是批量梯度下降,将所有数据都导入迭代求解,数据量一大,计算量非常大),后者是随机梯度上升算法,精确度不足但是数据量大时更适合。
- batch gradient descent: use all of the training instances以更新模型参数
- stochastic gradient descent(SGD): use only a random single training instance
1.2 支持向量机(分类)
1.3 朴素贝叶斯
1.4 K近邻
K近邻算法与其他模型最大的不同在于:该模型没有参数训练过程。也就是说,我们并没有通过任何学习算法分析训练数据,而只是根据测试样本在训练数据的分布直接做出分类决策。因此,K近邻属于无参数模型中非常简单的一种。但这种决策算法,会有很高的计算复杂度和内存消耗,不适合数据规模很大的情况。
1.5 决策树
前面的线性分类器和向量机分类都要求被学习的数据特征和目标之间遵照线性假设。如果不遵循这个假设呢?可以考虑决策树(有参数模型)。
1.6 集成模型(分类)
集成分类模型使综合考量多个分类器的预测结果,从而做出决策。工业界为了追求更加强劲的预测性能,经常使用随机森林分类模型作为基线系统
综合考量有两种方式:
一种是利用相同的训练数据同时搭建多个独立的分类模型,然后通过投票的方式,以少数服从多数的原则作出最终的分类决策。如随机森林分类器:在相同训练数据上同时搭建多颗决策树。
另一种是按照一定次序搭建多个分类模型。每一个后续模型的加入能够提升集成模型总体性能,多个分类能力较弱的分类器整合到一起搭建一个更强分类能力的模型。如梯度提升决策树。
2. 回归预测(regression)
性能测评方法:不要求预测结果与真实值完全相同,希望衡量预测值与真实值之间的差距,可以通过多种测评函数进行评价,如平均绝对误差(Mean Absolute Error,MAE),均方误差(Mean Squared Error,MSE),R-squared(拟合度)。其中R-squared=1表明y可以被很好的预测,无错误。
2.1 线性回归器
线性回归模型包括LinearRegression(批量梯度下降)和SGDRegressor(随机梯度下降)。
类比分类问题,两种线性回归模型适用于不同的场景,LinearRegression适合数据规模10万以下,回归表现好。SGDRegressor适合数据规模大的情况,节省时间。
线性回归器简单、易用,但是有特征与回归目标之间的线性假设,不一定适用各种场景,但一般适用线性回归模型作为科学实验的基线系统。
2.2 支持向量机(回归)
2.3 K近邻
借助周围K个最近训练样本的目标数值,对待测样本的回归值进行决策,可以考虑一种是对K个近邻目标数值适用普通的算术平均算法;一种是考虑距离的差异进行加权平均。
2.4 回归树
2.5 集成模型(回归)
三种方法:普通随机森林的回归器版本、提升树模型的回归器版本、极端随机森林。
二 无监督学习
1. 数据聚类
最为经典的是K均值算法,该算法要求提前预设聚类的个数,也就是分成几个簇。通过更新簇类的中心,迭代多次,让所有数据点到其所属聚类中心距离的平方和趋于稳定。
1.1 K均值算法
性能测评方法如下:
(1)scikit中metrics的ARI指标
(2)轮廓系数(Silhouette Coefficient),越趋于1越好,表明簇内的节点离中心近,离其他簇远。
算法特点分析:
(1)容易收敛到局部最优解
(2)需要预先设定簇的数量
- 第一个问题,K均值算法可能会因为初始中心的选择导致收敛到局部最优解。在簇数量<10时,可以通过多次执行算法挑选性能表现更好的初始中心点解决这个问题。簇数量>10时,基本第一次就可以得到一个比较好的最优解。
- 第二个问题可以用“肘部”观察法先预估相对合理的类簇个数。肘部曲线Y轴是样本距离所属类簇的平均距离,X轴是簇的数量。肘部曲线下降的越快,说明改变簇数量对整体结构影响很大,算法有更大的收敛空间。当下降趋势放缓时,说明再增加K值不再有利于收敛,这个拐点对应的值就是最佳簇数量。