机器学习中最常见的四种分类模型

机器学习中最常见的四种分类模型点击蓝字关注我,有干货领取!作者:JasonBrownlee翻译:候博学前言机器学习是一个从训练集中学习出算法的研究领域。分类是一项需要使用机器学习算法的任务,该算法学习如何为数据集…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

点击蓝字关注我,有干货领取!

机器学习中最常见的四种分类模型

作者:Jason Brownlee
翻译:候博学

前言

机器学习是一个从训练集中学习出算法的研究领域。

分类是一项需要使用机器学习算法的任务,该算法学习如何为数据集分配类别标签。

举一个简单易懂的例子:将电子邮件分类为“ 垃圾邮件 ”或“ 非垃圾邮件”(二分类的典型特征“非此即彼”,关于二分类,后文会涉及)。

你可能会在机器学习中遇到许多不同类型的分类任务,但是其实每种模型都会使用与之相对应的建模方法。

因此在本文中,你将了解到机器学习中不同类型的分类预测建模方法。

  • 分类预测建模将类别标签分配给输入样本;

  • 二分类是指预测两个类别之一(非此即彼),而多分类则涉及预测两个以上类别之一;

  • 多标签分类涉及为每个样本预测一个或多个类别;

  • 在不平衡分类中,样本在各个类别之间的分布不相等;

机器学习中最常见的四种分类模型

概述

本文分为五个部分,它们分别是:

  1. 分类预测建模

  2. 二分类

  3. 多类别分类

  4. 多标签分类

  5. 不平衡分类

分类预测建模

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

分类问题的案例包括:

  • 分类一封邮件是否为垃圾邮件。

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

  • 根据最近的用户行为,来将用户分类为是否流失。

从建模的角度来看,分类需要训练数据集,其中包含许多可供学习的输入和输出数据。

模型将使用训练数据集,并计算如何将输入数据样本更加准确地映射到特定的类别标签。

因此,训练数据集必须拥有足够的代表性,并且每个分类标签都拥有很多样本数据。

类别标签通常是字符串值,例如“ spam ”(垃圾邮件),“ not spam ”(非垃圾邮件),并且在提供给建模算法之前必须将其映射为数值。这通常称为标签编码[2],其中为每个类别标签分配一个唯一的整数,例如“ spam ” = 0,“ no spam ” = 1。

有很多不同类型的分类算法可以对分类预测问题进行建模。

关于如何将合适的算法应用到具体分类问题上,没有固定的模式准则。但可以通过试验来确定,通常是试验者使用受控实验,在给定的分类任务中,哪种算法和算法配置拥有最佳性能,从而将其挑选出来。

基于预测结果对分类预测建模算法进行评估。分类准确度是一种常用的度量标准,其通过预测的类别标签来评估模型的性能。即使分类结果不是完美的,但对于许多分类任务来说这是个很好的开始。

某些任务可能需要预测每个样本类别成员的概率,而不是标签。这为预测提供了额外的不确定性,评估预测概率的一种通用判断方法是ROC曲线(积分面积)

你可能会遇到四种主要的分类任务类型,它们分别是:

  • 二分类

  • 多类别分类

  • 多标签分类

  • 不平衡分类

让我们来依次仔细研究每个类型。

二分类模型

二分类[3]是指具有两个类别标签的分类任务。

示例包括:

  • 电子邮件垃圾邮件检测(是否为垃圾邮件)

  • 流失预测(流失与否)

  • 转化预测(购买或不购买)

通常,二分类任务涉及一个属于正常状态的类别和一个属于异常状态的类别。

例如,“ 非垃圾邮件 ”是正常状态,而“ 垃圾邮件 ”是异常状态。另一个示例是“ 未检测到癌症 ”是涉及医学检查任务的正常状态,而“ 检测到癌症 ”是异常状态。

正常状态的类分配为类别标签0,状态异常的类分配为类别标签1。

通常先预测每个样本的伯努利概率分布模型,来对二分类任务进行建模。

伯努利分布是离散的概率分布,它涵盖了事件的结果为0或1的两种情况。假如结果预测为1,对于分类来说,这意味着模型预测了数据属于1类,也可以说是异常状态。

可以用于二分类的流行算法包括:

  • 逻辑回归(Logistic Regression)

  • k最近邻(k-Nearest Neighbors)

  • 决策树(Decision Trees)

  • 支持向量机(Support Vector Machine)

  • 朴素贝叶斯(Naive Bayes)

有些算法是专门为二分类问题而设计的,它们本身不支持两个以上的类型分类。例如逻辑回归和支持向量机。

接下来,让我们仔细看一下数据集,通过实践和思考来训练出对二分类问题的直觉。

