机器学习是一种人工智能(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 |
---|---|
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模块中预定义的虹膜数据集。虹膜数据集基本上是一个表,其中包含有关各种鸢尾花的信息。
- 我们从sklearn和numpy模块导入kNeighborsClassifier算法和train_test_split类,以便在此程序中使用。
- 然后我们将load_iris()方法封装在iris_dataset变量中。此外,我们使用train_test_split方法将数据集划分为训练数据和测试数据。变量中的X前缀表示特征值(例如,花瓣长度等),y前缀表示目标值(例如,对于setosa为0,对于virginica为1,对于versicolor为2)。
- 该方法以75:25的比例随机将数据集划分为训练和测试数据。然后我们将kNeighborsClassifier方法封装在kn变量中,同时保持k = 1的值。该方法中包含K个最近邻算法。
- 在下一行中,我们将训练数据拟合到此算法中,以便计算机可以使用此数据进行训练。现在培训部分已经完成。
测试数据集
- 现在我们在一个名为x_new的numpy数组中有一个新花的尺寸,我们想要预测这种花的种类。我们使用预测方法执行此操作,该方法将此数组作为输入并将预测目标值作为输出吐出。
- 所以预测的目标值为0,代表setosa。所以这朵花有很好的机会成为setosa物种。
- 最后我们发现测试分数是no的比率。预测发现正确和完全预测。我们使用得分方法来做到这一点,该方法基本上将测试集的实际值与预测值进行比较。
因此,我们看到了机器学习是如何工作的,并开发了一个基本程序来使用python中的scikit-learn模块来实现它。
注:本文系翻译