使用Scikit-Learn进行癌症细胞分类
机器学习是人工智能的一个领域,它探讨了计算机如何在不需要明确教导的情况下学习。因此,机器学习可以帮助解决许多现实世界的问题。
为了确定癌细胞是malignant 还是benign, ,我们必须检查它们的物理特性,我们可以用这些特性来识别它们。一个机器学习问题将使用Scikit-learn 。Scikit-learn是一个Python框架,是一个用于机器学习、机器挖掘和数据分析的免费和开源的工具。
前提条件
- 使用Scikit-learn将是我们项目的必要条件。
- 本项目首选Jupyter笔记本。但是,你可以自由地使用你选择的任何IDE。
- 本教程将使用乳腺癌威斯康星州(诊断)数据集。因此,请确保它已被加载。
Naive Bayes算法
尽管它很简单,但奈何贝叶斯是一种预测结果的稳健算法。在Naive Bayes中,每个输入变量都被假定是独立的,这就是为什么它被命名为naive。在现实中,这是一个很大的假设,而且该技术在广泛的挑战性任务中运作良好。此外,当独立假设成立时,天真贝叶斯分类器比其他模型(如逻辑回归)表现得更好,而且你需要的训练数据更少。
当你需要使用分类输入变量时,与数字变量相比,它的表现良好。因此,本教程将选择这种流行的二元分类方法,即所谓的Naive Bayes,供本教程使用。
Naive Bayes分类法的优点
- 使用它很容易上手。
- 训练时需要的训练数据较少。
- 也支持连续和离散的数据。
- 预测器和数据点的数量可以无限增加,使它非常灵活,适应性强。
- 它是快速的,可以用来进行实时预测。
Naive Bayes分类法的缺点
- 在Naive Bayes中,所有预测因子(或性状)都被假定为是独立的。然而,现实中很少有这种情况。这种技术使用了零频率问题,以避免将零概率分配给一个分类变量,其类别在训练数据集中无法获得。零频率表示的只是一个连续的术语,没有波浪,没有峰值通过。
安装
请在命令提示符下运行以下一行,在你的电脑上下载并安装scikit-learn。
pip install scikit-learn
对于这个项目,鼓励使用Jupyter笔记本,尽管你可以使用任何你选择的IDE。与其从头开始开发整个脚本,不如执行几行代码,逐一看看会发生什么,而不是编写整个脚本并运行它。
要安装jupyter notebook,使用命令行并输入以下代码。
pip install jupyter
数据集
我们将使用Python编程语言的scikit-learn库,根据癌细胞的特征进行分类,并识别它们是恶性还是良性。我们将使用乳腺癌威斯康星州的数据集来解决我们的机器学习问题。
该数据集和它们各自的分类标签包括恶性和良性乳腺癌肿瘤。该数据集有569个肿瘤,包括一个肿瘤的30个属性的数据,我们将用它来训练我们的模型。我们可以使用load_breast_cancer() 函数来加载它。
用Scikit-learn框架实现的分类
1.将所需的模块和数据添加到导入中
作为第一步,Scikit-learn和乳腺癌威斯康星州(诊断)数据集将被导入我们的程序中。
import sklearn
from sklearn.datasets import load_breast_cancer
2.从数据集中创建一个变量
我们必须考虑标签、分类标签、特征含义以及要从这个数据集中学习的数据。
data = load_breast_cancer()
我们已经将乳腺癌数据集加载到data 变量中。
3.安排和分析数据
在我们能够学习如何训练我们的模型之前,我们需要组织数据。然后,我们可以使用print() 函数来查看它包含的内容。
# Organizing our data
namesForlabels = data['target_names']
ourlabels = data['target']
namesForfeature = data['feature_names']
ourfeatures = data['data']
然后,你可以使用print() 函数来检查这些数据。
print(namesForlabels)
输出。
['malignant' 'benign']
肿瘤数据被分类为malignant 或non-malignant ,你可以看到。
标签0和1是代表标签的二进制值,其中0表示恶性肿瘤,1表示良性肿瘤,当写入时。
print(ourlabels)
输出。
[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 1 1 1 0 0 1 0 0 1 1 1 1 0 1 0 0 1 1 1 1 0 1 0 0
1 0 1 0 0 1 1 1 0 0 1 0 0 0 1 1 1 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 1 1
1 1 1 1 1 1 0 0 0 1 0 0 1 1 1 0 0 1 0 1 0 0 1 0 0 1 1 0 1 1 0 1 1 1 1 0 1
1 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 0 1 1 0 0 1 1 0 0 1 1 1 1 0 1 1 0 0 0 1 0
1 0 1 1 1 0 1 1 0 0 1 0 0 0 0 1 0 0 0 1 0 1 0 1 1 0 1 0 0 0 0 1 1 0 0 1 1
1 0 1 1 1 1 1 0 0 1 1 0 1 1 0 0 1 0 1 1 1 1 0 1 1 1 1 1 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1
1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 1 1
1 1 0 1 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0
0 1 0 0 1 1 1 1 1 0 1 1 1 1 1 0 1 1 1 0 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1
1 0 1 1 1 1 1 0 1 1 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 0 1 1 1 1 1 0 1 1
0 1 0 1 1 0 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 1
1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 0 1 0 1 1 1 1 1 0 1 1 0 1 0 1 0 0
1 1 1 0 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 0 0 0 0 0 0 1]
当特征被打印出来时,肿瘤的30个明显的特征和属性被完全看到。此外,在肿瘤的恶性或良性状态等因素上训练我们的模型,有助于我们做出准确的预测。
print(ourfeatures)
输出。
[[1.799e+01 1.038e+01 1.228e+02 ... 2.654e-01 4.601e-01 1.189e-01]
[2.057e+01 1.777e+01 1.329e+02 ... 1.860e-01 2.750e-01 8.902e-02]
[1.969e+01 2.125e+01 1.300e+02 ... 2.430e-01 3.613e-01 8.758e-02]
...
[1.660e+01 2.808e+01 1.083e+02 ... 1.418e-01 2.218e-01 7.820e-02]
[2.060e+01 2.933e+01 1.401e+02 ... 2.650e-01 4.087e-01 1.240e-01]
[7.760e+00 2.454e+01 4.792e+01 ... 0.000e+00 2.871e-01 7.039e-02]]
在有关的数据集中有569个肿瘤数据实例,每个实例都有一个有关30个变量之一的数值。因此,从上述数据中,我们可以得出结论,肿瘤的第一个实例是恶性的,它的平均半径值为1.79900000e+01。
4.创建数据集来组织信息
我们需要通过在以前从未见过的数据上运行分类器来评估其准确性。在创建我们的模型之前,我们将把数据分成两组,即训练集和测试集。模型的训练和评估将在训练集上完成,然后我们将用它来预测未知的测试集。
Sklearn带有一个叫做train_test_split() 的函数,它可以自动为我们把数据分成这两组。
from sklearn.model_selection import train_test_split
train, test, trainingLabels, testingLabels = train_test_split(ourfeatures, ourlabels, test_size = 0.33, random_state = 42)
可以利用测试大小作为参数,随机地划分数据。我们将原始数据按其原始大小的三分之一分割成测试数据。除此以外,其余的数据用于训练。训练变量和测试变量各使用一个不同的标签。
5.构建模型
你可以从各种各样的机器学习模型中选择,以满足你的需求。每一种都有自己的优点和缺点。本模型选择了一种流行的二元分类方法,Naive Bayes, 。GaussianNB是第一个需要导入的模块,使用GaussianNB() 函数进行初始化,然后使用fit() 方法在数据集的数据上训练你的模型。
from sklearn.naive_bayes import GaussianNB
gaussiannb = GaussianNB()
ourModel = gaussiannb.fit(train, trainingLabels)
为了在我们的测试集上生成预测结果,我们首先需要训练这个模型。内置的predict() 函数为测试集中的每个数据点返回一个预测值数组。接下来,我们的预测值将使用print() 方法来显示。
ourPredictions = gaussiannb.predict(test)
print(ourPredictions)
输出。
[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 0 1 1 0 1 1 0 1 1 1 1 1 1 0 0
0 1 1]
6.训练的模型的准确度测试
如果我们想确保我们的模型是准确的,我们可以将其预测值与测试集中的实际标签进行比较。我们使用sklearn模块内置的accuracy_score() 功能来完成这项任务。
from sklearn.metrics import accuracy_score
print(accuracy_score(testingLabels, ourPredictions))
输出结果。
0.9414893617021277
这些结果表明,这个基于Naive Bayes算法的机器学习分类器的准确率为94.15%。
结论
判断可以通过观察癌细胞的特征来进行,这可以表明癌细胞是malignant 还是benign. 我们使用scikit-learn 来解决这个机器学习问题。Python框架Scikit-learn是一个用于机器学习、数据挖掘和数据分析的免费和开源的工具。