如何使用Scikit学习在Python中构建机器学习分类器

介绍

机器学习是计算机科学,人工智能和统计学的研究领域。 机器学习的重点是训练算法来学习模式并从数据中做出预测。 机器学习特别有价值,因为它使我们能够使用计算机来自动执行决策过程。

你会发现机器学习应用无处不在。 Netflix和Amazon使用机器学习来制作新产品的建议。 银行使用机器学习来检测信用卡交易中的Cheat活动,医疗保健公司开始使用机器学习来监测,评估和诊断患者。

在本教程中,您将使用Scikit学习 (一种用于Python的机器学习工具)在Python中实现简单的机器学习算法。 使用乳腺癌肿瘤信息数据库,您将使用一种预测肿瘤是恶性还是良性的朴素贝叶斯(NB)分类器。

在本教程结束之前,您将了解如何在Python中构建自己的机器学习模型。

先决条件

要完成本教程,您将需要:

第1步 - 导入Scikit学习

我们开始安装Python模块Scikit学习 ,这是Python中最好和最有说明力的机器学习库之一。

要开始我们的编码项目,让我们激活我们的Python 3编程环境。 确保您位于您的环境所在的目录中,并运行以下命令:

. my_env/bin/activate

在我们的编程环境激活后,检查Sckikit学习模块是否已经安装:

python -c "import sklearn"

如果安装了sklearn ,此命令将完成,没有任何错误。 如果没有安装,您将看到以下错误消息:

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

错误信息表示没有安装sklearn ,所以使用pip下载库:

pip install scikit-learn[alldeps]

安装完成后,启动Jupyter Notebook:

jupyter notebook

在Jupyter中,创建一个名为ML Tutorial的新Python笔记本。 在笔记本的第一个单元格中, 导入 sklearn模块:

ML教程
import sklearn

您的笔记本应如下图所示:

Jupyter笔记本有一个Python单元格,它导入sklearn

现在我们已经在笔记本中输入了sklearn ,我们可以开始使用我们的机器学习模型的数据集。

第2步 - 导入Scikit学习的数据集

我们将在本教程中使用的数据集是乳腺癌威斯康星诊断数据库 该数据集包括关于乳腺癌肿瘤的各种信息,以及恶性良性的分类标记。 该数据集在569个肿瘤上具有569个实例或数据,并包括关于30个属性或特征的信息,例如肿瘤的半径,纹理,平滑度和面积。

使用这个数据集,我们将建立一个机器学习模型,使用肿瘤信息来预测肿瘤是恶性还是良性。

Scikit-learn安装了各种数据集,我们可以加载到Python中,并且包含我们想要的数据集。 导入并加载数据集:

ML教程
...

from sklearn.datasets import load_breast_cancer

# Load dataset
data = load_breast_cancer()

data 变量表示一个类似于字典的Python对象。 要考虑的重要字典键是分类标签名称( target_names ),实际标签( target ),属性/功能名称( feature_names )和属性( data )。

属性是任何分类器的关键部分。 属性捕获关于数据性质的重要特征。 鉴于我们试图预测(恶性与良性肿瘤)的标签,可能的有用属性包括肿瘤的大小,半径和质地。

为每个重要信息集创建新变量并分配数据:

ML教程
...

# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

我们现在有各种信息的列表 为了更好地了解我们的数据集,我们来看看我们的数据,打印我们的类标签,第一个数据实例的标签,我们的功能名称和第一个数据实例的特征值:

ML教程
...

# Look at our data
print(label_names)
print(labels[0])
print(feature_names[0])
print(features[0])

如果您运行代码,您将看到以下结果:

具有三个Python单元格的Alt Jupyter Notebook,它将打印数据集中的第一个实例

如图所示,我们的类名称是恶性良性的 ,然后将其映射到01二进制值,其中0表示恶性肿瘤, 1表示良性肿瘤。 因此,我们的第一个数据实例是一个恶性肿瘤, 平均半径1.79900000e+01

现在我们已经加载了我们的数据,我们可以使用我们的数据来构建我们的机器学习分类器。

第3步 - 将数据组织成集合

为了评估分类器的性能,您应该始终对未知数据进行模型测试。 因此,在构建模型之前,将数据分为两部分: 训练集测试集