我们可以使用make_blobs()函数[4]生成一个合成的二分类数据集。

下面的示例代码生成一个数据集,其中包含1,000个样本,这些样本属于两个类之一,每个类具有两个输入特征。

# 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个样本分为input(X)和output(y)元素。

然后汇总类标签的分布,显示该实例是属于类别0还是类别1,并且每个类别中各有500个样本。

接下来,总结数据集中的前10个样本,显示输入值是数字,目标值是代表类成员类型的整数0或1。

(1000, 2) (1000,)

Counter({0: 500, 1: 500})

[-3.05837272  4.48825769] 0
[-8.60973869 -3.72714879] 1
[1.37129721 5.23107449] 0
[-9.33917563 -2.9544469 ] 1
[-11.57178593  -3.85275513] 1
[-11.42257341  -4.85679127] 1
[-10.44518578  -3.76476563] 1
[-10.44603561  -3.26065964] 1
[-0.61947075  3.48804983] 0
[-10.91115591  -4.5772537 ] 1

最后,为数据集中的input变量创建散点图,并根据其类值对点进行着色。

我们可以很直观的区分两个不同的集群。

机器学习中最常见的四种分类模型二元分类数据集的散点图

多类别分类模型

多类别分类[5]是指具有两个以上类别标签的分类任务。

示例包括:

  • 人脸分类

  • 植物种类分类

  • 光学字符识别

与二分类不同,多类别分类没有正常和异常结果的概念。相反,样本被分类为属于一系列已知类别中的一个。

在某些问题上,类标签的数量可能非常大。例如,模型可以预测照片属于面部识别系统中的数千个或数万个面部之一。

涉及预测单词序列的问题,例如文本翻译模型,也可以视为一种特殊类型的多类别分类。要预测的单词序列中的每个单词都涉及一个多类分类,其中词汇量定义了可以预测的可能类别的数量,其数量可能是成千上万个单词。

通常使用每个样本的Multinoulli概率分布的模型来对多类分类任务进行建模。

所述Multinoulli概率分布是覆盖情况下的事件将有一个明确的结果,例如离散概率分布ķ在{1,2,3,…,ķ }。对于分类,这意味着模型可以预测样本属于每个类别标签的概率。

许多用于二分类的算法也可以用于解决多分类问题。

可用于多类分类的流行算法包括:

  • k最近邻(k-Nearest Neighbors)

  • 决策树(Decision Trees)

  • 朴素贝叶斯(Naive Bayes)

  • 随机森林(Random Forest)

  • 梯度Boosting(Gradient Boosting)

这涉及使用一种策略,该策略为每个类别与所有其他类别(称为“一对多”)拟合多个二分类模型,或者为每对类别(称为“一对一”)拟合一个模型。

  • 一对多:为每个类别与其它所有类别拟合出一个二分类模型。

  • 一对一:为每对类别拟合一个二分类模型。

可以使用这些策略进行多分类的二分类算法包括:

  • 逻辑回归(Logistic Regression)

  • 支持向量机(Support Vector Machine)

接下来,让我们仔细看一下数据集,通过实践和思考来训练出对多类分类问题的直觉。

我们可以使用make_blobs()函数[6]生成一个综合的多类分类数据集。

下面的代码表示生成一个数据集,其中包含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个样本分为input(X)和output(y)。

然后汇总类别标签的分布,显示样本属于类别0,类别1或类别2,并且每个类中大约有333个示例。

接下来,展示数据集中的前10个样本,显示输入值是数字,目标值是代表类别成员类型的整数。

(1000, 2) (1000,)

Counter({0: 334, 1: 333, 2: 333})

[-3.05837272  4.48825769] 0
[-8.60973869 -3.72714879] 1
[1.37129721 5.23107449] 0
[-9.33917563 -2.9544469 ] 1
[-8.63895561 -8.05263469] 2
[-8.48974309 -9.05667083] 2
[-7.51235546 -7.96464519] 2
[-7.51320529 -7.46053919] 2
[-0.61947075  3.48804983] 0
[-10.91115591  -4.5772537 ] 1

最后,为数据集中的input变量创建散点图,并根据其分类值对点进行着色。

我们可以很容易区分三个不同的集群。

机器学习中最常见的四种分类模型多类分类数据集的散点图

多标签分类模型

多标签分类[7]是指具有两个或多个分类标签的分类任务,其中每个样本可以预测一个或多个分类标签。

考虑照片分类[8]的示例,其中给定的照片可能在场景中具有多个对象,并且模型可以预测照片中存在多个已知对象,例如“ 自行车 ”,“ 苹果 ”,“ ”等。

