机器学习和统计学中的分类是一种监督学习方法,其中计算机程序从给定的数据中学习并进行新的观察或分类。在本文中,我们将详细了解机器学习中的分类。
-
目录
什么是机器学习中的分类
分类是将给定数据集分类的过程,可以对结构化或非结构化数据执行。该过程从预测给定数据点的类别开始。这些类通常称为目标、标签或类别。
分类预测建模是近似从输入变量到离散输出变量的映射函数的任务。主要目标是确定新数据将属于哪个类/类别。
让我们尝试用一个简单的例子来理解这一点。心脏病检测可以被识别为一个分类问题,这是一个二元分类,因为只能有两个类别,即有心脏病或没有心脏病。在这种情况下,分类器需要训练数据来理解给定的输入变量与类别的关系。一旦分类器经过准确训练,它就可以用来检测特定患者是否患有心脏病。
由于分类是监督学习的一种,因此即使是目标也提供了输入数据。让我们熟悉一下机器学习术语中的分类。
机器学习中的分类术语
- 分类器 – 它是一种用于将输入数据映射到特定类别的算法。
- 分类模型 - 该模型对为训练给出的输入数据进行预测或得出结论,它将预测数据的类别或类别。
- 特征——特征是所观察到的现象的单个可测量的属性。
- 二元分类——这是一种具有两种结果的分类类型,例如——要么是真,要么是假。
- 多类分类——具有两个以上类别的分类,在多类分类中,每个样本被分配给一个且仅一个标签或目标。
- 多标签分类 ——这是一种分类类型,其中每个样本都分配给一组标签或目标。
- 初始化 ——分配用于分类器的分类器
- 训练分类器– sci-kit learn 中的每个分类器都使用 fit(X, y) 方法来拟合用于训练训练 X 和训练标签 y 的模型。
- 预测目标 – 对于未标记的观测值 X,predict(X) 方法返回预测标签 y。
- 评估——这基本上意味着模型的评估,即分类报告、准确性得分等。
分类中的学习者类型
- 惰性学习器– 惰性学习器只需存储训练数据并等待测试数据出现。使用存储的训练数据中最相关的数据来完成分类。与热切的学习者相比,他们有更多的预测时间。例如 – k 最近邻,基于案例的推理。
- 热切学习者– 热切学习者在获取预测数据之前根据给定的训练数据构建分类模型。它必须能够致力于适用于整个空间的单一假设。因此,他们花费大量时间进行训练,而花费更少的时间进行预测。例如——决策树、朴素贝叶斯、人工神经网络。
分类算法
在机器学习中,分类是一个监督学习概念,它基本上将一组数据分类为类别。最常见的分类问题是——语音识别、人脸检测、手写识别、文档分类等。它可以是二元分类问题,也可以是多类问题。机器学习中有很多用于分类的机器学习算法。让我们看一下机器学习中的那些分类算法。
逻辑回归
它是机器学习中的一种分类算法,使用一个或多个自变量来确定结果。结果是用二分变量来衡量的,这意味着它只有两种可能的结果。
逻辑回归的目标是找到因变量和一组自变量之间的最佳拟合关系。它比其他二元分类算法(例如最近邻)更好,因为它定量地解释了导致分类的因素。
的优点和缺点
逻辑回归专门用于分类,它有助于理解一组自变量如何影响因变量的结果。
逻辑回归算法的主要缺点是它仅在预测变量为二元时才有效,它假设数据不存在缺失值并假设预测变量彼此独立。
用例
- 识别疾病的危险因素
- 词分类
- 天气预报
- 投票应用程序
朴素贝叶斯分类器
它是一种基于贝叶斯定理的分类算法,该定理给出了预测变量之间独立性的假设。简而言之,朴素贝叶斯分类器假设类中特定特征的存在与任何其他特征的存在无关。
即使这些特征相互依赖,所有这些属性也会独立地影响概率。朴素贝叶斯模型很容易制作,对于相对较大的数据集特别有用。即使采用简单的方法,朴素贝叶斯也优于机器学习中的大多数分类方法。以下是实现朴素贝叶斯定理的贝叶斯定理。
的优点和缺点
朴素贝叶斯分类器需要少量的训练数据来估计必要的参数以获得结果。与其他分类器相比,它们本质上非常快。
唯一的缺点是他们被认为是一个糟糕的估计者。
用例
- 疾病预测
- 文件分类
- 垃圾邮件过滤器
- 情绪分析
随机梯度下降
这是一种非常有效且简单的拟合线性模型的方法。当样本数据较多时,随机梯度下降特别有用。它支持不同的损失函数和分类惩罚。编辑
随机梯度下降是指计算每个训练数据实例的导数并立即计算更新。
的优点和缺点
唯一的优点是易于实现和效率,而随机梯度下降的主要缺点是它需要许多超参数并且对特征缩放敏感。
用例
- 物联网
- 更新参数,例如神经网络中的权重或线性回归中的系数
K-最近邻
它是一种惰性学习算法,将训练数据对应的所有实例存储在n维空间中。它是一种惰性学习算法,因为它不专注于构建通用内部模型,而是致力于存储训练数据的实例。
k 个最近邻的简单多数投票来计算的。它受到监督并获取一堆标记点并使用它们来标记其他点。为了标记新点,它会查看最接近该新点的标记点(也称为其最近邻居)。它让这些邻居投票,因此大多数邻居拥有的标签就是新点的标签。“k”是它检查的邻居的数量。
的优点和缺点
该算法的实现非常简单,并且对噪声训练数据具有鲁棒性。即使训练数据很大,效率也相当高。KNN算法的唯一缺点是不需要确定K的值,并且与其他算法相比计算成本相当高。
用例
- 工业应用程序寻找与其他任务相似的任务
- 手写检测应用
- 图像识别
- 视频识别
- 库存分析
决策树
决策树算法以树结构的形式构建分类模型。它利用 if-then 规则,这些规则在分类上同样详尽且互斥。该过程继续将数据分解为更小的结构,并最终将其与增量决策树相关联。最终的结构看起来像一棵有节点和叶子的树。一次使用一个训练数据按顺序学习规则。每次学习规则时,覆盖该规则的元组都会被删除。该过程在训练集上继续,直到达到终止点。
该树是通过自顶向下递归分治方法构建的。决策节点将具有两个或多个分支,叶子代表分类或决策。决策树中与最佳预测变量相对应的最顶层节点称为根节点,决策树的最佳之处在于它可以处理分类数据和数值数据。
的优点和缺点
决策树具有易于理解和可视化的优点,而且只需要很少的数据准备。决策树的缺点是它可以创建复杂的树,从而可以有效地进行机器人分类。它们可能非常不稳定,因为即使数据的简单更改也会阻碍决策树的整个结构。
用例
- 数据探索
- 模式识别
- 金融中的期权定价
- 识别疾病和风险威胁
随机森林
随机决策树或随机森林是一种用于分类、回归等的集成学习方法。 它通过在训练时构建多个决策树进行操作,并输出类,即类的模式或分类或平均预测(回归)个别的树木。
随机森林是一种元估计器,它在数据集的各个子样本上拟合许多树,然后使用平均值来提高模型预测性质的准确性。子样本大小始终与原始输入大小相同,但样本通常是通过替换来抽取的。
的优点和缺点
随机森林的优点是由于减少了过拟合,因此比决策树更准确。随机森林分类器的唯一缺点是它的实现非常复杂并且实时预测非常慢。
用例
- 工业应用,例如确定贷款申请人是高风险还是低风险
- 用于预测汽车发动机机械部件的故障
- 预测社交媒体分享分数
- 表现分数
人工神经网络
神经网络由分层排列的神经元组成,它们获取一些输入向量并将其转换为输出。该过程涉及每个神经元获取输入并向其应用一个函数(通常是非线性函数),然后将输出传递到下一层。
一般来说,网络应该是前馈的,这意味着单元或神经元将输出馈送到下一层,但不涉及到前一层的任何反馈。
权重应用于从一层传递到另一层的信号,这些权重在训练阶段进行调整,以使神经网络适应任何问题陈述。
的优点和缺点
它对噪声数据具有很高的容忍度,并且能够对未经训练的模式进行分类,在连续值的输入和输出上表现更好。人工神经网络的缺点是与其他模型相比,它的解释能力较差。
用例
- 笔迹分析
- 黑白图像的着色
- 计算机视觉流程
- 根据面部特征为照片添加字幕
支持向量机
支持向量机是一种分类器,它将训练数据表示为空间中的点,这些点按尽可能宽的间隙分为不同的类别。然后通过预测新点属于哪个类别以及它们将属于哪个空间来将它们添加到空间中。
的优点和缺点
它在决策函数中使用训练点的子集,这使得它具有高效的内存并且在高维空间中非常有效。支持向量机的唯一缺点是该算法不直接提供概率估计。
用例
- 用于比较股票在一段时间内的表现的业务应用程序
- 投资建议
- 需要准确性和效率的应用分类
在此处了解有关 python 支持向量机的更多信息
分类器评估
任何分类器完成后最重要的部分是评估以检查其准确性和效率。我们可以通过很多方法来评估分类器。让我们看看下面列出的这些方法。
坚持法
这是评估分类器的最常见方法。在该方法中,给定的数据集被分为两部分作为测试集和训练集,分别为20%和80%。
训练集用于训练数据,未见过的测试集用于测试其预测能力。
交叉验证
过度拟合是大多数机器学习模型中最常见的问题。可以进行 K 折交叉验证来验证模型是否过度拟合。
在该方法中,数据集被随机划分为k个互斥的 子集,每个子集的大小相同。其中,一个用于测试,其他用于训练模型。所有 k 次折叠都会发生相同的过程。
分类报告
分类报告将给出以下结果,它是使用 cancer_data 数据集的 SVM 分类器的示例分类报告。
-
准确性
- 准确度是正确预测的观测值与总观测值的比率
- 真阳性:正确预测事件为阳性的数量。
- True Negative:正确预测事件是否定的次数。
-
F1- 分数
- 它是精确率和召回率的加权平均值
-
准确率和召回率
- 准确率是检索到的实例中相关实例的比例,而召回率是已检索到的相关实例占实例总数的比例。它们基本上用作相关性的度量。
ROC曲线
接受者操作特征或ROC曲线用于分类模型的直观比较,它显示了真阳性率和假阳性率之间的关系。ROC 曲线下的面积是模型准确性的度量。
算法选择
除了上述方法之外,我们还可以按照以下步骤为模型使用最佳算法
- 读取数据
- 根据我们的依赖和独立特征创建依赖和独立数据集
- 将数据分为训练集和测试集
- 使用不同的算法训练模型,例如 KNN、决策树、SVM 等
- 评估分类器
- 选择最准确的分类器。
尽管选择最适合您模型的最佳算法可能需要花费更多时间,但准确性是提高模型效率的最佳方法。
让我们看一下 MNIST 数据集,我们将使用两种不同的算法来检查哪一种最适合模型。
使用案例
什么是 MNIST?
它是一组 70,000 张小手写图像,并标有它们所代表的相应数字。每张图像有近784个特征,一个特征简单地代表像素的密度,每张图像是28×28像素。
我们将在不同分类器的帮助下使用 MNIST 数据集制作数字预测器。
加载 MNIST 数据集
from sklearn.datasets import fetch_openml
mnist = fetch_openml('mnist_784')
print(mnist)
输出:
探索数据集
import matplotlib
import matplotlib.pyplot as plt
X, y = mnist['data'], mnist['target']
random_digit = X[4800]
random_digit_image = random_digit.reshape(28,28)
plt.imshow(random_digit_image, cmap=matplotlib.cm.binary, interpolation="nearest")
输出:
分割数据
我们使用前 6000 个条目作为训练数据,数据集多达 70000 个条目。您可以使用 X 和 y 的形状进行检查。因此,为了使我们的模型内存高效,我们仅采用 6000 个条目作为训练集,1000 个条目作为测试集。
x_train, x_test = X[:6000], X[6000:7000]
y_train, y_test = y[:6000], y[6000:7000]
洗牌数据
为了避免不必要的错误,我们使用 numpy 数组对数据进行混洗。从根本上提高了模型的效率。
import numpy as np
shuffle_index = np.random.permutation(6000)
x_train, y_train = x_train[shuffle_index], y_train[shuffle_index]
使用逻辑回归创建数字预测器
y_train = y_train.astype(np.int8)
y_test = y_test.astype(np.int8)
y_train_2 = (y_train==2)
y_test_2 = (y_test==2)
print(y_test_2)
输出 :
from sklearn.linear_model import LogisticRegression
clf = LogisticRegression(tol=0.1)
clf.fit(x_train,y_train_2)
clf.predict([random_digit])
输出:
交叉验证
from sklearn.model_selection import cross_val_score
a = cross_val_score(clf, x_train, y_train_2, cv=3, scoring="accuracy")
a.mean()
输出:
使用支持向量机创建预测器
from sklearn import svm
cls = svm.SVC()
cls.fit(x_train, y_train_2)
cls.predict([random_digit])
输出:
交叉验证
a = cross_val_score(cls, x_train, y_train_2, cv = 3, scoring="accuracy")
a.mean()
输出:
在上面的例子中,我们能够制作一个数字预测器。由于我们预测该数字是否为数据中所有条目中的 2,因此两个分类器中的结果均为 false,但交叉验证显示逻辑回归分类器(而不是支持向量机分类器)的准确性要高得多。
本文到此结束,我们学习了机器学习中的分类。我希望您清楚本教程中与您分享的所有内容。 (持续更新中)