分类算法简介基础教程文档

收录于 2023-04-20 00:10:05 · بالعربية · English · Español · हिंदीName · 日本語 · Русский язык · 中文繁體

分类简介

分类可以定义为根据观测值或给定数据点预测类别或类别的过程。分类的输出可以采用"黑色"或"白色"或"垃圾邮件"或"无垃圾邮件"之类的形式。
在数学上,分类是从输入变量(X)到输出变量(Y)近似映射函数(f)的任务。它基本上属于有监督的机器学习,其中还提供了目标以及输入数据集。
分类问题的一个例子是电子邮件中的垃圾邮件检测。只能有两类输出:"垃圾邮件"和"无垃圾邮件";因此,这是一个二进制类型分类。
要实现此分类,我们首先需要训练分类器。在此示例中,"垃圾邮件"和"无垃圾邮件"电子邮件将用作培训数据。成功训练分类器后,即可用于检测未知电子邮件。

分类中学习者的类型

对于分类问题,我们有两种类型的学习者-

懒惰的学习者

顾名思义,这类学习者在存储训练数据后等待测试数据出现。仅在获取测试数据后才进行分类。他们花在培训上的时间更少,但花在预测上的时间却更多。懒惰学习者的例子有K近邻和基于案例的推理。

渴望的学习者

与懒惰的学习者相反,热心的学习者在存储训练数据后无需等待测试数据出现就构建分类模型。他们花更多的时间在训练上,而花更少的时间在预测上。渴望学习的人包括决策树,朴素贝叶斯和人工神经网络(ANN)。

在Python中构建分类器

Scikit-learn,一个用于机器学习的Python库,可用于在Python中构建分类器。在Python中构建分类器的步骤如下-
第1步:导入必要的python包
要使用scikit-learn构建分类器,我们需要将其导入。我们可以使用以下脚本导入它-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
import sklearn
第2步:导入数据集
导入必要的程序包后,我们需要一个数据集来建立分类预测模型。我们可以从sklearn数据集中导入它,也可以根据需要使用其他一个。我们将使用sklearn的乳腺癌威斯康星州诊断数据库。我们可以在以下脚本的帮助下导入它-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from sklearn.datasets import load_breast_cancer
以下脚本将加载数据集;
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
data = load_breast_cancer()
我们还需要组织数据,并且可以在以下脚本的帮助下完成数据-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
label_names = data['target_names']
labels = data['target']
feature_names = data['feature_names']
features = data['data']
对于我们的数据库,以下命令将打印标签的名称, "恶性" "良性"
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
print(label_names)
以上命令的输出是标签的名称-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
['malignant' 'benign']
这些标签映射到二进制值0和1。 恶性癌症用0表示, 良性癌症用1表示。
可以通过以下命令查看这些标签的特征名称和特征值-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
print(feature_names[0])
上面命令的输出是标签0的特征的名称,即 恶性癌症-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
mean radius
类似地,标签的特征名称可以如下产生-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
print(feature_names[1])
上面命令的输出是标签1的特征的名称,即良性癌症-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
mean texture
我们可以在以下命令的帮助下为这些标签打印功能-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
print(features[0])
这将给出以下输出-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
[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]
我们可以在以下命令的帮助下为这些标签打印功能-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
print(features[1])
这将给出以下输出-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
[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()函数将数据拆分为集合。以下命令将导入函数-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from sklearn.model_selection import train_test_split
现在,下一条命令会将数据分为训练和测试数据。在此示例中,我们将40%的数据用于测试目的,将60%的数据用于培训目的-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
train, test, train_labels, test_labels =
   train_test_split(features,labels,test_size = 0.40, random_state = 42)
第4步:模型评估
将数据分为训练和测试之后,我们需要构建模型。为此,我们将使用 朴素贝叶斯算法。以下命令将导入 GaussianNB 模块-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from sklearn.naive_bayes import GaussianNB
现在,按如下所示初始化模型-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
gnb = GaussianNB()
接下来,借助以下命令,我们可以训练模型-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
model = gnb.fit(train, train_labels)
现在,出于评估目的,我们需要进行预测。可以通过如下使用predict()函数来完成-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
preds = gnb.predict(test)
print(preds)
这将给出以下输出-
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
[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和1s是 恶性良性肿瘤类别的预测值。
第5步:寻找准确性
通过比较两个数组 test_labels preds ,我们可以找到上一步中模型构建的准确性。我们将使用 accuracy_score()函数确定准确性。
# Filename : example.py
# Copyright : 2020 By Lidihuo
# Author by : www.lidihuo.com
# Date : 2020-08-26
from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels,preds))
0.951754385965
上面的输出显示 NaïveBayes分类器的准确率是95.17%。

分类评估指标

即使您已经完成了机器学习应用程序或模型的实现,该工作也不会完成。我们必须找出我们的模型有多有效?可以有不同的评估指标,但是我们必须谨慎选择,因为指标的选择会影响对机器学​​习算法性能的衡量和比较方式。
以下是一些重要的分类评估指标,您可以根据数据集和问题种类进行选择-

混乱矩阵

混淆矩阵 -这是衡量分类问题性能的最简单方法,其中输出可以是两个或更多类型的课程。

各种ML分类算法

以下是一些重要的ML分类算法-
逻辑回归 支持向量机(SVM) 决策树 朴素贝叶斯 随机森林
我们将在后续章节中详细讨论所有这些分类算法。

应用程序

分类算法的一些最重要的应用如下-
语音识别 手写识别 生物特征识别 文档分类