在开发阶段,您将使用培训机构对模型进行培训和评估。 然后,您可以使用经过训练的模型对未知测试集进行预测。 这种方法使您了解模型的性能和鲁棒性。

幸运的是, sklearn有一个名为train_test_split()的函数,它将您的数据分成这些集合。 导入该功能,然后使用它来拆分数据:

ML教程
...

from sklearn.model_selection import train_test_split

# Split our data
train, test, train_labels, test_labels = train_test_split(features,
                                                          labels,
                                                          test_size=0.33,
                                                          random_state=42)

该函数使用test_size参数随机分割数据。 在这个例子中,我们现在有一个测试集( test ),它代表原始数据集的33%。 剩下的数据( train )然后组成训练数据。 我们还有列车/测试变量的相应标签,即train_labelstest_labels

我们现在可以继续训练我们的第一个模型。

第4步 - 建立和评估模型

有很多机器学习模式,每个模型都有自己的优点和缺点。 在本教程中,我们将重点介绍通常在二进制分类任务(即朴素贝叶斯(NB))中表现良好的简单算法。

首先,导入GaussianNB模块。 然后用GaussianNB()函数初始化模型,然后通过使用gnb.fit()将其拟合到数据来训练模型:

ML教程
...

from sklearn.naive_bayes import GaussianNB

# Initialize our classifier
gnb = GaussianNB()

# Train our classifier
model = gnb.fit(train, train_labels)

在我们训练模型之后,我们可以使用经过训练的模型来对我们的测试集进行预测,我们使用predict()函数。 predict()函数返回测试集中每个数据实例的预测数组。 我们可以打印我们的预测,以了解模型的确定。

test集中使用predict()函数并打印结果:

ML教程
...

# Make predictions
preds = gnb.predict(test)
print(preds)

运行代码,您将看到以下结果:

Jupyter笔记本与Python单元格,在我们的测试数据上打印朴素贝叶斯分类器的预测值

如Jupyter Notebook输出中所示, predict()函数返回一个0 s和1 s的数组,代表肿瘤类别(恶性与良性)的预测值。

现在我们有了我们的预测,我们来评估我们的分类器的表现。

第5步 - 评估模型的准确性

使用真正的类标签数组,我们可以通过比较两个数组( test_labelspreds )来评估模型预测值的准确性。 我们将使用sklearn函数sklearn accuracy_score()来确定我们的机器学习分类器的准确性。

ML教程
...

from sklearn.metrics import accuracy_score

# Evaluate accuracy
print(accuracy_score(test_labels, preds))

您会看到以下结果:

Alt Jupyter笔记本与Python单元格打印我们的NB分类器的准确性

如输出中所示,NB分类器的准确度为94.15%。 这意味着94.15%的分类器能够对肿瘤是恶性还是良性进行正确的预测。 这些结果表明,我们的30个属性的特征集是肿瘤类的良好指标。

您已经成功构建了您的第一台机器学习分类器。 我们通过将所有import语句放在Notebook或脚本的顶部来重组代码。 代码的最终版本应如下所示:

ML教程

from sklearn.datasets import load_breast_cancer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import GaussianNB
from sklearn.metrics import accuracy_score

# Load dataset
data = load_breast_cancer()

# Organize our data
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']

# Look at our data
print(label_names)
print('Class label = ', labels[0])
print(feature_names)
print(features[0])

# Split our data
train, test, train_labels, test_labels = train_test_split(features,
                                                          labels,
                                                          test_size=0.33,
                                                          random_state=42)

# Initialize our classifier
gnb = GaussianNB()

# Train our classifier
model = gnb.fit(train, train_labels)

# Make predictions
preds = gnb.predict(test)
print(preds)

# Evaluate accuracy
print(accuracy_score(test_labels, preds))

现在,您可以继续使用代码来查看是否可以使您的分类器执行得更好。 您可以尝试不同的功能子集,甚至尝试完全不同的算法。 查看Scikit学习的网站了解更多的机器学习想法。

结论

在本教程中,您学习了如何在Python中构建机器学习分类器。 现在,您可以使用Scikit学习在Python中加载数据,组织数据,训练,预测和评估机器学习分类器。 本教程中的步骤应该有助于您在Python中使用自己的数据的过程。

赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