无涯教程-分类算法 - 简介
分类可以定义为根据观测值或给定数据点预测类别的过程。分类的输出可以采用"黑色"或"白色"或"垃圾邮件"或"非垃圾邮件"的形式。
在数学上,分类是从输入变量(X)到输出变量(Y)近似映射函数(f)的任务,它属于有监督的机器学习,在该机器学习中,还提供了目标以及输入数据集。
分类问题的一个示例可以是电子邮件中的垃圾邮件检测,只能有两类输出:"垃圾邮件"和"非垃圾邮件";因此,这是一个二进制类型分类。
要实现此分类,无涯教程首先需要训练分类器,在此示例中,"垃圾邮件"和"非垃圾邮件"电子邮件将用作培训数据,成功训练分类器后,可以将其用于检测未知电子邮件。
对于分类问题,有两种类型的学习者-
懒惰学习
顾名思义,这类学习者在存储训练数据后等待测试数据出现,仅在获取测试数据后才进行分类。他们花在培训上的时间更少,但花在预测上的时间却更多。懒惰学习者的示例有K近邻和基于案例的推理。
渴望学习
与懒惰的学习者相反,热心的学习者在存储训练数据后无需等待测试数据出现就构造分类模型,他们花更多的时间在训练上,而花更少的时间在预测上。渴望学习的人的示例有决策树,朴素贝叶斯和人工神经网络(ANN)。
构建分类器
Scikit-learn是用于机器学习的Python库,可用于在Python中构建分类器。在Python中构建分类器的步骤如下-
第1步 - 导入包
为了使用scikit-learn构建分类器,无涯教程需要将其导入。可以使用以下脚本导入它-
import sklearn
第2步 - 导入数据集
导入必要的包后,需要一个数据集来创建分类预测模型,可以从sklearn数据集中导入它,也可以根据需要使用其他一个,将使用sklearn的乳腺癌威斯康星州诊断数据库。可以在以下脚本的帮助下导入它-
from sklearn.datasets import load_breast_cancer
以下脚本将加载数据集;
data=load_breast_cancer()
还需要组织数据,可以在以下脚本的帮助下完成数据-
label_names=data[target_names] labels=data[target] feature_names=data[feature_names] features=data[data]
对于数据库,以下命令将打印标签的名称"malignant(恶性)" 和"benign(良性)" 。
print(label_names)
上面命令的输出是标签的名称-
[malignant benign]
这些标签分别映射为二进制值0和1。恶性癌由0表示,良性癌由1表示。
这些标签的特征名称和特征值可以通过以下命令查看-
print(feature_names[0])
上面命令的输出是标签0的特征的名称,即恶性癌症-
mean radius
类似地,标签的特征名称可以如下产生:
print(feature_names[1])
上面命令的输出是标签1的特征的名称,即良性癌症-
mean texture
可以在以下命令的帮助下为这些标签打印函数-
print(features[0])
这将给出以下输出-
[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]
可以在以下命令的帮助下为这些标签打印函数-
print(features[1])
这将给出以下输出-
[2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02 7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01 5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01 2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01 2.750e-01 8.902e-02]
第3步 - 数据整理
由于需要在看不见的数据上测试模型,因此将数据集分为两部分:训练集和测试集,可以使用 sklearn python包的 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步 - 模型判断
将数据划分为训练和测试后,程需要构建模型,为此,将使用朴素贝叶斯(Bayes)算法,以下命令将导入 GaussianNB 模块-
from sklearn.naive_bayes import GaussianNB
现在,按如下所示初始化模型-
gnb=GaussianNB()
接下来,在以下命令的帮助下,无涯教程可以训练模型-
model=gnb.fit(train, train_labels)
现在,出于判断目的,需要进行预测。可以通过如下方式使用predict()函数来完成:
preds=gnb.predict(test) print(preds)
这将给出以下输出-
[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系列是恶性和良性肿瘤类别的预测值。
第5步 - 寻找准确性
通过比较两个数组 test_labels 和 preds ,无涯教程可以找到上一步中模型构建的准确性。将使用 accuracy_score()函数确定准确性。
from sklearn.metrics import accuracy_score print(accuracy_score(test_labels,preds)) 0.951754385965
上面的输出显示NaïveBayes分类器的准确度为95.17%。