codecamp

AI人工智能 在Python中构建分类器的步骤

本章我们将重点讲解监督学习的实现——分类任务。

分类技术或分类模型会通过观测值推导结论,在分类问题中,模型的输出是离散的类别,比如黑色/白色、教学岗/非教学岗。构建分类模型时,我们需要包含数据点及对应标签的训练数据集。例如,若要判断一张图片是否是汽车,我们需要构建包含“是汽车”和“非汽车”两个类别的训练集,再利用训练样本对模型进行训练。分类模型主要应用于人脸识别、垃圾邮件识别等场景。

Python中构建分类器的步骤

我们将使用Python 3和机器学习工具Scikit-learn构建分类器,具体步骤如下:

步骤1:导入Scikit-learn库

这是构建Python分类器的第一步,首先需要安装并导入Scikit-learn库——它是Python中最优秀的机器学习模块之一,导入命令如下:

import sklearn

步骤2:导入Scikit-learn的数据集

这一步我们开始为机器学习模型准备数据集,本文将使用威斯康星州乳腺癌诊断数据库。该数据集包含乳腺癌肿瘤的各类相关信息,以及肿瘤“恶性”或“良性”的分类标签,共记录了569个肿瘤样本的信息,包含肿瘤半径、纹理、平滑度、面积等30个特征属性。 通过以下命令导入该数据集:

from sklearn.datasets import load_breast_cancer

执行下述命令加载数据集:

data = load_breast_cancer()

该数据集为字典格式,包含以下核心键值:

  • 分类标签名(target_names)
  • 实际标签值(target)
  • 特征属性名(feature_names)
  • 特征属性值(data)

我们可以通过下述命令为各类核心信息创建新变量,实现数据的规整化:

label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

为了更直观地理解数据,我们可以打印出类别标签、第一个样本的标签、特征名和第一个样本的特征值,命令如下:

print(label_names)

上述命令的输出结果为肿瘤的两个类别,分别是恶性和良性:

['malignant' 'benign']

执行下述命令可以看到,类别标签被映射为0和1两个二进制值,其中0代表恶性肿瘤,1代表良性肿瘤:

print(labels[0])

输出结果:

0

执行以下两条命令可分别输出特征名和特征值:

print(feature_names[0])

输出结果:

mean radius

print(features[0])

输出结果:

[1.79900000e+01 1.03800000e+01 1.22800000e+02 1.00100000e+03
 1.18400000e-01 2.77600000e-01 3.00100000e-01 1.47100000e-01
 2.41900000e-01 7.87100000e-02 1.09500000e+00 9.05300000e-01
 8.58900000e+00 1.53400000e+02 6.39900000e-03 4.90400000e-02
 5.37300000e-02 1.58700000e-02 3.00300000e-02 6.19300000e-03
 2.53800000e+01 1.73300000e+01 1.84600000e+02 2.01900000e+03
 1.62200000e-01 6.65600000e-01 7.11900000e-01 2.65400000e-01
 4.60100000e-01 1.18900000e-01]

从输出结果可以看出,第一个样本为恶性肿瘤,其平均半径为17.99。

步骤3:划分数据集

这一步我们将数据集划分为训练集和测试集,这一步至关重要,因为我们需要用未见过的测试集验证模型的泛化能力。Scikit-learn提供了train_test_split()函数实现数据集划分,命令如下:

from sklearn.model_selection import train_test_split

执行下述命令完成划分,本文中我们将40%的数据作为测试集,剩余60%作为训练集:

train, test, train_labels, test_labels = train_test_split(features,labels, test_size =0.40, random_state = 42)

步骤4:构建模型

本文将使用朴素贝叶斯算法构建分类模型,相关实现命令如下: 首先导入高斯朴素贝叶斯模块:

from sklearn.naive_bayes import GaussianNB

初始化模型:

gnb = GaussianNB()

通过gnb.fit()函数将模型与训练数据拟合,完成模型训练:

model = gnb.fit(train, train_labels)

步骤5:模型评估与准确率计算

这一步我们将利用测试集对模型进行预测,并计算模型的准确率。通过predict()函数实现预测,命令如下:

preds = gnb.predict(test)
print(preds)

输出结果为一串由0和1组成的数组,分别对应测试集中肿瘤样本的“恶性”和“良性”预测结果:

[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 1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 1 1 1 1 1
 0 0 1 1 1 0 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1]

通过对比test_labels(测试集真实标签)和preds(测试集预测标签)两个数组,我们可以计算模型的准确率。本文使用accuracy_score()函数完成该计算,命令如下:

from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels, preds))

输出结果:

0.951754385965

结果表明,该朴素贝叶斯分类器的预测准确率为95.17%。

通过以上五个步骤,我们就完成了Python分类器的构建。

AI人工智能 标记数据
AI人工智能 在Python中构建分类器
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

AI人工智能监督学习(回归)

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }