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

一个简单的 Python 机器学习项目

一个简单的 Python 机器学习项目

机器学习是人工智能领域一个蓬勃发展的方向。它的目标是使计算机系统能够从数据中学习模式,并利用这些经验进行预测,而无需任何直接的人工干预。

来自德国的经验丰富的机器学习专家AndreyBu喜欢把自己的技能传授给其他人,他说:“机器学习的好处在于,它让我们有机会训练算法自动做出决策,而这通常需要人工操作,而且非常耗时。”

本文将用 Python3 演示一个简单的分类机器学习算法。我们将使用 Scikit-learn,这是一个简单、通用且开源的 Python 应用程序机器学习框架。

此外,我们将使用鸢尾花数据集,这是一个流行的数据集,可用于理解机器学习的概念。

理解问题和数据

鸢尾花数据集(已集成到 Scikit-learn 中)包含 150 条记录。它包含三种鸢尾花——山鸢尾(标记为 0)、变色鸢尾(标记为 1)和维吉尼亚鸢尾(标记为 2)——它们具有以下数值属性(单位为厘米):

  • 花瓣宽度
  • 花瓣长度
  • 萼片宽度
  • 萼片长度

我们的机器学习算法的目标是根据这些特征预测花卉的种类。我们将训练模型,使其能够基于这些特征从数据集中学习模式。

让我们开始动手实践吧(我们将使用 Anaconda Python 发行版)。

Iris 数据集是 Scikit-learn 自带的,我们可以按如下方式加载它。

from sklearn import datasets
Enter fullscreen mode Exit fullscreen mode

让我们看看能否从数据集中提取出鸢尾花的一些特征。

iris = datasets.load_iris()
digits = datasets.load_digits()
Enter fullscreen mode Exit fullscreen mode

需要注意的是,数据集是一个类似字典的对象,它保存了所有关于数据的信息。这些数据存储在.data键(一个数组列表)中。

而且,在处理像这样的监督问题时,可以将一些答案保留在.target列表中。

例如,对于数字数据集,我们可以使用digits.data特征来了解数字样本的分类特征。

以下是代码和输出结果。

print(digits.data)
Enter fullscreen mode Exit fullscreen mode

Python机器学习

此外,digits.target它还能让我们更清楚地了解我们想要学习的内容。

print(digits.target)
Enter fullscreen mode Exit fullscreen mode

digits.target python

iris.data我们还可以使用(给出数据数组)和iris.target(给出标签数组)来查看数据。

你会注意到每个条目都有四个属性。

iris.data
Enter fullscreen mode Exit fullscreen mode

iris.data

iris.target
Enter fullscreen mode Exit fullscreen mode

iris.target

iris.target_names这将给我们一个标签名称数组;也就是说,数据集中的三种花卉物种。

iris.target_names

iris.target_names

此外,我们还可以使用箱线图来生成数据集的可视化表示。

它将向我们展示我们的数据是如何在平面上分散的;使用它们的四分位数。

以下是代码。

import seaborn as sns
iris_data = iris.data #variable for array of the data
iris_target = iris.target #variable for array of the labels
sns.boxplot(data = iris_data,width=0.5,fliersize=5)
sns.set(rc={'figure.figsize':(1,10)})
Enter fullscreen mode Exit fullscreen mode

以下是输出结果。

箱线图机器学习

以下是数据在横轴上的表示方式。

  • 0 为萼片长度(厘米)
  • 1 为萼片宽度(厘米)
  • 2 为花瓣长度(厘米)
  • 3是花瓣宽度(厘米)

培训和测试

在了解了数据详情之后,我们现在可以使用算法来训练预测模型。因此,我们需要将数据分成两组:训练集和测试集。

通过对一部分数据进行训练,并对机器学习模型从未接触过的另一组数据进行测试,可以帮助我们确保算法能够识别数据集中的模式,从而提高预测的准确性。

在这种情况下,我们将保留最后15组数据用于测试,其余数据用于训练。因此,我们将基于训练集训练算法,并基于测试集进行预测。

让我们来看一些实现方法的代码。

import numpy as np
from sklearn import tree
iris_test_ids = np.random.permutation(len(iris_data)) #randomly splitting the data set
#splitting and leaving last 15 entries for testing, rest for training
iris_train_one = iris_data[iris_test_ids[:-15]]
iris_test_one = iris_data[iris_test_ids[-15:]]
iris_train_two = iris_target[iris_test_ids[:-15]]
iris_test_two = iris_target[iris_test_ids[-15:]]
iris_classify = tree.DecisionTreeClassifier()#using the decision tree for classification
iris_classify.fit(iris_train_one, iris_train_two) #training or fitting the classifier using the training set
iris_predict = iris_classify.predict(iris_test_one) #making predictions on the test dataset
Enter fullscreen mode Exit fullscreen mode

查看结果

因为我们是随机分割数据集,并且分类器在每次迭代后都会进行训练,所以每次运行代码时,我们可能会得到不同的准确率。

以下是查看结果的代码。

from sklearn.metrics import accuracy_score
print(iris_predict) #lables predicted (flower species)
print (iris_test_two) #actual labels
print (accuracy_score(iris_predict, iris_test_two)*100) #accuracy metric
Enter fullscreen mode Exit fullscreen mode

以下是输出结果。

随机分割数据集进行分类器训练

上述输出的第一行给出了测试数据的标签;也就是说,根据分类器的预测,给出了花卉种类。

第二行给出了数据集中包含的实际物种。最后一行给出了精度百分比。在本例中,我们得到的准确率为 86.67%。

还不错!

结论

以下是整个项目的代码。

from sklearn import datasets
import seaborn as sns
import numpy as np
from sklearn import tree
from sklearn.metrics import accuracy_score

iris = datasets.load_iris()
digits = datasets.load_digits()
print(digits.data)
print(digits.target)
print(iris.data)
print(iris.target)
print(iris.target_names)

iris_data = iris.data #variable for array of the data
iris_target = iris.target #variable for array of the labels
sns.boxplot(data = iris_data,width=0.5,fliersize=5)
sns.set(rc={'figure.figsize':(1,10)})

iris_test_ids = np.random.permutation(len(iris_data)) #randomly splitting the data set
#splitting and leaving last 15 entries for testing, rest for training
iris_train_one = iris_data[iris_test_ids[:-15]]
iris_test_one = iris_data[iris_test_ids[-15:]]
iris_train_two = iris_target[iris_test_ids[:-15]]
iris_test_two = iris_target[iris_test_ids[-15:]]
iris_classify = tree.DecisionTreeClassifier()#using the decision tree for classification
iris_classify.fit(iris_train_one, iris_train_two) #training or fitting the classifier using the training set
iris_predict = iris_classify.predict(iris_test_one) #making predictions on the test dataset

print(iris_predict) #labels predicted (flower species)
print (iris_test_two) #actual labels
print (accuracy_score(iris_predict, iris_test_two)*100) #accuracy metric
Enter fullscreen mode Exit fullscreen mode

本文中,我们用 Python 演示了一个简单的机器学习项目。

为了提高你的机器学习知识,你需要完成这样的项目。

更好的是,您可以从LiveEdu等网站上选择其他高级项目,提高您在机器学习方面的专业知识。

祝您机器学习学习愉快!

文章来源:https://dev.to/educationecosystem/a-simple-machine-learning-project-in-python-5d11