老板:小韩啊,来来来!工程是不是写够了啊?
我:(what!!!)emmmm,还行还行。
老板:一看你就是写够了。最近公司要搞机器学习,你带头来学习一下吧!
我:行啊,工程代码我早就不想写了。那就学习一下吧!
老板:好,那就先去看《机器学习》吧!
自己现在是一名大四的学生,准备读研,当然没有工作,老板也是我捏造的。
荒废了大四好久的时间,最近,自己总算是慢慢提起学习的兴趣,开始学习机器学习了。以前从来没有接触过机器学习,所以在学习的初期,自己也向学长学姐请教了一下,于是决定从《机器学习实战》这本书开始入门机器学习。
为什么选择这本书,其实,总体来看,这本书比较基础,适合入门。对于一些数学定理,也就是拿过来用,并不注重这些定理的高深的推导过程。这对我一个数学渣渣来说,正好可以接受。
作为一名标准的理工男,我也算是第一次写文章,可能会有语病问题。有些东西可能写的不好,说的不明白,还望大家见谅。
好了,开篇的废话我也不多说了,直接进入“机器学习”的世界!
1.1 何谓机器学习
除却一些无关紧要的情况,我们很难直接从原始数据本身获得所需信息。
例如,对于垃圾邮件的检测,侦测一个单词是否存在并没有太大的作用,然而当某几个特定单词同时出现时,再辅 以考察邮件长度及其他因素,我们就可以更准确地判定该邮件是否为垃圾邮件。
简单地说,机器学习就是把无序的数据转换成有用的信息,让机器向我们的大脑一样去学习去判断。
其实,书中还有更多的信息去介绍机器学习的背景,因为大部分都是理论套话,这里我就不给大家列出了,有兴趣的可以直接去看《机器学习实战》这本书。
我们接下来直接看一下与机器学习有关的术语。
1.2 关键术语
在踏入任何一个领域之前,我们都有必要去了解该领域所读应的术语,机器学习也不例外。
好了,老板来了。
老板:小韩啊,看的怎么样了?机器学习里面的一些术语明白了吗??
我:明白了!明白了!So Easy!
老板:hhhh,好。那你给我系统的介绍一下吧。
我:好嘞!(求升职加薪脸)
下面,我们就从一个鸟类分类系统来介绍机器学习中的相关术语。
这类系统非常有趣,通常与机器学习中的专家系统有关。开发出能够识别鸟类的计算机软件,鸟类学者就可以退休了。因为鸟类学者是研究鸟类的专家,因此我们所以说创建的是一个专家系统。
下表是我们用于区分不同鸟类需要使用的四个不同的属性值,我们选用体重、翼展、有无脚蹼以及后背颜色作为评测基准。现实中,你可能会想测量更多的值。通常的做法是测量所有可测属性,而后再挑选出重要部分。下面测量的这四种值称之为特征,也可以称作属性,我们接下来一律将其称为特征。表中的每一行都是一个具有相关特征的实例。
体重(克) | 翼展(厘米) | 脚蹼 | 后背颜色 | 种属 |
---|---|---|---|---|
1000.1 | 125.0 | 无 | 棕色 | 红尾鵟 |
3000.7 | 200.0 | 无 | 灰色 | 鹭鹰 |
3300.0 | 220.3 | 无 | 灰色 | 鹭鹰 |
4100.0 | 136.0 | 有 | 黑色 | 普通潜鸟 |
3.0 | 11.0 | 无 | 绿色 | 瑰丽蜂鸟 |
570.0 | 75.0 | 无 | 黑色 | 象牙喙啄木鸟 |
image老板:等一下,你这光有文字,太抽象了。
我:那你等一下,我给你画张图,你就明白了。
老板:不错不错,这样好理解多了!
如果你看到了一只象牙喙啄木鸟,请马上通知我!而且千万不要告诉任何人。在我到达之前, 一定要看住它,别让它飞跑了。(任何发现活的象牙喙啄木鸟的人都可以得到5万美元的奖励)
机器学习的主要任务就是分类。接下来我们就利用上表进行分类,标识出象牙喙啄木鸟从而获取5万美元的奖励。
大家都想从众多其他鸟类中分辨出象牙喙啄木鸟,并从中获利。
简单的做法是安装一个喂食器,然后雇用一位鸟类学者,观察在附近进食的鸟类。如果发现象牙喙啄木鸟,则通知我们。这种方法太昂贵了,而且专家在同一时间只能出现在一个地方。
我们可以自动化处理上述过程,安装多个带有照相机的喂食器,同时接入计算机用于标识前来进食的鸟。 同样我们可以在喂食器中放置称重仪器以获取鸟的体重,利用计算机视觉技术来提取鸟的翅长、 脚的类型和后背色彩。假定我们可以得到所需的全部特征信息,那该如何判断飞入进食器的鸟是 不是象牙喙啄木鸟呢?
这个任务就是分类,有很多机器学习算法非常善于分类。本例中的类别就是鸟的物种,更具体地说,就是区分是否为象牙喙啄木鸟。 最终我们决定使用某个机器学习算法进行分类,首先需要做的是算法训练,即学习如何分类。 通常我们为算法输入大量已分类数据作为算法的训练集。训练集是用于训练机器学习算法的数据样本集合,那么上表是包含六个训练样本的训练集,每个训练样本有4种特征、一个目标变量。目标变量是机器学习算法的预测结果,在分类算法中目标变量的类型通常是标称型的, 而在回归算法中通常是连续型的。训练样本集必须确定知道目标变量的值,以便机器学习算法可以发现特征和目标变量之间的关系。正如前文所述,这里的目标变量是物种,也可以简化为标称型的数值。我们通常将分类问题中的目标变量称为类别,并假定分类问题只存在有限个数的类别。
image老板:那你继续画图!
我:遵命!
注意:特征或者属性通常是训练样本集的列,它们是独立测量得到的结果,多个特征联系在一 起共同组成一个训练样本。
好了,我们现在已经有了数据,也做好了分类训练的工作,接下来就是测试工作了。
为了测试机器学习算法的效果,通常使用两套独立的样本集:训练数据和测试数据。
1. 当机器学习程序开始运行时,使用训练样本集作为算法的输入,训练完成之后输入测试样本。
2. 输入测试样本时并不提供测试样本的目标变量,由程序决定样本属于哪个类别。比较测试样本预测的目标变量值与实际样本类别之间的差别,就可以得出算法的实际精确度。
后面我们将会引入更好地使用测试样本和训练样本信息的方法,这里就不再详述。
假定这个鸟类分类程序,经过测试满足精确度要求,是否我们就可以看到机器已经学会了如何区分不同的鸟类了呢?这部分工作称之为知识表示,某些算法可以产生很容易理解的知识表示,而某些算法的知识表示也许只能为计算机所理解。知识表示可以采用规则集的形式,也可以采用概率分布的形式,设置可以是训练样本集中的一个实例。在某些场合中,人们可能并不想建立一个专家系统,而仅仅对机器学习算法获取的信息感兴趣。此时,采用何种方式表示知识就显得非常重要了。
好了,说了这么多,可能会有点多,这里因为是术语,定义我也不能自己胡诌,我就结合西瓜书,给大家稍微总结一下基本的术语,可能说的不是很清楚,如果有什么不对的地方,欢迎大家指正。当然,在后面的学习中,我们会接触到更多的术语,这里我就不多赘述了。
1. 实例(样本):表中每一行是关于一个事件或者对象的描述。
2. 特征(feature):反映事件或对象在某方面的表现或性质的事项,也叫做属性(attribute),例如体重、是否有脚蹼等。
3. 属性值(attribute value):属性上的取值。
4. 数据集(data set):样本的集合。
5. 训练集(training set):用作训练的数据集。
6. 测试集(test set):用作测试的数据集。
老板:小伙子干得不错啊!
我:还行,还行!
老板:今晚给你加鸡腿,你就在公司好好干!
我:(脸上笑嘻嘻,内心mmp)
1.3 机器学习的主要任务
上面的例子中,我们已经介绍了机器学习是如何解决分类问题的,它的主要任务就是将实例数据划分到合适的分类中去。
机器学习的另一项任务是回归(regression),它用于预测数值型数据。大多数人都见多回归的例子——数据拟合曲线:通过给定数据点的最优拟合曲线。
分类和回归术语监督学习,之所以称之为监督学习,是因为这类算法必须知道预测什么,即目标变量的分类信息。
与监督学习相对应的就是无监督学习,此时数据没有类别信息,也不会给定目标值。
1. 将数据集合分成由类似的对象组成的多个类的过程被称为聚类;
2. 将寻找描述数据统计值 的过程称之为密度估计。
此外,无监督学习还可以减少数据特征的维度,以便我们可以使用二维或三维图形更加直观地展示数据信息。
下面这个表格是《机器学习实战》这本书上的,因为我也是入门级,所以就直接拿过来用了。
- 监督学习的用途
分类 | 回归 |
---|---|
k-近邻算法 | 线性回归 |
朴素贝叶斯算法 | 局部加权线性回归 |
支持向量机(SVM) | Ridge线性回归 |
决策树 | Lasso最小回归系数估计 |
- 无监督学习的用途
聚类 | 密度估计 |
---|---|
K-均值 | 最大期望算法 |
DBSCAN | Parzen窗设计 |
好吧,这么多东西都是啥玩意?我也不知道。后面,我们慢慢学习,揭开这神秘的面纱!
1.4 如何选择合适的算法
老板:小韩啊,最近机器学期看得怎么样了啊?
我:还行还行啦,基本的术语都搞明白了啊,也了解了一些算法和机器学习的分类了。
老板:不错,不错。那你知道如何选择合适的机器学习算法吗?
我:那当然了。书上写的还是很明白的!
老板:那你给我讲讲!
老板啊,这么多机器学习算法,我们该如何进行选择呢?其实,有两个问题需要我们考虑。
1. 我们使用机器学习算法的目的,想要算法完成何种任务。比如,是预测明天下雨的概率还是对投票者按照兴趣分组呢?
2. 需要分析和收集的数据是什么。
简单点,就是目的和数据,也就是我们用什么数据做什么用。
首先考虑使用机器学习算法的目的。如果想要预测目标变量的值,则可以选择监督学习算法, 否则可以选择无监督学习算法。确定选择监督学习算法之后,需要进一步确定目标变量类型,如果目标变量是离散型,如是/否、1/2/3、A/B/C或者红/黄/黑等,则可以选择分类器算法;如果目标变量是连续型的数值,如0.0~100.00、-999~999或者+∞~-∞等,则需要选择回归算法。 如果不想预测目标变量的值,则可以选择无监督学习算法。进一步分析是否需要将数据划分为离散的组。如果这是唯一的需求,则使用聚类算法;如果还需要估计数据与每个分组的相似程度,则需要使用密度估计算法。
好吧,这么多字,有点烦哦,不如来一张图片。
image在大多数情况下,上面给出的选择方法都能帮助读者选择恰当的机器学习算法,但这也并非一成不变。
其次需要考虑的是数据问题。我们应该充分了解数据,对实际数据了解得越充分,越容易创建符合实际需求的应用程序。主要应该了解数据的以下特性:
1. 特征值是离散型变量还是连续型变量
2. 特征值中是否存在缺失的值
3. 何种原因造成缺失值
4. 数据中是否存在异常值
5. 某个特征发生的频率如何(是否罕见得如同海底捞针)等等。
充分了解上面提到的这些数据特性可以缩短选择机器学习算法的时间。
我们只能在一定程度上缩小算法的选择范围,一般并不存在好的算法或者可以给出好结果的算法,同时还要尝试不同算法的执行效果。对于所选的每种算法,都可以使用其他的机器学习技术来改进其性能。在处理输入数据之后,两个算法的相对性能也可能会发生变化。后续章节我们将进一步讨论此类问题,一般说来发现好算法的关键环节是反复试错的迭代过程。
1.5 开发机器学习应用程序的步骤
在《机器学习实战》这本书中,开发和使用机器学习算法开发应用程序,通常遵循以下的步骤。
1. 收集数据。我们可以使用很多方法收集样本数据,如:制作网络爬虫从网站上抽取数据、 从RSS反馈或者API中得到信息、设备发送过来的实测数据(风速、血糖等)。提取数据的方法非 常多,为了节省时间与精力,可以使用公开可用的数据源。
2. 准备输入数据。得到数据之后,还必须确保数据格式符合要求。在这本书中采用的格式是Python语言的List。使用这种标准数据格式可以融合算法和数据源,方便匹配操作。此外还需要为机器学习算法准备特定的数据格式,如某些算法要求特征值使用特定的格式, 一些算法要求目标变量和特征值是字符串类型,而另一些算法则可能要求是整数类型。
3. 分析输入数据。此步骤主要是人工分析以前得到的数据。为了确保前两步有效,简单的方法是用文本编辑器打开数据文件,查看得到的数据是否为空值。此外,还可以进一步浏览数据,分析是否可以识别出模式;数据中是否存在明显的异常值,如某些数据点与数据集中的其他 值存在明显的差异。通过一维、二维或三维图形展示数据也是不错的方法,然而大多数时候我们 得到数据的特征值都不会低于三个,无法一次图形化展示所有特征。本书的后续章节将会介绍提 炼数据的方法,使得多维数据可以压缩到二维或三维,方便我们图形化展示数据。 这一步的主要作用是确保数据集中没有垃圾数据。如果是在产品化系统中使用机器学习算法 并且算法可以处理系统产生的数据格式,或者我们信任数据来源,可以直接跳过第3步。此步骤需要人工干预,如果在自动化系统中还需要人工干预,显然就降低了系统的价值。
4. 训练算法。机器学习算法从这一步才真正开始学习。根据算法的不同,第4步和第5步是机器学习算法的核心。我们将前两步得到的格式化数据输入到算法,从中抽取知识或信息。这里 得到的知识需要存储为计算机可以处理的格式,方便后续步骤使用。 如果使用无监督学习算法,由于不存在目标变量值,故而也不需要训练算法,所有与算法相关的内容都集中在第5步。
5. 测试算法。这一步将实际使用第4步机器学习得到的知识信息。为了评估算法,必须测试算法工作的效果。对于监督学习,必须已知用于评估算法的目标变量值;对于无监督学习,也必须用 其他的评测手段来检验算法的成功率。无论哪种情形,如果不满意算法的输出结果,则可以回到第 4步,改正并加以测试。问题常常会跟数据的收集和准备有关,这时你就必须跳回第1步重新开始。
6. 使用算法。将机器学习算法转换为应用程序,执行实际任务,以检验上述步骤是否可以 在实际环境中正常工作。此时如果碰到新的数据问题,同样需要重复执行上述的步骤。
这些都是书上的原内容,我觉得总结得很好,所以就直接拿过来给大家看了。
老板:小韩啊,机器学习你也算是基本入门了。不仅掌握了机器学习的相关术语,还掌握了如何选择机器学习算法和开发机器学习应用程序的步骤,总的来说还是很不错的!
我:谢谢老板夸奖,那加工资不?
老板:你说啥?工作太轻松了?好,那明天就给你安排新的任务,干得好可以考虑加鸡腿!!!
我:溜了溜了,今天就到这里了!
最后,欢迎大家关注我的公众号,有什么事情欢迎大家给我留言!!!
微信公众号.jpg
网友评论