机器学习简介
机器学习应该如何入门
相信在看了上面的内容之后,一些读者朋友也已经动心,想要加入机器学习的领域当中了。保不齐能像故事中的小C一样,既能抱得美人归,又能找到一份心仪的工作。但另外,又会担心自己基础薄弱,不知道从何入手。
不用担心!只要你肯多动脑,勤动手,相信很快就可以入门的。下面是我们给大家的一点学习方面的建议。
从一种编程语言开始
如果你之前完全没有编程的基础,那么我们建议先从一门编程语言开始。目前市面上常用的编程语言有很多种,如C++、Java、Python、R等。那么该选择哪一种呢?不必纠结,编程语言并没有绝对的“好”和“不好”的区别,只是它们各自有各自的特点而已。而且如果你掌握了其中的一种,再学习其他的编程语言时,上手会快得多。
在数据科学领域,Python已经成为了一门通用的编程语言。它既有通用编程语言的强大能力,同时还具有诸如MATLAB或者R之类针对某个专门领域语言的易用性。同时丰富和强大的库,让Python在数据挖掘、数据可视化、图像处理、自然语言处理等领域都有非常不俗的表现。
Python还被称为“胶水语言”,因为它能够把用其他语言编写的各种模块轻松连接在一起。而它简洁清晰的语法和强制缩进的特点,都让Python对初学者非常友好。此外,它还是完全开源的,用户完全不需要支付任何费用。
由于Python语言的简洁性、易读性以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python来教授程序设计课程。众多开源的科学计算软件包都提供了Python的调用接口,如著名的计算机视觉库OpenCV、三维可视化库VTK、医学图像处理库ITK。Google的深度学习框架TensorFlow兼容得最好的语言之一,也是Python。
2017年7月20日,IEEE发布2017年编程语言排行榜:Python高居首位。
还有一个重要的原因,对于用户来说,Python的学习成本是非常低的。哪怕是完全零基础的读者,在一个月左右的努力学习之后,也可以大致掌握它的基本语法和主要的功能模块。
因此我们推荐读者使用Python进行机器学习方面的研究与开发,在后面的章节我们会带大家配置基于Python的开发环境。
熟悉机器学习中的基本概念
在对编程语言有了基本的掌握之后,读者朋友需要熟悉机器学习中的一些基本概念,比如什么是“有监督学习”,什么是“无监督学习”,它们之间的区别是什么,在应用方面有什么不同。另外,对机器学习的“分类”和“回归”有基本认知,清楚在什么场景下使用分类算法,在什么场景下使用回归算法。最后理解模型的“泛化”,明白在什么情况下模型会出现“过拟合”的现象,在什么情况下会出现“欠拟合”的现象。
了解机器学习中最常见的算法
在了解了基本概念之后,读者朋友就可以开始了解机器学习中最常用的一些算法了。比如K最近邻算法、线性模型、朴素贝叶斯、决策树、随机森林、SVMs、神经网络等。
在这个过程中,读者需要了解每种算法的基本原理和用途,它们的特性分别是什么,在不同的数据集中表现如何,如何使用它们建模,模型的参数如何调整等。
掌握对数据进行处理的技巧
读者朋友可根据前述内容,对小数据集进行建模并且做出一些预测。但是在真实世界中,数据往往比我们拿来实验的小数据集复杂很多倍。它们的特征变量会大很多,也就是说数据的维度会高很多,同时可能完全没有训练数据集供你使用,这时候读者就需要掌握一些数据处理的技能,比如如何对数据进行降维,或者聚类,从而让数据更容易被理解,并从中找到关键点,为建模奠定基础。
学会让模型更好地工作
学会用算法建模和对数据进行处理之后,读者朋友要做的是如何让模型更好地工作。例如,怎样做可以让算法的效率更高,怎样找到最适合的模型,模型最优的参数是什么,以及如何打造一个流水线,让几个模型在其中共同协作,以解决你的问题等。
动手,一定要动手操作
学习一门知识最好的办法就是使用它,因此建议读者朋友一定要自己动手实操。不要嫌麻烦,尽可能把本书中的代码全部自己敲一下这样才能对内容有更加深刻的理解。如果觉得不够过瘾,还可以到知名的Kaggle大赛平台,或者“天池”算法大赛平台上,使用那些来自真实世界的数据来磨炼自己的技能。
当然,还有个更好的方法,那就是去企业中寻找一个机器学习工程师或是算法工程师的职位,在工作中学习,效果是最好的了。
有监督学习与无监督学习
在机器学习领域,有监督学习和无监督学习是两种常用的方法。有监督学习是通过现有训练数据集进行建模,再用模型对新的数据样本进行分类或者回归分析的机器学习方法。在监督式学习中,训练数据集一般包含样本特征变量及分类标签,机器使用不同的算法通过这些数据推断出分类的方法,并用于新的样本中。目前有监督学习算法已经比较成熟,并且在很多领域都有很好的表现。
而无监督学习,或者说非监督式学习,则是在没有训练数据集的情况下,对没有标签的数据进行分析并建立合适的模型,以便给出问题解决方案的方法。在无监督学习当中,常见的两种任务类型是数据转换和聚类分析。
其中数据转换的目的是,把本来非常复杂的数据集通过非监督式学习算法进行转换,使其变得更容易理解。常见的数据转换方法之一便是数据降维,即通过对特征变量较多的数据集进行分析,将无关紧要的特征变量去除,保留关键特征变量(例如,把数据集降至二维,方便进行数据可视化处理)。
而聚类算法则是通过把样本划归到不同分组的算法,每个分组中的元素都具有比较接近的特征。目前,聚类算法主要应用在统计数据分析、图像分析、计算机视觉等领域。
机器学习中的分类与回归
分类和回归是有监督学习中两个最常见的方法。对于分类来说,机器学习的目标是对样本的类标签进行预测,判断样本属于哪一个分类,结果是离散的数值。而对于回归分析来说,其目标是要预测一个连续的数值或者是范围。
这样讲可能会有一点抽象,我们还是用小C的例子来理解一下这两个概念。
比如,小C在使用算法模型预测女神的电影喜好时,他可以将电影分为“女神喜欢的”和“女神不喜欢的”两种类型,这就是二元分类,如果他要把电影分为“女神特别喜欢的”“女神有点喜欢的”“女神不怎么喜欢的”以及“女神讨厌的”四种类型,那么这就属于多元分类。
但如果小C要使用算法模型预测女神对某部电影的评分,例如,女神会给“速度与激情8”打多少分,从0到100,分数越高说明女神越喜欢,最终模型预测女神会给这部电影打88分,这个过程就称为回归。小C需要将女神给其他电影的评分和相对应的电影特征作为训练数据集,通过建立回归模型,来给“速度与激情8”打分。
模型的泛化、过拟合与欠拟合
在有监督学习中,我们会在训练数据集上建立一个模型,之后会把这个模型用于新的,之前从未见过的数据中,这个过程称为模型的泛化(generalization)。当然我们希望模型对于新数据的预测能够尽可能准确,这样才能说模型泛化的准确度比较高。
那么我们用什么样的标准来判断一个模型的泛化是比较好的,还是比较差的呢?
我们可以使用测试数据集对模型的表现进行评估。如果你在训练数据集上使用了一个非常复杂的模型,以至于这个模型在拟合训练数据集时表现非常好,但是在测试数据集的表现非常差,说明模型出现了过拟合(overfitting)的问题。
相反,如果模型过于简单,连训练数据集的特点都不能完全考虑到的话,那么这样的模型在训练数据集和测试数据集的得分都会非常差,这个时候我们说模型出现了欠拟合(underfitting)的问题。
而只有模型在训练数据集和测试数据集得分都比较高的情况下,我们才会认为模型对数据拟合的程度刚刚好,同时泛化的表现也会更出色。