Jason Brownlee作者杨毅远校对陈丹翻译

机器学习中的四种分类任务(附代码)

本文为大家介绍了机器学习中常见的四种分类任务。分别是二分类、多类别分类、多标签分类、不平衡分类,并提供了实战代码。

机器学习是一个研究领域,其涉及到从示例中学习的算法。
 
分类是一项需要使用机器学习算法去学习如何根据问题域为示例分配类标签的任务。一个简单易懂的例子是将电子邮件分为“垃圾邮件”或“非垃圾邮件”。
 
机器学习中,你可能会遇到许多不同类型的分类任务,并且每种模型都会使用专门的建模方法。
 
在本教程中,您将了解机器学习中不同类型的分类预测建模。
 
读完这篇教程后,你将学会:
  • 将类别标签分配给输入示例的分类预测模型

  • 二分类是指预测两个类别之一,而多分类则涉及预测两个以上类别之一。

  • 多标签分类涉及为每个示例预测一个或多个类别,不平衡分类是指各个类别之间的示例分布不相等的分类任务。

让我们开始吧!

教程概述

本教程分为五个部分,他们分别是:

1. 分类预测模型
2. 二分类
3. 多类别分类
4. 多标签分类
5. 不平衡分类
 
分类预测建模

机器学习中,分类是指针对输入数据中的给定示例预测其类别标签的预测性建模问题。

例如:
  • 给定一个示例,将其归为垃圾邮件或者非垃圾邮件。

  • 给定一个手写字符,将其分类为一个已知字符。

  • 根据最近的用户行为,将其归为流失用户或者非流失用户。

从建模的角度来看,分类需要一个训练数据集,其中包含许多可供学习的输入和输出示例。
 
模型将会使用训练数据集并计算如何将输入数据映射到最符合的特定类别标签。因此,训练数据集必须具有一定代表性,并且每一个类别都应有许多的样本。
 
类别标签通常是字符串,例如“垃圾邮件”,“非垃圾邮件”。必须先将类别标签映射为数值,然后才能用于建模算法。该过程通常称为标签的编码,标签编码将唯一的整数分配给每个类标签,例如“垃圾邮件” = 0,“非垃圾邮件” = 1。
 
对于分类预测建模问题进行建模,有许多不同类型的分类算法可供使用。
 
关于如何对某一问题选择一个最合适的算法,目前没有很好的理论。反而我们通常建议相关人员通过受控试验来探究什么样的算法和算法配置在给定的分类问题上能实现最佳性能。
 
分类模型的好坏通常用分类预测算法的结果进行评估。分类准确率是一种流行的度量标准,用于根据预测的类别标签评估模型的性能。分类准确率并不是完美的,但对于许多分类任务来说是一个很好的起点。
 
某些分类任务可能会要求预测每个样本属于各个类别的概率而不是给出一个类别标签,对于应用程序或用户随后的预测而言,这增加了额外的不确定性。用于评估预测概率的常用方法是ROC曲线。
 
你可能会遇到四种主要的分类任务类型;他们分别是:
  • 二分类

  • 多类别分类

  • 多标签分类

  • 不平衡分类

让我们依次深入研究。
 
二分类

二分类是指具有两个类别标签的分类任务。
 
示例包括:
  • 电子邮件垃圾邮件检测(是否为垃圾邮件)。

  • 用户的流失预测(流失与否)。

  • 用户的转化预测(购买或不购买)。

通常,二分类任务包含一个属于正常状态的类别和另一个属于异常状态的类别。
 
例如,“非垃圾邮件”是正常状态,“垃圾邮件”是异常状态。另一个例子是“未检测到癌症”是医学测试任务的正常状态,而“检测到癌症”是异常状态。
 
正常状态的类别分配为类别标签0,状态异常的类别分配为类别标签1。
 
通常使用预测每个样本的伯努利概率分布的模型来对二分类任务进行建模。
 
伯努利分布是一种离散概率分布,它包含了事件的二元结果,即要么为1,要么为0。对于分类问题,这种模型将预测样本属于“1”这种类别的概率,或者说是异常类别的概率。
 
可用于二分类的常用算法包括:
  • 逻辑回归

  • k最近邻算法

  • 决策树

  • 支持向量机

  • 朴素贝叶斯

有些算法是专为二分类而设计的,它们本身并不支持两个以上的类别,例如逻辑回归和支持向量机
 
接下来,让我们通过数据集找到一些对二分类问题的直观感受。
 
