使用Python进行机器学习简介

 机器学习是一种人工智能(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_SIZEFLOWER
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模块来实现它。
注:本文系翻译

posted @ 2019-01-22 16:15  24小时编程自习室  阅读(912)  评论(0编辑  收藏  举报