Machine Learning 简明教程
Machine Learning - Classification Algorithms
分类是一种监督学习技术类型,它涉及基于一组输入特征预测分类目标变量。它通常用于解决诸如垃圾邮件检测、欺诈检测、图像识别、情感分析和许多其他问题。
分类模型的目标是学习输入特征 (X) 和目标变量 (Y) 之间的一个映射函数 (f)。此映射函数通常表示为决策边界,它将输入特征空间中的不同类别分开。一旦模型经过训练,就可以用它来预测新的、未见示例的类别。
现在让我们来看看构建分类模型涉及的步骤 −
Feature Extraction/Selection
下一步是从数据中提取或选择相关特征。这是重要的一步,因为特征的质量会极大地影响模型的性能。一些常见的特征选择技术包括相关性分析、特征重要性排名和主成分分析。
Model Training
在选择合适的算法后,下一步是在标记的训练数据上训练模型。在训练期间,模型会学习输入特征和目标变量之间的映射函数。模型参数会进行迭代调整,以将预测输出与实际输出之间的差异最小化。
Model Evaluation
模型训练完成后,下一步是在一组单独的验证数据上评估其性能。这样做是为了估计模型的准确度和泛化性能。常见的评估指标包括准确度、准确率、召回率、F1 分数和接收者操作特性 (ROC) 曲线下的面积。
Hyperparameter Tuning
在许多情况下,可以通过微调模型的超参数来进一步提高模型的性能。超参数是在训练模型之前选择的设置,并且控制诸如学习率、正则化强度和神经网络中隐藏层的数量等方面。网格搜索、随机搜索和贝叶斯优化是一些用于超参数调优的常见技术。
Types of Learners in Classification
在分类问题中,我们有两种类型的学习器——
Building a Classifier in Python
Scikit-learn(一个用于机器学习的 Python 库)可用于在 Python 中构建分类器。在 Python 中构建分类器的步骤如下——
Step 1: Importing necessary python package
要使用 scikit-learn 构建分类器,我们需要导入它。我们可以使用以下脚本导入它——
import sklearn
Step 2: Importing dataset
导入必要的包后,我们需要一个数据集来构建分类预测模型。我们可以从 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。 Malignant 癌由 0 表示, Benign 癌由 1 表示。
这些标签的特征名称和特征值可以使用以下命令查看——
print(feature_names[0])
以上命令的输出是标签 0(即 Malignant 癌)的特征名称——
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]
Step 3: Organizing data into training & testing sets
因为我们需要在不可见数据上测试我们的模型,我们会将我们的数据集分成两部分:一个训练集和一个测试集。我们可以使用 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)
Step 4: Model evaluation
在将数据分成训练和测试后,我们需要构建模型。为此,我们将使用朴素贝叶斯算法。以下命令会导入 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 是 Malignant 和 Benign 肿瘤分类的预测值。
Classification Evaluation Metrics
即使你已完成机器学习应用程序或模型的实现,工作还未完成。我们必须找出我们的模型有多有效?可能有不同的评估指标,但我们必须仔细选择,因为指标的选择会影响机器学习算法的性能的测量和比较方式。
以下是你可以根据你的数据集和问题类型从中进行选择的一些重要的分类评估指标 −
Confusion Matrix
-
* Confusion Matrix* − 这是测量分类问题性能的最简单方式,其中输出可以是两种或更多种类的分类。