机器学习是让计算机无需明确编程即可学习的行为。这是通过将数据提供给计算机并让它们将数据转换为决策模型然后用于未来预测来完成的。
在本教程中,我们将讨论机器学习以及开始机器学习所需的一些基本概念。我们还将设计一些 Python 示例来预测某些元素或事件。
机器学习简介
机器学习是一种旨在从经验中学习的技术。例如,作为人类,您可以通过观察其他人下棋来学习如何下棋。以同样的方式,计算机通过向它们提供数据来进行编程,它们从中学习并能够预测未来的元素或条件。
例如,假设您想编写一个程序来判断某种水果是橙子还是柠檬。您可能会发现编写这样的程序很容易,它会给出所需的结果,但您也可能会发现该程序对于大型数据集不能有效地工作。这就是机器学习发挥作用的地方。
机器学习涉及多个步骤:
- 数据收集
- 数据过滤
- 数据分析
- 算法训练
- 算法测试
- 使用算法进行未来预测
机器学习使用不同种类的算法来寻找模式,这些算法分为两类:
- 监督学习
- 无监督学习
监督学习
监督学习是训练计算机通过提供样本数据来识别元素的科学。然后计算机从中学习,并能够根据学习到的数据预测未来的数据集。
例如,您可以训练计算机根据过去的信息过滤掉垃圾邮件。
监督学习已在许多应用程序中使用,例如 Facebook,以基于特定描述搜索图像。您现在可以使用描述照片内容的词语在 Facebook 上搜索图像。由于该社交网站已经拥有一个带标题图像的数据库,因此它能够以某种程度的准确度搜索描述并将其与照片中的特征进行匹配。
监督学习只涉及两个步骤:
- 训练
- 测试
一些监督学习算法包括:
- 决策树
- 支持向量机
- 朴素贝叶斯
- k-最近邻
- 线性回归
例子
我们将编写一个简单的程序来演示监督学习如何使用 Sklearn 库和 Python 语言进行工作。Sklearn 是 Python 编程语言的机器学习库,具有多重分析、回归和聚类算法等一系列功能。
Sklearn 还可以与NumPy和 SciPy 库很好地互操作 。
安装sklearn
Sklearn 安装指南提供了一种非常简单的方法来为多个平台安装它。它需要几个依赖项:
- Python(>= 2.7 或 >= 3.3),
- NumPy (>=1.82)
- SciPy (>=0.13.3)
如果你已经有了这些依赖,你可以简单地安装 Sklearn:
1
|
pip install -U scikit-learn
|
更简单的方法是简单地安装 Anaconda。这会处理所有依赖项,因此您不必担心一一安装它们。
要测试 Sklearn 是否正常运行,只需从 Python 解释器中导入它,如下所示:
1
|
import sklearn
|
如果没有发生错误,那么您就可以开始了。
现在我们已经完成了安装,让我们回到我们的问题。我们希望能够区分不同的动物。因此,我们将设计一种算法,可以具体判断给定的动物是马还是鸡。
我们首先需要从每种动物中收集一些样本数据。一些示例数据如下表所示。
高度(英寸) | 重量(公斤) | 温度(摄氏度) | 标签 |
---|---|---|---|
7 | 0.6 | 40 | 鸡 (0) |
7 | 0.6 | 41 | 鸡 (0) |
37 | 0.8 | 37 | 马 (1) |
37 | 0.8 | 38 | 马 (1) |
我们已经获得的样本数据给出了这两种动物和数据的两个动物的共同特征。样本数据越大,结果越准确,偏差越小。
有了这种类型的数据,我们可以编写一个算法并训练它根据训练的值识别动物,并将其分类为马或鸡。现在我们将继续编写能够完成工作的算法。
首先,从 Sklearn 导入 tree 模块。
1
|
from sklearn import tree
|
定义要用于对动物进行分类的特征。
1
|
features = [[ 7 , 0.6 , 40 ], [ 7 , 0.6 , 41 ], [ 37 , 600 , 37 ], [ 37 , 600 , 38 ]]
|
定义每个分类器将给出的输出。鸡用 0 表示,马用 1 表示。
1
2
3
|
#labels = [chicken, chicken, horse, horse]
# we use 0 to represent a chicken and 1 to represent a horse
labels = [ 0 , 0 , 1 , 1 ]
|
然后我们定义基于决策树的分类器。
1
|
classifier = tree.DecisionTreeClassifier()
|
为分类器提供或拟合您的数据。
1
|
classifier.fit(features, labels)
|
该算法的完整代码如下所示。
1
2
3
4
5
6
|
from sklearn import tree
features = [[ 7 , 0.6 , 40 ], [ 7 , 0.6 , 41 ], [ 37 , 600 , 37 ], [ 37 , 600 , 38 ]]
#labels = [chicken, chicken, horse, horse]
labels = [ 0 , 0 , 1 , 1 ]
classif = tree.DecisionTreeClassifier()
classif.fit(features, labels)
|
我们现在可以预测一组给定的数据。以下是如何预测高度为 7 英寸、体重为 0.6 公斤、温度为 41 的动物:
01
02
03
04
05
06
07
08
09
10
11
|
from sklearn import tree
features = [[ 7 , 0.6 , 40 ], [ 7 , 0.6 , 41 ], [ 37 , 600 , 37 ], [ 37 , 600 , 38 ]]
#labels = [chicken, chicken, horse, horse]
labels = [ 0 , 0 , 1 , 1 ]
classif = tree.DecisionTreeClassifier()
classif.fit(features, labels)
print classif.predict([[ 7 , 0.6 , 41 ]])
#output
# [0] or a Chicken
|
以下是如何预测高度为 38 英寸、体重为 600 公斤、温度为 37.5 的动物:
01
02
03
04
05
06
07
08
09
10
11
|
from sklearn import tree
features = [[ 7 , 0.6 , 40 ], [ 7 , 0.6 , 41 ], [ 37 , 600 , 37 ], [ 37 , 600 , 38 ]]
#labels = [chicken, chicken, horse, horse]
labels = [ 0 , 0 , 1 , 1 ]
classif = tree.DecisionTreeClassifier()
classif.fit(features, labels)
print classif.predict([[ 38 , 600 , 37.5 ]])
# output
# [1] or a Horse
|
正如你在上面看到的,你已经训练了算法来学习动物的所有特征和名称,并将这些数据的知识用于测试新动物。
无监督学习
无监督学习是指您仅使用一组输入来训练机器。然后机器将能够找到输入数据与您可能想要预测的任何其他数据之间的关系。与监督学习不同,在监督学习中,您向机器展示一些数据以供训练,而无监督学习旨在让计算机找到不同数据集之间的模式或关系。
无监督学习可以进一步细分为:
- 聚类
- 协会
聚类:聚类意味着本质上对数据进行分组。例如,您可以对消费者的购物习惯进行分类,并根据消费者的购买和购物习惯定位消费者,并将其用于广告。
关联:关联是您识别描述大量数据的规则的地方。这种类型的学习适用于基于作者或类别的关联书籍,无论是励志书籍、虚构书籍还是教育书籍。
一些流行的无监督学习算法包括:
- k均值聚类
- 层次聚类
在不久的将来,无监督学习将成为一项重要的技术。这是由于这样的事实,还有很多还未被数字化了未经过滤的数据。
结论
我希望本教程可以帮助您开始机器学习。这只是一个介绍——机器学习有很多内容需要涵盖,而这只是机器学习可以做的一小部分。
您决定使用监督或非监督机器学习算法将取决于各种因素,例如数据的结构和大小。
机器学习几乎可以应用于我们生活的所有领域,例如预防欺诈、个性化社交媒体网站中的新闻提要以适应用户的偏好、电子邮件和恶意软件过滤、天气预报,甚至在电子商务领域以预测消费者购物习惯。