机器学习(英文缩写ML)是一计算机科学技术,目的是让程序能自动从数据样本中进行学习并在该过程中得到提升而不依赖于硬编码来提供规则的能力。
通过机器学习,计算机可以识别到更深入的含义,并根据所提供的样本数据做出精准的判断,而且实现这些也只需很少的人为干涉。
例如,拥有超过五年机器学习经验的 AndreyBu 创建了一个可以预测股市数据的模型。你可以在这里了解和学习他的项目。
在本文中,我们将描绘如何创建一个简单的机器学习算法,用来区分苹果和橙子。
如果没有机器学习,找到这种问题的解决方法可能需要编写好几行代码,而且无法达到想要的结果。机器学习简化了该过程。
简单地说,我们将创建一个机器学习算法,在给出一些样本示例后,系统可以判断两个水果之间的差异并做出相应的判断。
现在让我们开始
我们将使用 Anaconda,一个开源Python发行版。它附带了Scikit-learn库,这是一个机器学习的库,可以用来实现我们要用的算法。
在本示例中,我们将使用有监督学习算法,该算法利用已知数据集(称为训练集)来预测后续的不确定问题。
训练集由输入数据和输出值组成,从提供的数据样本中学习,并利用训练出来的模型区分两种水果。
以下是有监督学习方法的大致流程:
- 收集训练集
- 训练分类器
- 作出预测
让我们来讨论下各个步骤。
1、收集训练集
训练集是苹果和橙子的样本数据,我们将根据它们的差异做出分类。
这个表格展示了两种水果的特征并对它们进行区分:
重量(克) | 质感 | 标记 |
155 | 粗糙 | 橙子 |
180 | 粗糙 | 橙子 |
135 | 平滑 | 苹果 |
110 | 平滑 | 苹果 |
如上所见,水果可以根据其重量和质感进行分类。每一行的最后一列是机器学习中所谓的标签。在这个示例中,标签可以是橙子或苹果。
表中的每一行都称为数据点,整个表称为训练集。需要特别注意的是,结果的准确性取决于训练集中提供的样本数量。
现在,让我们编写一些Python代码来展示通过数据表会发生些什么。
我们将使用两个变量:features(数据表中前两列的数据)和 labels(数据表中最后一列的数据)。换句话说,特征是输入值,标记是输出值。
这是相应的Python代码:
features = [[155, "rough"], [180, "rough"], [135, "smooth"], [110, "smooth"]]
labels = ["orange", "orange", "apple", "apple"]
接下来,因为 Scikit-learn 需要使用数字做特征值,所以我们需要将字符串换为数值,这里可以将“粗糙”标志为数值0,将“平滑”标志为数值1来进行这样的转换。另外,对标记“橙子”和“苹果”也需要做同样的转换,分别使用数值1和0。
下面是转换后的代码:
features = [[155, 0], [180, 0], [135, 1], [110, 1]]
labels = [1, 1, 0, 0]
2、训练分类器
在机器学习中,数据分类是一种有监督学习算法,通训练集的数据样本进行学习,然后运用学习所得经验对新样本进行分类。
现在,我们将使用样本数据来训练我们的分类器以便后续对新样本进行分类。有几种类型的分类器可以在机器学习中使用。
在目前的情况下,为了简单起见,我们这里使用决策树,决策树可以使用从数据特征推导出的决策规则来学习和做出适当的预测。
下面是一个导入决策树分类器的方法,我们将它添加到项目代码当中。
classifier = tree.DecisionTreeClassifier()
在将分类器添加到我们的项目之后,我们需要使用相关的学习算法来训练它,否则,它无法区分苹果和橙子。
机器学习算法能通过训练数据识别出对应的模式并做出适当的结论。例如,它可以识别出苹果在质感上往往更平滑,因此,它将计算出一套规则,倾向于识别任何光滑的水果为苹果。
在Scikit-learn中,训练算法被称为拟合(也可以被解释为“数据中的查找模式”)。
我们将这段代码添加到的项目当中:
classifier = classifier.fit(features, labels)
3、作出预测
对分类器进行训练后的最后一步是测试它,看看它是否能对一个新水果进行分类。我们将使用预测函数进行预测。
假设新水果的质感是光滑的,重量为120克。还记得我们将平滑表示为1。而且,因为重量不是很高,它很可能是苹果(标记0),另外质感光滑也是苹果的一个特点。
让我们看看我们的机器学习算法是否能做出这样的预测:
print (classifier.predict([[120, 1]]))
它起作用了!
输出是我们所期望的:0(苹果)。
总结
这里是项目的全部代码:
from sklearn import tree
# Gathering training data
# features = [[155, "rough"], [180, "rough"], [135, "smooth"], [110, "smooth"]]
# Input to classifier
features = [[155, 0], [180, 0], [135, 1], [110, 1]]
# scikit-learn requires real-valued features
# labels = ["orange", "orange", "apple", "apple"]
# output values
labels = [1, 1, 0, 0]
# Training classifier
classifier = tree.DecisionTreeClassifier()
# using decision tree classifier
classifier = classifier.fit(features, labels)
# Find patterns in data
# Making predictions
print (classifier.predict([[120, 1]]))
# Output is 0 for apple
编写机器学习的程序并不困难。要掌握如何在你的程序中使用它,需要了解一些重要的概念。
因此,为了提高您的技能,您可以通过LiveEdu的实际项目来学习专家是如何构建真实世界变化的机器学习应用程序。
快乐学习机器学习!