发布于 2026-01-06 0 阅读
0

一种用于区分苹果和橙子的简单机器学习算法

一种用于区分苹果和橙子的简单机器学习算法

(本文最初发表于LiveEdu 博客)。

机器学习(简称 ML)是计算机科学的一个领域,它赋予应用程序从示例中自动学习并从经验中改进的能力,而无需依赖硬编码的规则。

借助机器学习,计算机能够识别隐藏的见解,并根据所提供的数据示例做出准确的预测——只需极少的人工干预。

例如,拥有五年以上机器学习经验的AndreyBu创建了一个可以预测股票市场数据的模型。您可以在这里观看并学习他的项目。

在本文中,我们将阐述如何创建一个简单的机器学习算法来区分苹果和橙子。

如果没有机器学习,解决这类问题可能需要编写多行代码,而且这些代码也未必能达到预期效果。机器学习简化了这一过程。

简单来说,我们将创建一个机器学习算法,该算法在给定一些示例后,能够学习两种水果之间的差异并据此进行预测。

让我们开始吧

我们将使用Anaconda开源 Python 发行版。它自带 Scikit-learn,这是我们将用来实现算法的机器学习库。

在这个例子中,我们将使用监督式机器学习算法,该算法利用已知的数据集(称为训练数据集)来预测未来事件。

训练数据集由输入数据和输出值组成,它从提供的示例中学习,并利用经验来区分这两种水果。

以下是监督学习流程的一般步骤:

  • 收集训练数据
  • 训练分类器
  • 做出预测

我们来逐一讨论这些步骤。

1. 收集训练数据

训练数据是苹果和橘子的例子,我们将根据它们的差异对它们进行分类。

下表列出了两种水果的特征,以便区分它们:

两种水果的特征

如上图所示,水果根据其重量和质地进行区分。

在机器学习中,每一行的最后一列被称为标签。在这个例子中,标签可以是橙子,也可以是苹果。

表格中的每一行都称为一个数据点。整个表格称为训练数据

值得注意的是,结果的准确性取决于训练数据中提供的示例数量。

现在,让我们用一些 Python 代码来展示表格中发生的事情。

我们将使用两个变量:特征(前两列中的数据)和标签(最后一列中的数据)。

换句话说,特征是输入数据,标签是输出值。

以下是代码:

features = [[155, "rough"], [180, "rough"], [135, "smooth"], [110, "smooth"]] 
labels = ["orange", "orange", "apple", "apple"]

接下来,由于 Scikit-learn 需要数值特征,让我们将字符串转换为整数,将 rough 定义为0,smooth 定义为1

让我们对橙子和苹果也进行同样的处理,分别赋予它们整数值10

以下是我们的新代码:

features = [[155, 0], [180, 0], [135, 1], [110, 1]]  
labels = [1, 1, 0, 0]

2. 训练分类器

在机器学习中,分类是一种监督学习技术,算法通过从示例数据中学习,然后利用经验对新的观察结果进行分类。

现在,我们将使用示例数据来训练分类器,使其能够对新的观测结果进行分类。在机器学习问题中,您可以使用多种类型的分类器。

在这种情况下,为了简单起见,我们将使用决策树,它可以利用从数据特征中推导出的决策规则来学习并做出适当的预测。

以下代码导入决策树分类器并将其添加到我们的项目中:

classifier = tree.DecisionTreeClassifier() 

将分类器添加到我们的项目中后,我们需要使用学习算法对其进行训练;否则,它可能无法区分苹果和橙子。

该学习算法能够识别训练数据中的模式并得出合适的结论。

例如,它可能会识别出苹果的质地比较光滑;因此,它会制定一条规则,将任何光滑的水果都识别为苹果。

在 Scikit-learn 中,训练算法被称为 Fit(可以粗略地解释为“在数据中寻找模式”)。

以下代码将其添加到我们的项目中:

classifier = classifier.fit(features, labels)  

3. 做出预测

对分类器进行训练后,最后一步是测试它,看看它能否对一种新的水果进行分类。我们将使用predict函数来进行预测。

假设这种新水果表面光滑,重 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的实践项目来学习专家如何构建改变世界的机器学习应用程序。

祝您机器学习学习愉快!

文章来源:https://dev.to/educationecosystem/a-simple-machine-learning-algorithm-to- Differentiate- Between-an-apple-and-an-orange-2bpk