机器学习中最常见的四种分类模型

这与二分类和多分类不同,在二分类和多分类中,为每个样本预测了单个分类标签。

通常使用预测多个输出的模型来对多标签分类任务进行建模,而每个输出都将作为伯努利概率分布(0,1分布)进行预测。本质上,这是对每个样本进行多个二分类预测的模型。

用于二分类或多类分类的分类算法不能直接用于多标签分类。可以使用标准分类算法的专用版本,即所谓的多标签版本算法,包括:

  • 多标签决策树(Multi-label Decision Trees)

  • 多标签随机森林(Multi-label Random Forests)

  • 多标签梯度Boosting(Multi-label Gradient Boosting)

另一种方法是使用单独的分类算法来预测每个类别的标签。

接下来,让我们仔细看一下数据集,通过实践和思考来训练出对多标签分类问题的直觉。

我们可以使用make_multilabel_classification()函数[9]生成一个由算法合成的多标签分类数据集。

下面的代码表示生成一个包含1,000个示例的数据集,每个示例都有两个输入特征。一共有三个类别,每个类别可能带有两个标签(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])

首先运行代码,对创建的数据集进行汇总,将1000个示例分为input(X)和output(y)。

接下来,展示数据集中的前10个样本,显示输入值是数字,目标值是代表类标签成员类别的整数。

(1000, 2) (1000, 3)

[18. 35.] [1 1 1]
[22. 33.] [1 1 1]
[26. 36.] [1 1 1]
[24. 28.] [1 1 0]
[23. 27.] [1 1 0]
[15. 31.] [0 1 0]
[20. 37.] [0 1 0]
[18. 31.] [1 1 1]
[29. 27.] [1 0 0]
[29. 28.] [1 1 0]

不平衡分类模型

不平衡分类[10]是指在分类任务中,每个类别中的样本数不均匀分布。

通常,不平衡分类任务是二分类任务,其中训练数据集中的大多数样本属于正常类,而少数样本属于异常类。

示例包括:

  • 欺诈识别

  • 离群值检测

  • 医学诊断测试

这些问题被建模为二分类任务,尽管可能会需要专门的技术。

通过对多数类别进行欠采样或过采样,使用专门的建模算法来修正训练数据集中样本的组成。

示例包括:

  • 随机欠采样[11]

  • SMOTE过采样[12]

当将模型拟合到训练数据集上时,可以使用专门的建模算法来关注少数群体,例如成本敏感的机器学习算法。

示例包括:

  • 成本敏感逻辑回归(Cost-sensitive Logistic Regression)

  • 成本敏感决策树(Cost-sensitive Decision Trees)

  • 成本敏感支持向量机(Cost-sensitive Support Vector Machines)

最后,由于报告分类准确性可能会产生误差,因此可能需要其他性能指标来进行评估。

示例包括:

  • 精确度 Precision

  • 召回度 Recall

  • F-Measure

接下来,让我们仔细看一下数据集,通过实践和思考来训练出对不平衡分类问题的直觉。

我们可以使用make_classification()函数[13]生成一个由代码合成的不平衡二分类数据集。

下面的代码表示生成一个数据集,其中包含1,000个示例,这些示例属于两个类之一,每个类具有两个输入特征。

# 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个示例分为input(X)和output(y)。

然后汇总类标签的分布,显示出来严重的类别不平衡,其中约980个示例属于类别0,约20个示例属于类别1。

接下来,展示数据集中的前10个样本,显示输入值是数字,目标值是代表类成员类别的整数。在这种情况下,我们可以看到,大多数示例都属于类别0。

(1000, 2) (1000,)

Counter({0: 983, 1: 17})

[0.86924745 1.18613612] 0
[1.55110839 1.81032905] 0
[1.29361936 1.01094607] 0
[1.11988947 1.63251786] 0
[1.04235568 1.12152929] 0
[1.18114858 0.92397607] 0
[1.1365562  1.17652556] 0
[0.46291729 0.72924998] 0
[0.18315826 1.07141766] 0
[0.32411648 0.53515376] 0

最后,为数据集中的输入变量创建散点图,并根据其类值对点进行着色。

我们可以看到一个主类,属于类别0,一些零散的则属于类别1。可以看到,具有不平衡类标签属性的数据集在建模方面更具挑战性。

机器学习中最常见的四种分类模型不平衡二元分类数据集的散点图

摘要总结

本文展示了机器学习中不同类型的分类预测建模方法。

具体来说,以下几点:

  • 分类预测建模涉及到将类别标签分配给输入样本(测试集);

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

  • 多标签分类涉及为每个样本预测一个或多个类别;

  • 不平衡分类指的是样本在各个类别之间分布不相等时的分类任务;

