Python 构建机器学习分类器的7个简单步骤

Python 构建机器学习分类器的7个简单步骤

机器学习(ML)是人工智能(AI)的一个分支,不再只是一个流行词。它正在不断增长,并有望成为未来十年最具变革性的技术。机器学习已经在社会上产生了一些影响,例如自动驾驶汽车、欺诈检测系统和肿瘤检测。

机器学习也成为我们日常生活的一部分。从Siri、Alexa和Google助手等语音助手到优化的音乐、电影、新闻和购物推荐,以及智能搜索,我们所使用的一切都直接或间接受到机器学习的影响。

如果您想了解更多关于机器学习基础知识的信息,请查看机器学习教程。

分类是一种监督式机器学习的任务,它是指将标签值分配给一个特定的类别,并将其识别为某一种类型。从数学上讲,分类是一种从输入变量到输出变量的映射函数(f)的近似任务。机器学习分类的一个最基本的例子是电子邮件垃圾邮件过滤系统,可以将电子邮件分类为“垃圾邮件”或“非垃圾邮件”。

在本文中,我们将使用7个简单的步骤,在Python编程语言中使用Breast Cancer Wisconsin Diagnostic Dataset来构建一个机器学习分类器。我们将使用一个朴素贝叶斯(NB)分类器,用于预测乳腺癌肿瘤是恶性还是良性。

想要构建分类器!那么,让我们开始吧。

第1步:导入Python的机器学习库

要开始在Python中创建机器学习分类器,我们需要一个Python的机器学习库。在这里,我们将使用Scikit-learn,这是一个最好的开源机器学习库之一。使用以下命令导入它:

import sklearn

如果您的计算机上安装了Scikit-learn,则上述命令将不会出现任何错误。如果未安装,则会收到类似以下给出的错误消息 —

Traceback (most recent call last): File "<string>", line 1, in <module> ImportError: No module named 'sklearn'

您可以使用以下pip命令下载Python机器学习库 –

pip install -U scikit-learn

第2步:导入数据集

为了构建我们的分类器,我们将使用Sklearn的“乳腺癌威斯康星数据集”,该数据集被广泛用于分类目的。它包含569个实例,具有30个数值预测属性,例如肿瘤的半径、质地、周长、面积、对称性、光滑度等。它还包含两个分类标签,即恶性或良性。

使用这个数据集,我们的分类器将预测乳腺癌肿瘤是恶性还是良性。

让我们导入并加载这个数据集-

# Import dataset
from sklearn.datasets import load_breast_cancer
# Load dataset
data_BreastCancer = load_breast_cancer()

上面我们创建的 data_BreastCancer 变量就像一个字典。有四个重要的字典键需要考虑:

  • 分类标签名称(target_names)

  • 实际标签(target)

  • 特征名称(feature_names)

  • 属性(data)

现在我们需要根据这些键创建新的变量并分配数据。

# Organizing the data
label_names = data_BreastCancer['target_names']
labels = data_BreastCancer['target']
feature_names = data_BreastCancer['feature_names']
features = data_BreastCancer['data']

为了更好地理解数据集,让我们打印类别标签、前五十个数据实例的标签、特征名称以及第一个数据实例的特征值-

# Look at the data
print('\nClass Labels:',label_names)
print('\nFirst Fifty Data Instance Labels:',labels[:50])
print('\nFeature Names:',feature_names)
print('\nFeature Values for First Data Instance:',features[0])

输出

如果您运行代码,您将获得以下输出:

Class Labels: ['malignant' 'benign']

First Fifty Data Instance Labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
 1 0 0 0 0 0 0 0 0 1 0 1 1]

Feature Names: ['mean radius' 'mean texture' 'mean perimeter' 'mean area'
 'mean smoothness' 'mean compactness' 'mean concavity'
 'mean concave points' 'mean symmetry' 'mean fractal dimension'
 'radius error' 'texture error' 'perimeter error' 'area error'
 'smoothn1ess error' 'compactness error' 'concavity error'
 'concave points error' 'symmetry error' 'fractal dimension error'
 'worst radius' 'worst texture' 'worst perimeter' 'worst area'
 'worst smoothness' 'worst compactness' 'worst concavity'
 'worst concave points' 'worst symmetry' 'worst fractal dimension']

