sklearn001-基本概念
机器学习:有多种定义:比如:机器学习是让计算机具有学习的能力,无需进行明确编程。再比如:计算机程序利用经验E学习任务T,性能是P,如果针对任务T的性能P随着经验E不断增长,则成为机器学习。
数据挖掘:使用机器学习方法挖掘大量数据,可以发现并不显著的规律。
机器学习善于处理这些问题:
- 需要进行大量手工调整或需要拥有长串规则才能解决的问题,机器学习可以简化代码,提高性能。
- 问题复杂,传统方法难以解决,此时可以用机器学习的方法找到解决方案。
- 环境有波动,机器学习算法可以适应新数据。
- 复杂问题和大量数据。
1. 机器学习系统的分类
是否在人类监督下训练:监督学习,无监督学习,半监督学习,强化学习。
是否可以动态渐进学习:在线学习,批量学习。
是否简单的比较新的数据点和已知数据点,或者在训练数据中进行模式识别,以建立一个预测模型:基于实例学习,基于模型学习。
1.1 监督/无监督学习
监督学习用来训练的数据中包含有答案,即标签。

最典型的监督学习任务有:分类任务和回归任务。
无监督学习是,训练数据中没有加标签,系统在没有老师的条件下进行学习。

常用的无监督学习任务有:聚类(Kmeans,层次聚类分析),可视化和降维(PCA,核主成分分析,局部线性嵌入LLE,t-SNE),关联规则学习(Apriori算法,Eclat算法),异常检测。
半监督学习:一些算法可以处理部分带标签的训练数据,通常是大量不带标签数据加上小部分带标签数据。

多数半监督学习算法是无监督和监督学习的结合。比如,可以先用无监督学习算法进行训练,再用监督学习方法对整个系统微调。
强化学习:通过智能体Agent,对环境进行观察,选择和执行动作,获得奖励或惩罚,然后自己学习哪个是最佳策略,以得到长久的最大奖励。
2. 在线/批量学习
根据是否从导入的数据流进行持续学习,可以分为在线/批量学习。
批量学习:系统不能进行持续学习,必须用所有可用数据进行训练,通常会占用大量时间和计算资源,所以一般是线下做的,首先进行训练,然后部署到生产环境中,或称为离线学习。
当然,虽然是离线的批量学习,但训练-评估-部署整个过程都可以是自动进行,所以即便是批量学习也可以适应改变。
在线学习:用数据实例持续的进行训练,可以一次一个或一次几个实例,每个学习步骤都很快且廉价,所以系统可以动态的学习达到的新数据。

在线学习很适合系统接受连续流式的数据,且需要自动对改变做出调整。
3. 基于实例/模型学习
基于实例学习:比如计算新样本和已有的标记样本之间的相似度,如果和A类别的样本非常相似,就可以人为新样本是A类别。这就是基于实例学习:系统先用记忆学习案例,然后使用相似度测量推广到新的例子。
基于模型学习:(貌似现在绝大部分都是基于模型学习。)从样本集进行归纳,建立这些样本的模型,然后用这个模型进行预测。
比如案例:通过人均GDP来计算生活满意度,比如想知道塞浦路斯人(新样本)的满意度,如果是基于实例学习的方式,那么在原来的数据集中寻找和塞浦路斯GDP相近的一个样本,比如和斯洛文尼亚人的GDP很相近,而斯洛文尼亚的生活满意度是5.7,就可以预测塞浦路斯人的生活满意度也是5.7.或者找两个非常临近的国家,计算他们的满意度平均值,作为新样本塞浦路斯人满意度的结果。这就是基于实例的学习方式。
基于模型的学习方式:首先对数据集建立线性回归模型或K近邻模型,训练之后,用这个模型来预测新样本,得到满意度值。
4. 机器学习的挑战
机器学习的主要任务是:选择一个学习算法并用一些数据进行训练,所以导致错误的两件事就是:错误的算法和错误的数据。
4.1 错误的数据
- 训练数据量不足:一旦有大量数据进行训练,简单的算法也可能得到复杂算法一样的效果。
- 训练数据不具有代表性:训练样本要具有代表性,要能够推广到新样本上,如果训练样本具有A类型的分布,但新样本却是B类型的分布,最终效果会大打折扣。所以训练样本要具有代表性,且数据量足够大,这样就有可能涵盖新样本的新的样本分布。少年样本可能会有样本偏差,在新样本上得不到好的结果。
- 低质量数据:训练集中如果有太多错误,异常值,噪声等,最终模型的性能会下降。所以有必要对训练集进行清理。这步骤会消耗大部分时间。
- 不相关的特征:系统只有在训练数据中包含足够相关特征,且非相关特征不多的情况下,才能进行学习。
特征工程:机器学习项目成功的关键之一是用好的特征进行训练。包括有:特征选择:在所有存在的特征中选择最有用的特征进行训练。特征提取:组合存在的特征,生成一个更有用的特征,比如降维等。创建新特征等。
4.2 错误的算法
-
过拟合训练数据:发生在相对与训练数据的量和噪声,模型过于复杂的情况,解决方案有:A简化模型,可以通过选择一个参数更少的模型,减少训练数据的特征数,或限制一下模型(正则化),B收集更多的训练数据,C减小训练数据的噪声等。
-
欠拟合训练数据:当模型过于简单时,发生欠拟合,此时预测结果很难准确,即使在训练样本上也很难准确。解决方法:A选择一个更强大的模型带有更多参数,B用更好的特征训练学习算法(特征工程)C减小对模型的限制(如减小正则化超参数等)
5. 模型的评估和测试
怎么样评估一个模型的好坏?需要将数据划分为两个集合:训练集和测试集,用训练集来训练,用测试机来对模型进行评估。如果训练集错误率低,但测试集错误率高,一位这模型对训练数据集过拟合。
有一个问题,如果在超参数搜索中,调整不同的模型,不同算法的超参数,得到了多中不同模型,而最终选用在测试集上表现最好的模型时,其实这个过程也有对测试集过拟合的风险。因为这样的参数组合和模型仅仅在测试集上表现很好,但对新数据一样不好。
解决方法是:再保留一个集合,称为验证集,用训练集和多个超参数训练多个模型,选择再验证集上有最佳性能的模型和超参数,当你对模型满意时,用测试集再做最后一次测试,以得到推广误差率的预估。
交叉验证:为了避免浪费过多训练数据在验证集上,通常用交叉验证方法,训练集分成互补的子集,每个模型用不同的子集训练,再用剩下的子集验证,一旦确定模型参数和超参数,最终模型使用这些超参数和全部的训练集进行训练,用测试集得到推广错误率。
参考资料:
《Sklean 与TensorFlow机器学习实用指南》