我们可以使用make_blobs()函数生成一个合成的二分类数据集。
 
下面的例子生成一个包含1000个样本的数据集,这些样本属于两个类别之一,每个类具有两个输入特征。

# example of binary classification task

from numpy import where

from collections import Counter

from sklearn.datasets import make_blobs

from matplotlib import pyplot

# define dataset

X, y = make_blobs(n_samples=1000, centers=2, random_state=1)

# summarize dataset shape

print(X.shape, y.shape)

# summarize observations by class label

counter = Counter(y)

print(counter)

# summarize first few examples

for i in range(10):

print(X[i], y[i])

# plot the dataset and color the by class label

for label, _ in counter.items():

row_ix = where(y == label)[0]

pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label))

pyplot.legend()

pyplot.show()

首先运行示例代码,对创建的数据集进行汇总并显示1000个示例分为输入(X)和输出(y)元素的数据集。
 
然后这段代码将汇总类标签的分布,显示样本属于类0或类1,并且每个类中有500个示例。
 
接下来,这段代码会为我们展示数据集中的前十个样本属于类0还是类1

运行结果如下:

 
最后,使用数据集中的输入变量创建散点图,并根据每个点所属的类别对点进行着色。

我们可以看到所有数据明显被分为两部分。
多类别分类

多类别分类是指具有两个以上类别标签的分类任务。
 
例如:
  • 人脸识别

  • 植物种类识别。

  • 光学字符识别

与二分类不同,多分类没有正常和异常结果的概念。相反,样本被分类为属于一系列已知类别中的一个。
 
在某些问题上,类标签的数量可能非常大。例如,模型可以预测照片属于脸部识别系统中成千上万的脸中的一个。
 
涉及预测单词序列的问题,例如文本翻译模型,也可以视为一种特殊类型的多类别分类。要预测的单词序列中的每个单词都涉及一个多类别分类,其中词汇的大小定义了可以预测的类别数量,其大小可能是成千上万个单词。
 
通常使用多元概率分布模型来对多类别分类任务进行建模。
 
多元分布是一种离散概率分布,它包含的事件具有确定的分类结果,例如{1,2,3,…,K}中的K。对于这种分类任务,这意味着模型可以预测样本属于每个类别标签的概率。
 
许多二分类算法也可以用于多分类。
 
可用于多类分类的流行算法包括:
  • k最近邻算法。

  • 决策树。

  • 朴素贝叶斯

  • 随机森林

  • 梯度提升

用于解决二分类问题的算法可以适用于多分类问题
 
这涉及使用一种策略,该策略为每个类别与所有其他类别(称为“一对多”)拟合多个二分类模型,或者为每一对类别(称为“一对一”)拟合一个模型。
  • 一对多:针对每个类别与所有其他类别拟合一个二分类模型。

  • 一对一:为每对类别设计一个二分类模型。

可以使用这些策略进行多分类的二分类算法包括:
  • 逻辑回归。

  • 支持向量机

接下来,让我们通过数据集找到一些对于多分类问题的直观感受。
 
我们可以使用make_blobs()函数生成一个合成的多分类数据集。
 
下面的示例生成一个数据集,其中包含1,000个样本,这些样本属于三个类之一,每个类具有两个输入特征。
# example of multi-class classification task
from numpy import where
from collections import Counter
from sklearn.datasets import make_blobs
from matplotlib import pyplot
# define dataset
X, y = make_blobs(n_samples=1000, centers=3, random_state=1)
# summarize dataset shape
print(X.shape, y.shape)
# summarize observations by class label
counter = Counter(y)
print(counter)
# summarize first few examples
for i in range(10):
print(X[i], y[i])
# plot the dataset and color the by class label
for label, _ in counter.items():
row_ix = where(y == label)[0]
pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label))
pyplot.legend()
pyplot.show()
首先运行这段示例代码,它将会对创建的数据集进行汇总并显示1000个样本分为输入(X)和输出(y)元素的数据集。
 
然后汇总的类标签的分布,显示样本属于类0,类1或类2,并且每个类中大约有333个样本。
 
接下来,汇总数据集中的前10个样本,显示输入值是数字,目标值是对应类别的整数。
分类结果:

最后,为数据集中的输入变量创建散点图,并根据其类别对点进行着色。
 
我们可以看到,正如我们所期望的,数据集被区分为三个不同的区域。
多标签分类

多标签分类是指具有两个或以上分类标签的分类任务,其中每个样本可以预测为一个或多个类别。
 