参考资料

[1]

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

[2]

标签编码: https://machinelearningmastery.com/how-to-prepare-categorical-data-for-deep-learning-in-python/

[3]

二分类: https://en.wikipedia.org/wiki/Binary_classification

[4]

make_blobs()函数: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_blobs.html

[5]

多类别分类: https://en.wikipedia.org/wiki/Multiclass_classification

[6]

make_blobs()函数: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_blobs.html

[7]

多标签分类: https://en.wikipedia.org/wiki/Multi-label_classification

[8]

照片分类: https://machinelearningmastery.com/object-recognition-with-deep-learning/

[9]

make_multilabel_classification()函数: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html

[10]

不平衡分类: https://machinelearningmastery.com/what-is-imbalanced-classification/

[11]

随机欠采样: https://machinelearningmastery.com/random-oversampling-and-undersampling-for-imbalanced-classification/

[12]

SMOTE过采样: https://machinelearningmastery.com/smote-oversampling-for-imbalanced-classification/

[13]

make_classification()函数: https://scikit-learn.org/stable/modules/generated/sklearn.datasets.make_classification.html

-END-

往期精选

 

Numpy进阶之排序小技巧

Matplotlib 可视化最有价值的 50 个图表

使用sklearn轻松实现数据缩放

Python大数据分析

data creats value

机器学习中最常见的四种分类模型

长按二维码关注

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185610.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • es6转es5_es6转es5插件

    es6转es5_es6转es5插件步骤初始化环境npminit-y首先安装babel组件npminstall@babel/cli@babel/core@babel/preset-envbabel-plugin-transform-es2015-modules-umd-D配置babel,.babelrc(babel配置文件){“presets”:[“@babel/preset-env”],”plugins”:[“transform-es2015-modules-umd”]}

  • 玩转软路由 篇四:软路由中OpenWRT作为旁路由的安装设置教程

    玩转软路由 篇四:软路由中OpenWRT作为旁路由的安装设置教程开篇说一些仁者见仁智者见智的话,先声明,这只是代表我自己近期浅陋的看法。看到很多人玩路由器,刷各种固件,什么爱快、高格、老毛子、OpenWRT什么的,自己也折腾过,也在恩山论坛里下载各路大神的固件使用。作为一个小白,就自然而然想到,这么多固件,哪个最好?当然对于这个问题,每个人的回答都不一样,毕竟适合自己的才重要。经过我自己不断在网上寻找答案,最后形成了一个成熟的看法,那就是真正的好不好,关键点在驱动,驱动做得会使得路由系统如虎添翼。但是,很多芯片厂家在卖芯片的时候是需要承诺不可进行二次开发的,所以路由器大

  • 安装keil5时,注册机在解压后消失的解决以及使用注册机破解keil5时,无法破解

    安装keil5时,注册机在解压后消失的解决以及使用注册机破解keil5时,无法破解这里写自定义功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入全新的界面设计,将会带来全新的写作体验;在创作中心设置你喜爱的代码高亮样式,Markdown将代码片显示选择的高亮样式进行展示;增加了图片拖拽功能,你可以

  • 批处理远程执行bat_bat循环执行命令

    批处理远程执行bat_bat循环执行命令privatestaticfinalintTIME_OUT=2000;privatefinalstaticStringip=”192.168.70.147″;privatefinalstaticStringusername=”Administrator”;privatefinalstaticStringpasswd=”Yanfa_1304″;/***执行远程电脑下的脚本*/privat

  • 比太钱包使用方法及冷钱包存储方案-2

    拖更一个月的我又开始更新了。过完年,恰逢数字货币开始上涨,正好是聊聊钱包的好时候。上文说到比太钱包的冷热模式,这次接上文写冷钱包模式下的发币及公钥监控操作。先从冷钱包模式下发币说起吧:1,打开钱包,点击发送按钮。2,输入收款地址和金额,并点击发送。这里无论是输入比特币金额还是法币金额,钱包会自动换算出另一种货币金额。3,输入钱包密码,准备冷钱包签名。4,生成未签名的交易信息二维码,需使用装有对应…

  • werkzeug 详解

    werkzeug 详解首先,先向大家介绍一下什么是werkzeug,Werkzeug是一个WSGI工具包,他可以作为一个Web框架的底层库。这里稍微说一下,werkzeug不是一个web服务器,也不是一个web框架,而是一个工具包,官方的介绍说是一个WSGI工具包,它可以作为一个Web框架的底层库,因为它封装好了很多Web框架的东西,例如Request,Response等等。例如我最常用的Fla…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号