📜  使用Python机器学习简介

📅  最后修改于: 2021-10-19 05:30:42             🧑  作者: Mango

机器学习是一种人工智能 (AI),它为计算机提供无需明确编程的学习能力。机器学习侧重于计算机程序的开发,这些程序在暴露于新数据时会发生变化。在本文中,我们将了解机器学习的基础知识,以及使用Python实现一个简单的机器学习算法。

设置环境

Python社区开发了许多模块来帮助程序员实现机器学习。在本文中,我们将使用 numpy、scipy 和 scikit-learn 模块。我们可以使用 cmd 命令安装它们:

pip install numpy scipy scikit-learn 

更好的选择是为Python下载 miniconda 或 anaconda 包,它们与这些包预捆绑在一起。按照此处给出的说明使用 anaconda。

机器学习概述

机器学习涉及使用给定数据集对计算机进行训练,并使用该训练来预测给定新数据的属性。例如,我们可以通过输入 1000 张猫的图像和 1000 张不是猫的图像来训练计算机,并每次告诉计算机一张图片是否为猫。那么如果我们给计算机展示一个新的图像,那么从上面的训练来看,计算机应该能够分辨出这个新图像是否是一只猫。
训练和预测的过程涉及使用专门的算法。我们将训练数据提供给算法,算法使用此训练数据对新的测试数据进行预测。其中一种算法是 K-Nearest-Neighbor 分类(KNN 分类)。它需要一个测试数据,并从测试数据集中找到与该数据最近的 k 个数据值。然后它选择频率最大的邻居并给出其属性作为预测结果。例如,如果训练集是:

petal_size flower_type
1 a
2 b
1 a
2 b
3 c
4 d
3 c
2 b
5 a

现在我们要预测大小为 2.5 厘米的花瓣的花型。所以如果我们决定不。的邻居(K)= 3,我们看到2.5的3个最近的邻居是1、2和3。它们的频率分别是2、3和2。因此最大频率的邻居为2,对应的花型为b。因此,对于大小为 2.5 的花瓣,预测将为 b 型花。

在 IRIS 数据集上使用Python实现 KNN-分类算法

这是一个演示 knn 分类算法的Python脚本。这里我们使用著名的鸢尾花数据集来训练计算机,然后给计算机一个新的值来对其进行预测。该数据集包含来自三种鸢尾属植物(Iris setosa、Iris virginica 和 Iris versicolor)中每一种的 50 个样本。从每个样本测量四个特征:萼片和花瓣的长度和宽度,以厘米为单位。
我们使用这个数据集训练我们的程序,然后使用这个训练来预测具有给定测量值的鸢尾花的种类。

请注意,此程序可能无法在 Geeksforgeeks IDE 上运行,但它可以在您的本地Python解释器上轻松运行,前提是您已安装所需的库。

# Python program to demonstrate
# KNN classification algorithm
# on IRIS dataser
  
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
import numpy as np
from sklearn.model_selection import train_test_split
  
iris_dataset=load_iris()
  
X_train, X_test, y_train, y_test = train_test_split(iris_dataset["data"], iris_dataset["target"], random_state=0)
  
kn = KNeighborsClassifier(n_neighbors=1)
kn.fit(X_train, y_train)
  
x_new = np.array([[5, 2.9, 1, 0.2]])
prediction = kn.predict(x_new)
  
print("Predicted target value: {}\n".format(prediction))
print("Predicted feature name: {}\n".format
    (iris_dataset["target_names"][prediction]))
print("Test score: {:.2f}".format(kn.score(X_test, y_test)))

输出:

Predicted target name: [0]Predicted feature name: ['setosa']Test score: 0.97

程序说明:

训练数据集

  • 第一行导入已经在 sklearn 模块中预定义的 iris 数据集。鸢尾花数据集基本上是一个表格,其中包含有关各种鸢尾花的信息。
  • 我们从 sklearn 和 numpy 模块中导入 kNeighborsClassifier 算法和 train_test_split 类以用于该程序。
  • 然后我们将 load_iris() 方法封装在 iris_dataset 变量中。此外,我们使用 train_test_split 方法将数据集划分为训练数据和测试数据。变量中的 X 前缀表示特征值(例如花瓣长度等),y 前缀表示目标值(例如,0 表示 setosa,1 表示 virginica,2 表示 versicolor)。
  • 该方法将数据集以 75:25 的比例随机分为训练数据和测试数据。然后我们将 KNeighborsClassifier 方法封装在 kn 变量中,同时保持 k=1 的值。该方法中包含 K 最近邻算法。
  • 在下一行,我们将我们的训练数据拟合到这个算法中,以便计算机可以使用这些数据进行训练。现在训练部分已经完成。

测试数据集

  • 现在我们在一个名为 x_new 的 numpy 数组中有一朵新花的维度,我们想预测这朵花的种类。我们使用 predict 方法执行此操作,该方法将这个数组作为输入并输出预测的目标值作为输出。
  • 所以预测的目标值是0,代表setosa。所以这朵花很有可能是 setosa 种。
  • 最后我们找到测试分数,它是 no 的比率。发现正确的预测和做出的全部预测。我们使用 score 方法来做到这一点,该方法基本上将测试集的实际值与预测值进行比较。

因此,我们看到了机器学习的工作原理,并开发了一个基本程序来使用Python的scikit-learn 模块来实现它。