考虑照片分类的示例,其中给定照片可能在场景中具有多个对象,并且模型可以预测照片中存在多个已知对象,例如“自行车”,“苹果”,“人”等。
 
这与二分类和多分类不同,在二分类和多分类中,每个样本的预测只含有单个分类标签。
 
通常使用预测多个输出的模型来对多标签分类任务进行建模,而每个输出都将作为伯努利概率分布进行预测。本质上,这是一个对每个样本进行多个二分类预测的模型。
 
用于二分类或多分类的分类算法不能直接用于多标签分类。可以使用标准分类算法的专用版本,即所谓的算法的多标签版本,包括:
  • 多标签决策树

  • 多标签随机森林

  • 多标签梯度增强

另一种方法是使用单独的分类算法来预测每个类别的标签。
 
接下来,让我们通过数据集找到一些对于多标签问题的直观感受。
 
我们可以使用make_multilabel_classification()函数生成一个合成的多标签分类数据集。
 
下面的例子生成一个包含1000个样本的数据集,每个样本都有两个输入特征。一共有三个类别,每个类别可能带有两个标签(0或1)之一。
 
# example of a multi-label classification task
from sklearn.datasets import make_multilabel_classification
# define dataset
X, y = make_multilabel_classification(n_samples=1000, n_features=2, n_classes=3, n_labels=2, random_state=1)
# summarize dataset shape
print(X.shape, y.shape)
# summarize first few examples
for i in range(10):
print(X[i], y[i])
 
首先运行这段示例代码,它会对创建的数据集进行汇总并显示1,000个样本分为输入(X)和输出(y)元素的数据集。
 
接下来,汇总数据集中的前10个样本,显示输入值是数字,目标值是类别对应的整数。

运行结果:

不平衡分类

不平衡分类是指其中每个类别中的示例数不均匀分布的分类任务。
 
通常,不平衡分类任务是二分类任务,其中训练数据集中的大多数样本属于正常类,而少数样本属于异常类。
 
例如:
  • 诈骗识别。

  • 离群值检测。

  • 医学诊断测试。

这些问题在建模中被视为二分类任务,尽管可能需要专门的技术。
 
可以使用专门的方法例如对多数类进行欠采样或对少数类进行过采样来更改训练数据集中样本的组成。
 
例如:
  • 随机欠采样

  • SMOTE过采样。

在将模型拟合到训练数据集上时,可以使用专门的建模算法来采集少数类别的数据,例如成本敏感型机器学习算法。
 
例如:
  • 成本敏感的Logistic回归。

  • 成本敏感的决策树。

  • 成本敏感的支持向量机

最后,由于分类报告的准确性可能会产生误导,因此可能需要其他性能指标。
 
例如:
  • 准确率

  • 召回率。

  • F值。

接下来,让我们通过数据集找到一些对于不平衡问题的直观感受。
 
我们可以使用make_classification()函数生成一个合成的不平衡二分类数据集。
 
下面的示例生成一个数据集,其中包含1000个样本,这些样本属于两类之一,每个类具有两个输入特征。
 
# example of an imbalanced binary classification task
from numpy import where
from collections import Counter
from sklearn.datasets import make_classification
from matplotlib import pyplot
# define dataset
X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, n_classes=2, n_clusters_per_class=1, weights=[0.99,0.01], random_state=1)
# summarize dataset shape
print(X.shape, y.shape)
# summarize observations by class label
counter = Counter(y)
print(counter)
# summarize first few examples
for i in range(10):
print(X[i], y[i])
# plot the dataset and color the by class label
for label, _ in counter.items():
row_ix = where(y == label)[0]
pyplot.scatter(X[row_ix, 0], X[row_ix, 1], label=str(label))
pyplot.legend()
pyplot.show()
 
首先运行这段示例代码,它会对创建的数据集进行汇总并显示1000个示例分为输入(X)和输出(y)元素的数据集。
 
然后汇总类标签的分布,其显示出严重的类别不平衡,其中约980个样本属于类0,约20个样本属于类1。
 
接下来,汇总数据集中的前10个样本,显示输入值是数字,目标值是类别对应的整数。在这种情况下,我们可以看到大多数样本都属于类0。

分类结果:

最后,为数据集中的输入变量创建散点图,并根据其类别对点进行着色。
 
我们可以看到一个主要的聚类,其中包含属于类0的样本,还有一些零散的样本,属于类1。一般认为,具有这种不平衡类标签属性的数据集在建模时更具挑战性。 
进一步阅读

