算法工程师修仙之路:机器学习实战(二)
第一部分:分类
第一章 机器学习基础
机器学习的主要任务
-
机器学习解决分类问题的主要任务是将实例数据划分到合适的分类中。机器学习的另一项任务是回归,它主要用于预测数值型数据。
-
分类和回归属于监督学习,之所以称之为监督学习,是因为这类算法必须知道预测什么,即目标变量的分类信息。
-
与监督学习相对应的是无监督学习,此时数据没有类别信息,也不会给定目标值。
- 在无监督学习中,将数据集合分成由类似的对象组成的多个类的过程被称为聚类;
- 将寻找描述数据统计值的过程称之为密度估计;
- 此外,无监督学习还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。
-
表1-2列出了机器学习的主要任务,以及解决相应问题的算法:
如何选择合适的算法
-
从表1-2中所列的算法中选择实际可用的算法,必须考虑下面两个问题:
-
使用机器学习算法的目的,想要算法完成何种任务
- 首先考虑使用机器学习算法的目的:
-
如果想要预测目标变量的值,则可以选择监督学习算法;
- 确定选择监督学习算法之后,需要进一步确定目标变量类型;
- 如果目标变量是离散型,则可以选择分类器算法;
- 如果目标变量是连续型的数值,则需要选择回归算法;
-
如果不想预测目标变量的值,则可以选择无监督学习算法;
- 进一步分析是否需要将数据划分为离散的组;
- 如果这是唯一的需求,则使用聚类算法;
- 如果还需要估计数据与每个分组的相似程度,则需要使用密度估计算法。
-
如果想要预测目标变量的值,则可以选择监督学习算法;
- 首先考虑使用机器学习算法的目的:
-
需要分析或收集的数据是什么
- 其次需要考虑的是数据问题:
- 我们应该充分了解数据,对实际数据了解得越充分,越容易创建符合实际需求的应用程序;
- 主要应该了解数据的以下特性:特征值是离散型变量还是连续型变量,特征值中是否存在缺失的值,何种原因造成缺失值,数据中是否存在异常值,某个特征发生的频率如何(是否罕见得如同海底捞针),等等;
- 充分了解上面提到的这些数据特性可以缩短选择机器学习算法的时间。
- 其次需要考虑的是数据问题:
-
使用机器学习算法的目的,想要算法完成何种任务
-
我们只能在一定程度上缩小算法的选择范围,一般并不存在最好的算法或者可以给出最好结果的算法,同时还要尝试不同算法的执行效果。对于所选的每种算法,都可以使用其他的机器学习技术来改进其性能。在处理输入数据之后,两个算法的相对性能也可能会发生变化。一般说来发现最好算法的关键环节是反复试错的迭代过程。
开发机器学习应用程序的步骤
-
学习和使用机器学习算法开发应用程序,通常遵循以下的步骤:
-
收集数据;
- 我们可以使用很多方法收集样本数据,如:制作网络爬虫从网站上抽取数据、从 RSS 反馈或者 API 中得到信息、设备发送过来的实测数据(风速、血糖等);
- 提取数据的方法非常多,为了节省时间与精力,可以使用公开可用的数据源。
-
准备输入数据;
- 得到数据之后,还必须确保数据格式符合要求,一般采用的格式是 Python 语言的 List,使用这种标准数据格式可以融合算法和数据源,方便匹配操作;
- 此外还需要为机器学习算法准备特定的数据格式,如某些算法要求特征值使用特定的格式,一些算法要求目标变量和特征值是字符串类型,而另一些算法则可能要求是整数类型。
-
分析输入数据;
- 此步骤主要是人工分析以前得到的数据;
- 为了确保前两步有效,最简单的方法是用文本编辑器打开数据文件,查看得到的数据是否为空值;
- 此外,还可以进一步浏览数据,分析是否可以识别出模式,数据中是否存在明显的异常值,如某些数据点与数据集中的其他值存在明显的差异;
- 通过一维、二维或三维图形展示数据也是不错的方法,然而大多数时候我们得到数据的特征值都不会低于三个,无法一次图形化展示所有特征,此时可以使用降维使得多维数据可以压缩到二维或三维,方便我们图形化展示数据;
- 这一步的主要作用是确保数据集中没有垃圾数据;
- 如果是在产品化系统中使用机器学习算法并且算法可以处理系统产生的数据格式,或者我们信任数据来源,可以直接跳过第3步;
- 此步骤需要人工干预,如果在自动化系统中还需要人工干预,显然就降低了系统的价值。
-
训练算法;
- 机器学习算法从这一步才真正开始学习;
- 根据算法的不同,第4步和第5步是机器学习算法的核心;
- 我们将前两步得到的格式化数据输入到算法,从中抽取知识或信息,这里得到的知识需要存储为计算机可以处理的格式,方便后续步骤使用;
- 如果使用无监督学习算法,由于不存在目标变量值,故而也不需要训练算法,所有与算法相关的内容都集中在第5步。
-
测试算法;
- 这一步将实际使用第4步机器学习得到的知识信息。为了评估算法,必须测试算法工作的效果;
- 对于监督学习,必须已知用于评估算法的目标变量值,对于无监督学习,也必须用其他的评测手段来检验算法的成功率;
- 无论哪种情形,如果不满意算法的输出结果,则可以回到第4步,改正并加以测试;
- 问题常常会跟数据的收集和准备有关,这时你就必须跳回第1步重新开始。
-
使用算法。
- 将机器学习算法转换为应用程序,执行实际任务,以检验上述步骤是否可以在实际环境中正常工作;
- 此时如果碰到新的数据问题,同样需要重复执行上述的步骤。
-
收集数据;