😄也可以到我的网站上阅读
scikit-learn是一个开源的Python语言机器学习工具包。它涵盖了几乎所有主流机器学习算法的实现,并且提供了一致的调用接口。它基于Numpy和SciPy等Python数值计算库,提供了高效的算法实现。总结起来,scikit-learn工具包有以下几个优点:
- 文档齐全:官方文档齐全,更新及时。
- 接口易用:针对所有的算法提供了一致的接口调用规则,不管是KNN、K-Means还是PCA。
- 算法全面:涵盖主流机器学习任务的算法,包括回归算法、分类算法、聚类分析、数据降维处理等。
当然,scikit-learn不支持分布式计算,不适合用来处理超大型数据,但这并不影响scikit-learn作为一个优秀的机器学习工具库这个事实。
假设:要开发一个房价评估系统,目标是对一个已知特征的房子价格进行评估预测。
建立这样一个系统,通常包括以下几个步骤:
我们需要大量不同特征的房子和所对应的价格信息,可以直接从房产评估中心获取房子的相关信息,如房子的面子、地理位置、朝向、价格等。另外还有一些信息房产评估中心不一定有,比如房子所在地的学校情况,这一特征往往会影响房子的价格,这个时候就需要通过其他途径收集这些数据。以上收集到的所有数据叫做训练样本,或数据集。房子的面积、地理位置等称为特征。在数据采集阶段,需要收集尽量多的特征。特征越全、数据越多,训练出来的模型才会越准确。
我们的房屋价格信息是从房产评估中心获得的,这一数据可能不准确。因为有时为了避税,房屋的评估价格会比房子的真实交易价格低很多。这时就需要采集房子的实际成交价格,这一过程称为数据标记。数据标记可以是人工标记,比如逐个从房产中介那里打听房子的实际成交价格;也可以是自动标记,比如通过分析数据,找出房产评估中心给的房子评估价格和真实成交价格的匹配关系,然后直接算出来。数据标记对有监督的学习方法是必须的。比如,针对垃圾邮件过滤系统,训练样本必须包含该邮件是否为垃圾邮件的标记数据。
假设我们采集到的数据里,关于房子的面积,有按平方米计算的,也有按平方英尺计算的,这时需要对面积单位进行统一。这个过程称为数据清洗。数据清洗还包括去掉重复数据及噪声数据,让数据具备结构化特征,以方便作为机器学习算法的输入。
假设我们采集到了房子的100个特征,通过逐个分析这些特征,最终选择了30个特征作为输入。这个过程称为特征选择。特征选择的方法之一是人工选择,即对逐个特征进行人工分析,然后选择合适的特征集合。另外一个方法是通过模型来自动选择,如后面将要介绍的主成分分析(PCA)算法。
房价评估系统是属于有监督学习的回归学习类型,我们可以选择最简单的线性模型来模拟。选择哪个模型,和问题领域、数据量大小、训练时长、模型的准确度等多方面因素有关。这些内容将在第3章进行介绍。
把数据集分成训练数据集和测试数据集,一般按照8:2或者7:3来划分,然后用训练数据集来训练模型。训练出参数后再使用测试数据集来测试模型的准确度。为什么要分出一个单独的测试数据集来做测试呢?答案是必须保证测试的准确性,即模型的准确性是要用它没见过的数据来测试,而不能用那些用来训练这个模型的数据来测试。理论上更合理的数据集划分方案是分成3个,即再分出一个交叉验证数据集。这些内容将在第3章进行介绍。
模型训练出来后,需要对该模型进行性能评估。性能评估一般包括以下几个方面:
训练时长:是指需要花多少时间来训练这个模型。对于一些海量数据的机器学习应用,可能需要1个月甚至更长的时间来训练一个模型,这个时候算法的训练性能就变得很重要了。
另外,还需要判断数据集是否足够多。一般而言,对于复杂特征的系统,训练数据集越大越好。
然后还需要判断模型的准确性,即对于一个新的数据能否准确的进行预测。
最后需要判断模型是否能满足应用场景的性能要求,如果不能满足要求,就需要优化,然后继续对模型进行训练和评估,或者更换为其他模型。
训练出来的模型可以把参数保存起来,下次使用时直接加载即可。一般来讲,模型训练需要的计算量是很大的,也需要较长的时间来训练,这是因为一个好的模型参数,需要对大型数据集进行训练后才能得到。而真正使用模型时,其计算量是比较少的,一般是直接把新样本作为输入,然后调用模型即可得出结果。