如果您想进行更深入了解,本节提供了更多的有关该主题的资源。
 
统计分类——维基百科:

https://en.wikipedia.org/wiki/Statistical_classification

二分类——维基百科:
https://en.wikipedia.org/wiki/Binary_classification
多分类——维基百科:
https://en.wikipedia.org/wiki/Multiclass_classification
多标签分类——维基百科:
https://en.wikipedia.org/wiki/Multi-label_classification
多类别和多标签算法——scikit-learn API:
https://scikit-learn.org/stable/modules/multiclass.html
 
总结

在本教程中,你了解到了机器学习中不同类型的分类预测建模。
 
具体来说,你学习到:
  • 将类别标签分配给输入示例的分类预测模型

  • 二分类是指预测两个类别之一,而多分类则涉及预测两个以上类别之一。

  • 多标签分类涉及为每个示例预测一个或多个类别,不平衡分类是指各个类别之间的示例分布不相等的分类任务。

原文标题:

4 Types of Classification Tasks in Machine Learning

原文链接:

https://machinelearningmastery.com/types-of-classification-in-machine-learning/

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

工程分类机器学习
2
相关数据
逻辑回归技术

逻辑回归(英语:Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

分类数据技术

一种特征,拥有一组离散的可能值。以某个名为 house style 的分类特征为例,该特征拥有一组离散的可能值(共三个),即 Tudor, ranch, colonial。通过将 house style 表示成分类数据,相应模型可以学习 Tudor、ranch 和 colonial 分别对房价的影响。 有时,离散集中的值是互斥的,只能将其中一个值应用于指定样本。例如,car maker 分类特征可能只允许一个样本有一个值 (Toyota)。在其他情况下,则可以应用多个值。一辆车可能会被喷涂多种不同的颜色,因此,car color 分类特征可能会允许单个样本具有多个值(例如 red 和 white)。

概率分布技术

概率分布(probability distribution)或简称分布,是概率论的一个概念。广义地,它指称随机变量的概率性质--当我们说概率空间中的两个随机变量具有同样的分布(或同分布)时,我们是无法用概率来区别它们的。

光学字符识别技术

光学字符识别是指对文本资料的图像文件进行分析识别处理,获取文字及版面信息的过程。在这个过程中,手写的、打印的等多种类型的图像被转换为机器编码的文本,这些含有文字信息的图像可以是扫描而来,也可以是场景文本——如照片中出现的广告牌文字 (scene text),或者叠加在图像上的文字 (overlay text)——如电视节目中常见的字幕等等。光学字符识别是一种将印刷文本数字化的常用方法,可以对其进行电子编辑、搜索、更紧凑地存储、在线显示,并用于认知计算、机器翻译、(提取)文本到语音、 关键数据和文本挖掘。 OCR是模式识别人工智能和计算机视觉领域的一个重要的研究领域。

人脸识别技术

广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。 人脸识别是一项热门的计算机技术研究领域,它属于生物特征识别技术,是对生物体(一般特指人)本身的生物特征来区分生物体个体。

梯度提升技术

梯度提升是用于回归和分类问题的机器学习技术,其以弱预测模型(通常为决策树)的集合的形式产生预测模型。 它像其他增强方法一样以阶段式方式构建模型,并且通过允许优化任意可微损失函数来推广它们。

随机森林技术

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。而"Random Forests"是他们的商标。这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合Breimans的"Bootstrap aggregating"想法和Ho的"random subspace method" 以建造决策树的集合。

欠采样技术

欠采样是信号处理学中的一种采样技术,也叫带通采样(bandpass sampling),是一种以低于其奈奎斯特采样定理(采样频率两倍高于被采样频率)的采样率对带通滤波信号进行采样且仍然能够重建信号的技术。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

朴素贝叶斯技术

朴素贝叶斯是一种构建分类器的简单方法。该分类器模型会给问题实例分配用特征值表示的类标签,类标签取自有限集合。它不是训练这种分类器的单一算法,而是一系列基于相同原理的算法:所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

支持向量机技术

在机器学习中,支持向量机是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

分类问题技术

分类问题是数据挖掘处理的一个重要组成部分,在机器学习领域,分类问题通常被认为属于监督式学习(supervised learning),也就是说,分类问题的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类。根据类别的数量还可以进一步将分类问题划分为二元分类(binary classification)和多元分类(multiclass classification)。

聚类技术

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

合合信息机构
推荐文章
暂无评论
暂无评论~