介绍
机器学习是计算机科学,人工智能和统计学的研究领域。 机器学习的重点是训练算法来学习模式并从数据中做出预测。 机器学习特别有价值,因为它使我们能够使用计算机来自动执行决策过程。
你会发现机器学习应用无处不在。 Netflix和Amazon使用机器学习来制作新产品的建议。 银行使用机器学习来检测信用卡交易中的Cheat活动,医疗保健公司开始使用机器学习来监测,评估和诊断患者。
在本教程中,您将使用Scikit学习 (一种用于Python的机器学习工具)在Python中实现简单的机器学习算法。 使用乳腺癌肿瘤信息数据库,您将使用一种预测肿瘤是恶性还是良性的朴素贝叶斯(NB)分类器。
在本教程结束之前,您将了解如何在Python中构建自己的机器学习模型。
先决条件
要完成本教程,您将需要:
- Python 3和本地编程环境设置在您的计算机上。 您可以按照相应的安装并设置操作系统指南来进行配置。
- 如果您是Python的新手,您可以在Python 3中探索如何编写代码来熟悉该语言。
- Jupyter Notebook安装在本教程的virtualenv中。 Jupyter笔记本在运行机器学习实验时非常有用。 您可以运行较短的代码块,并快速查看结果,从而轻松测试和调试代码。
第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
模块:
import sklearn
您的笔记本应如下图所示:
现在我们已经在笔记本中输入了sklearn
,我们可以开始使用我们的机器学习模型的数据集。
第2步 - 导入Scikit学习的数据集
我们将在本教程中使用的数据集是乳腺癌威斯康星诊断数据库 。 该数据集包括关于乳腺癌肿瘤的各种信息,以及恶性或良性的分类标记。 该数据集在569个肿瘤上具有569个实例或数据,并包括关于30个属性或特征的信息,例如肿瘤的半径,纹理,平滑度和面积。
使用这个数据集,我们将建立一个机器学习模型,使用肿瘤信息来预测肿瘤是恶性还是良性。
Scikit-learn安装了各种数据集,我们可以加载到Python中,并且包含我们想要的数据集。 导入并加载数据集:
...
from sklearn.datasets import load_breast_cancer
# Load dataset
data = load_breast_cancer()
data
变量表示一个类似于字典的Python对象。 要考虑的重要字典键是分类标签名称( target_names
),实际标签( target
),属性/功能名称( feature_names
)和属性( data
)。
属性是任何分类器的关键部分。 属性捕获关于数据性质的重要特征。 鉴于我们试图预测(恶性与良性肿瘤)的标签,可能的有用属性包括肿瘤的大小,半径和质地。
为每个重要信息集创建新变量并分配数据:
...
# 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(labels[0])
print(feature_names[0])
print(features[0])
如果您运行代码,您将看到以下结果:
如图所示,我们的类名称是恶性和良性的 ,然后将其映射到0
和1
二进制值,其中0
表示恶性肿瘤, 1
表示良性肿瘤。 因此,我们的第一个数据实例是一个恶性肿瘤, 平均半径为1.79900000e+01
。
现在我们已经加载了我们的数据,我们可以使用我们的数据来构建我们的机器学习分类器。
第3步 - 将数据组织成集合
为了评估分类器的性能,您应该始终对未知数据进行模型测试。 因此,在构建模型之前,将数据分为两部分: 训练集和测试集 。
在开发阶段,您将使用培训机构对模型进行培训和评估。 然后,您可以使用经过训练的模型对未知测试集进行预测。 这种方法使您了解模型的性能和鲁棒性。
幸运的是, sklearn
有一个名为train_test_split()
的函数,它将您的数据分成这些集合。 导入该功能,然后使用它来拆分数据:
...
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_labels
和test_labels
。
我们现在可以继续训练我们的第一个模型。
第4步 - 建立和评估模型
有很多机器学习模式,每个模型都有自己的优点和缺点。 在本教程中,我们将重点介绍通常在二进制分类任务(即朴素贝叶斯(NB))中表现良好的简单算法。
首先,导入GaussianNB
模块。 然后用GaussianNB()
函数初始化模型,然后通过使用gnb.fit()
将其拟合到数据来训练模型:
...
from sklearn.naive_bayes import GaussianNB
# Initialize our classifier
gnb = GaussianNB()
# Train our classifier
model = gnb.fit(train, train_labels)
在我们训练模型之后,我们可以使用经过训练的模型来对我们的测试集进行预测,我们使用predict()
函数。 predict()
函数返回测试集中每个数据实例的预测数组。 我们可以打印我们的预测,以了解模型的确定。
在test
集中使用predict()
函数并打印结果:
...
# Make predictions
preds = gnb.predict(test)
print(preds)
运行代码,您将看到以下结果:
如Jupyter Notebook输出中所示, predict()
函数返回一个0
s和1
s的数组,代表肿瘤类别(恶性与良性)的预测值。
现在我们有了我们的预测,我们来评估我们的分类器的表现。
第5步 - 评估模型的准确性
使用真正的类标签数组,我们可以通过比较两个数组( test_labels
与preds
)来评估模型预测值的准确性。 我们将使用sklearn
函数sklearn
accuracy_score()
来确定我们的机器学习分类器的准确性。
...
from sklearn.metrics import accuracy_score
# Evaluate accuracy
print(accuracy_score(test_labels, preds))
您会看到以下结果:
如输出中所示,NB分类器的准确度为94.15%。 这意味着94.15%的分类器能够对肿瘤是恶性还是良性进行正确的预测。 这些结果表明,我们的30个属性的特征集是肿瘤类的良好指标。
您已经成功构建了您的第一台机器学习分类器。 我们通过将所有import
语句放在Notebook或脚本的顶部来重组代码。 代码的最终版本应如下所示:
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中使用自己的数据的过程。