机器学习 - 分类算法



分类是一种监督学习技术,它根据一组输入特征预测分类目标变量。它通常用于解决垃圾邮件检测、欺诈检测、图像识别、情感分析等许多问题。

分类模型的目标是学习输入特征 (X) 和目标变量 (Y) 之间的映射函数 (f)。此映射函数通常表示为决策边界,该边界将输入特征空间中的不同类别分隔开。模型训练完成后,即可用于预测新样本的类别。

现在让我们来看一下构建分类模型所涉及的步骤:

数据准备

第一步是收集和预处理数据。这包括数据清洗、处理缺失值以及将分类变量转换为数值变量。

特征提取/选择

下一步是从数据中提取或选择相关特征。这是一个重要步骤,因为特征的质量会极大地影响模型的性能。一些常见的特征选择技术包括相关性分析、特征重要性排序和主成分分析。

模型选择

选择好特征后,下一步是选择合适的分类算法。有很多不同的算法可供选择,每种算法都有其自身的优点和缺点。一些流行的算法包括逻辑回归、决策树、随机森林、支持向量机和神经网络。

模型训练

选择合适的算法后,下一步是在标记的训练数据上训练模型。在训练过程中,模型学习输入特征和目标变量之间的映射函数。模型参数会迭代调整,以最大限度地减少预测输出与实际输出之间的差异。

模型评估

训练好模型后,下一步是在单独的一组验证数据上评估其性能。这样做是为了估计模型的准确性和泛化性能。常见的评估指标包括准确率、精确率、召回率、F1 分数和受试者工作特征 (ROC) 曲线下的面积。

超参数调整

在许多情况下,可以通过调整模型的超参数来进一步提高其性能。超参数是在训练模型之前选择的设置,用于控制学习率、正则化强度和神经网络中隐藏层的数量等方面。网格搜索、随机搜索和贝叶斯优化是一些常用的超参数调整技术。

模型部署

训练和评估模型后,最后一步是将其部署到生产环境中。这包括将模型集成到更大的系统中,在真实数据上进行测试,并随着时间的推移监控其性能。

分类中的学习器类型

在分类问题中,我们有两种类型的学习器:

懒惰学习器

顾名思义,这种学习器在存储训练数据后等待测试数据出现。只有在获得测试数据后才进行分类。它们在训练上花费的时间较少,但在预测上花费的时间较多。懒惰学习器的示例包括 K 近邻和基于案例的推理。

积极学习器

与懒惰学习器相反,积极学习器在存储训练数据后,无需等待测试数据出现即可构建分类模型。它们在训练上花费的时间较多,但在预测上花费的时间较少。积极学习器的示例包括决策树、朴素贝叶斯和人工神经网络 (ANN)。

在 Python 中构建分类器

Scikit-learn 是一个用于机器学习的 Python 库,可用于在 Python 中构建分类器。在 Python 中构建分类器的步骤如下:

步骤 1:导入必要的 Python 包

要使用 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']

以下命令将打印标签的名称,在我们的数据库中为 **“恶性”** 和 **“良性”**。

print(label_names)

上述命令的输出是标签的名称:

['malignant' 'benign']

这些标签映射到二进制值 0 和 1。“恶性”癌症由 0 表示,“良性”癌症由 1 表示。

可以使用以下命令查看这些标签的特征名称和特征值:

print(feature_names[0])

上述命令的输出是标签 0(即 **恶性** 癌症)的特征名称:

mean radius

同样,标签 1 的特征名称可以如下产生:

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:模型评估

将数据分成训练集和测试集后,我们需要构建模型。我们将使用朴素贝叶斯算法来实现这个目的。以下命令将导入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_labelspreds,来找到前面步骤中构建的模型的准确率。我们将使用accuracy_score()函数来确定准确率。

from sklearn.metrics import accuracy_score
print(accuracy_score(test_labels,preds))
0.951754385965

上述输出显示朴素贝叶斯分类器的准确率为95.17%。

分类评估指标

即使你完成了机器学习应用程序或模型的实现,工作也并没有完成。我们必须找出我们的模型有多有效?可能存在不同的评估指标,但我们必须仔细选择它,因为指标的选择会影响如何衡量和比较机器学习算法的性能。

以下是一些重要的分类评估指标,你可以根据你的数据集和问题类型选择:

混淆矩阵

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

各种机器学习分类算法

以下是一些重要的机器学习分类算法:

我们将在后面的章节中详细讨论所有这些分类算法。

应用

分类算法的一些最重要的应用如下:

  • 语音识别
  • 手写识别
  • 生物特征识别
  • 文档分类

在接下来的章节中,我们将讨论机器学习中一些最流行的分类算法。

广告