赞
踩
机器学习是让计算机具有学习的能力,无需进行明确编程。 —— 亚瑟·萨缪尔,1959
监督/非监督学习
第一种分类机器学习的方法是可以根据训练时监督的量和类型进行分类。主要有四类:监督学习、非监督学习、半监督学习和强化学习。
常用的监督学习算法有:
K近邻算法
线性回归
支持向量机(SVM)
决策树和随机森林
非监督学习
和监督学习相反,非监督学习就是采用没有标签的数据集。
非监督主要有四个典型的任务,分别是聚类、降维、异常检测和关联规则学习。
1. 聚类
聚类就是将数据根据一定的规则分成多个类,通常是采用相似性。
2. 降维
降维的目的是简化数据、但是不能失去大部分信息。做法之一是合并若干相关的特征。
例如,汽车的里程数与车龄高度相关,降维算法就会将它们合并成一个,表示汽车的磨损。这叫做特征提取。
3. 异常检测
另一个重要的非监督任务是异常检测(anomaly detection)。例如,检测异常的信用卡转账以防欺诈,检测制造缺陷,或者在训练之前自动从训练数据集去除异常值。
4. 关联规则学习
最后,另一个常见的非监督任务是关联规则学习,它的目标是挖掘大量数据以发现属性间有趣的关系。
聚类
K 均值
层次聚类分析(Hierarchical Cluster Analysis, HCA)
期望最大值
可视化和降维
主成分分析(Principal Component Analysis, PCA)
核主成分分析
局部线性嵌入(Locally-Linear Embedding, LLE)
t-分布邻域嵌入算法(t-distributed Stochastic Neighbor Embedding, t-SNE)
关联性规则学习
Apriori 算法
Eclat算法
半监督学习
一些算法可以处理部分带标签的训练数据,通常是大量不带标签数据加上小部分带标签数据。
强化学习
强化学习和上述三种学习问题是非常不同的。学习系统在这里被称为智能体( agent),可以对环境进行观察,选择和执行动作,获得奖励(负奖励是惩罚,见下图)。然后它必须自己学习哪个是最佳方法(称为策略,policy),以得到长久的最大奖励。策略决定了智能体在给定情况下应该采取的行动 。
基于实例 vs 基于模型学习
基于实例学习是系统先用记忆学习案例,然后使用相似度测量推广到新的例子
基于模型学习:建立这些样本的模型,然后使用这个模型进行预测。
研究数据。先对数据进行分析,这可能包含清洗数据、特征筛选、特征组合等等
选择模型。选择合适的模型,从简单的线性回归、逻辑回归,到慢慢复杂的随机森林、集成学习,甚至深度学习的卷积神经网络模型等等
用训练数据进行训练。也就是寻找最适合算法模型的参数,使得代价函数取得最小值。
使用模型对新案例进行预测(这称作推断)。预测结果非常好,就能上线系统;如果不好,就需要进行错误分析,问题出现在哪里,是数据问题还是模型问题,找到问题,然后继续重复这个流程。
机器学习的主要挑战
训练数据量不足:第一个问题就是训练数据的数量问题,这是非常重要的问题,小型和中型的数据集仍然是非常常见的,获得额外的训练数据并不总是轻易和廉价的,所以不要抛弃算法。
没有代表性的训练数据:让训练数据对新数据具有代表性是非常重要的。
低质量的数据:数据有错误、带有过多噪声或者是出现异常值等的数据,这种数据会影响系统整体的性能,因此,数据清洗对于构建一个机器学习系统或者一个机器学习项目来说都是必不可少的步骤。
对于这些低质量的数据,通常可以按照如下做法处理:
如果一些实例是明显的异常值,最好删掉它们或尝试手工修改错误;
如果一些实例缺少特征(比如,你的 5% 的顾客没有说明年龄),你必须决定是否忽略这个属性、忽略这些实例、填入缺 失值(比如,年龄中位数),或者训练一个含有这个特征的模型和一个不含有这个特征的模型,等等。
不相关的特征
不相关的特征对于整个机器学习系统是有着反作用的效果,训练数据必须包含足够多的相关特征且非相关特征不多的情况下,才能训练出一个性能不错的模型。机器学习项目成功的关键之一是用好的特征进行训练。这个过程称作特征工程
特征选择:在所有存在的特征中选取最有用的特征进行训练。
特征提取:组合存在的特征,生成一个更有用的特征(如前面看到的,可以使用降维算法)。
收集新数据创建新特征。
过拟合
过拟合就是指算法模型在训练集上的性能非常好,但是泛化能力很差,即在测试集上的效果却很糟糕的情况。
正则化方法是比较常用的方法,它的作用就是限制模型,不让模型过于复杂,从而降低过拟合的风险或者是缓和过拟合的程度。常用的正则化方法是 L2 和 L1 正则化。
测试和评估
分别是训练集和测试集,通常 8:2 的比例,也就是 80% 的数据作为训练集,剩余是测试集
一种做法是可以将所有数据按照一定比例划分为训练集、验证集和测试集,比如按照 6:2:2 的比例划分;当然更通常的做法是采用交叉验证:训练集分成互补的子集,每个模型用不同的子集训练,再用剩下的子集验证。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。