Feature Values for First Data Instance: [1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01
 1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02
 6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01
 1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01
 4.601e-01 1.189e-01]

如上所示,我们的类名是恶性的,映射为二进制值0,和良性的,映射为二进制值1。 它还显示了我们的第一个数据实例是一个恶性肿瘤,其平均半径是1.799e + 01。 现在我们已经加载了数据,我们可以将这些数据用于构建我们的机器学习分类器。让我们在下一步中看看如何操作。

第3步:将数据组织成训练和测试集

为了评估机器学习模型的准确性,通常建议在未见数据上测试模型。 这就是为什么我们首先将我们的数据分为训练集和测试集的原因。 Scikit-learn库有一个train_test_split()函数,我们可以使用它将数据分成这些集合

from sklearn.model_selection import train_test_split
# Split the data into training and test set
train, test, train_labels, test_labels = train_test_split(features,labels,test_size=0.40,random_state=42)

在这个例子中,我们现在有一个训练集,表示原始数据集的60%,以及一个测试集,表示原始数据集的40%。

现在,是时候构建和训练分类模型了。

第4步:构建模型

为了构建我们的机器学习分类器,我们将使用一个简单的算法,名为朴素贝叶斯(Naïve Bayes),在二元分类任务中表现良好。Scikit-learn为我们提供了三种朴素贝叶斯模型,分别是:

  • 高斯朴素贝叶斯 - 它基于一个由均值和方差特征的连续分布。

  • 多项式朴素贝叶斯 - 它假设一个特征向量,其中每个元素表示它出现的次数。

  • 伯努利朴素贝叶斯 - 它是一个二元算法。在需要检查一个特征是否存在时非常有用。

由于我们将使用高斯朴素贝叶斯模型,所以我们首先需要从Sklearn导入GaussianNB模块,然后用GaussianNB()函数初始化模型。

# Import GaussianNB module
from sklearn.naive_bayes import GaussianNB
# Initializing our classifier model
Gaussian_NB = GaussianNB()

第5步:训练模型

我们现在需要通过使用fit()函数将分类器拟合到数据上来训练模型。

# Train the classifier
NB_Clf = Gaussian_NB.fit(train,train_labels)

第6步:在测试集上进行预测

一旦我们训练了分类器模型,我们就可以使用它来对我们的测试集进行预测。我们使用predict()函数,该函数返回测试集中每个数据实例的预测数组。

让我们使用predict()函数并打印出预测结果-

示例

# Making predictions on the test set
Preds_NBClf = NB_Clf.predict(test)
# Print the predictions
print(Preds_NBClf)

输出

如果您运行代码,您将得到以下输出-

[1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0
 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0
 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0
 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0
 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0
 0 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1
 0 0 1 1 0 1]

上面的输出,一个由0和1组成的数组,表示肿瘤类别(即恶性和良性)的预测值。

第7步:评估分类器准确性

在这一步中,我们通过比较两个数组test_labels和Preds_NBClf来评估ML分类器的准确性。幸运的是,为了预测准确性,Sklearn库提供了一个名为accuracy_score()的函数。

示例

# Import accuracy_score module 
from sklearn.metrics import accuracy_score
# Evaluating the accuracy of our classifier
print('Accuracy:',accuracy_score(test_labels, Preds_NBClf))

输出

你将得到以下输出-

Accuracy:0.9517543859649122

以上输出结果显示,我们的朴素贝叶斯分类器准确率为95.18%,这意味着在95.18%的情况下,我们的分类器对肿瘤的预测是正确的。

结论

在本文中,通过7个简单的步骤,您学习了如何在Python编程语言中构建一个机器学习分类器。通过这些步骤,您现在可以加载数据集,组织数据,训练机器学习模型,预测测试集的结果,并评估分类器的准确性。

您现在可以尝试使用不同的特征子集进行实验,或者甚至尝试其他两种朴素贝叶斯模型(多项式和伯努利),以及其他各种机器学习算法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程