机器学习中的四种分类义务(附代码)
作者头像
  • 冉小伟
  • 2020-05-29 12:02:32 3

机器学习中的分类任务

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

分类任务概述

在机器学习中,分类是指预测输入数据中的给定示例属于哪个类别标签的任务。例如: - 判断一封电子邮件是否为垃圾邮件。 - 预测一个用户是否会流失。 - 预测一个用户是否会进行购买。

从建模的角度看,分类需要一个包含输入和输出示例的训练数据集。模型将利用这个数据集来学习如何将输入数据映射到最匹配的类别标签。因此,训练数据集必须具有代表性,并且每个类别都需要有足够的样本。

类别标签通常是字符串形式,如“垃圾邮件”或“非垃圾邮件”。为了便于建模,需要将这些标签转换为数值。这个过程被称为标签编码,通常将唯一的整数分配给每个类别标签。

在机器学习中,有许多不同的分类算法可供选择。选择哪种算法取决于具体的问题和数据集的特点。分类模型的效果可以通过多种指标来评估,如准确率和ROC曲线。

四种主要的分类任务

在机器学习中,常见的分类任务主要有以下四种: - 二分类:预测两个类别之一。 - 多类别分类:预测两个以上类别之一。 - 多标签分类:预测一个或多个类别。 - 不平衡分类:类别间的样本分布不均等。

接下来,我们将逐一探讨这些分类任务。

二分类

二分类是指具有两个类别标签的任务。例如: - 判断一封电子邮件是否为垃圾邮件。 - 预测一个用户是否会流失。 - 预测一个用户是否会进行购买。

在二分类任务中,通常有一个“正常”类别和一个“异常”类别。例如,“非垃圾邮件”属于正常类别,“垃圾邮件”属于异常类别。通常使用预测每个样本属于“异常”类别的概率的模型来处理二分类任务。

常用的二分类算法包括: - 逻辑回归 - K近邻算法 - 决策树 - 支持向量机 - 朴素贝叶斯

以下是生成一个二分类数据集的示例代码: ```python from numpy import where from collections import Counter from sklearn.datasets import make_blobs from matplotlib import pyplot

定义数据集

X, y = makeblobs(nsamples=1000, centers=2, random_state=1)

汇总数据集形状

print(X.shape, y.shape)

汇总类标签分布

counter = Counter(y) print(counter)

汇总前10个样本

for i in range(10): print(X[i], y[i])

绘制数据集并按类别着色

for label, _ in counter.items(): rowix = where(y == label)[0] pyplot.scatter(X[rowix, 0], X[row_ix, 1], label=str(label)) pyplot.legend() pyplot.show() ```

多类别分类

多类别分类是指具有两个以上类别标签的任务。例如: - 人脸识别。 - 动物种类识别。 - 光学字符识别。

在多类别分类中,样本会被分类为属于一系列已知类别中的一个。与二分类不同,多类别分类没有“正常”和“异常”的概念。通常使用多元概率分布模型来处理多类别分类任务。

常用的多类别分类算法包括: - K近邻算法 - 决策树 - 朴素贝叶斯 - 随机森林 - 梯度提升

以下是生成一个多类别分类数据集的示例代码: ```python from numpy import where from collections import Counter from sklearn.datasets import make_blobs from matplotlib import pyplot

定义数据集

X, y = makeblobs(nsamples=1000, centers=3, random_state=1)

汇总数据集形状

print(X.shape, y.shape)

汇总类标签分布

counter = Counter(y) print(counter)

汇总前10个样本

for i in range(10): print(X[i], y[i])

绘制数据集并按类别着色

for label, _ in counter.items(): rowix = where(y == label)[0] pyplot.scatter(X[rowix, 0], X[row_ix, 1], label=str(label)) pyplot.legend() pyplot.show() ```

多标签分类

多标签分类是指一个样本可以预测为一个或多个类别的任务。例如: - 图像分类任务,一张图像可能包含多个对象。

在多标签分类任务中,每个样本可以属于多个类别。通常使用预测多个类别的模型来处理这类任务,每个类别都被视为一个独立的二分类问题。

常用的多标签分类算法包括: - 多标签决策树 - 多标签随机森林 - 多标签梯度提升

以下是生成一个多标签分类数据集的示例代码: ```python from sklearn.datasets import makemultilabelclassification

定义数据集

X, y = makemultilabelclassification(nsamples=1000, nfeatures=2, nclasses=3, nlabels=2, random_state=1)

汇总数据集形状

print(X.shape, y.shape)

汇总前10个样本

for i in range(10): print(X[i], y[i]) ```

不平衡分类

不平衡分类是指类别间的样本分布不均等的任务。例如: - 诈骗识别。 - 异常检测。 - 医学诊断测试。

在不平衡分类任务中,通常其中一个类别的样本数量远多于另一个类别。可以采用专门的方法来处理不平衡数据集,例如欠采样、过采样或使用成本敏感型算法。

常用的不平衡分类处理方法包括: - 随机欠采样 - SMOTE过采样 - 成本敏感的逻辑回归 - 成本敏感的决策树 - 成本敏感的支持向量机

以下是生成一个不平衡二分类数据集的示例代码: ```python from numpy import where from collections import Counter from sklearn.datasets import make_classification from matplotlib import pyplot

定义数据集

X, y = makeclassification(nsamples=1000, nfeatures=2, ninformative=2, nredundant=0, nclasses=2, nclustersperclass=1, weights=[0.99, 0.01], randomstate=1)

汇总数据集形状

print(X.shape, y.shape)

汇总类标签分布

counter = Counter(y) print(counter)

汇总前10个样本

for i in range(10): print(X[i], y[i])

绘制数据集并按类别着色

for label, _ in counter.items(): rowix = where(y == label)[0] pyplot.scatter(X[rowix, 0], X[row_ix, 1], label=str(label)) pyplot.legend() pyplot.show() ```

结语

本文介绍了机器学习中常见的四种分类任务及其应用实例和相关实战代码。通过这些任务的学习,你可以更好地理解和处理各种分类问题。希望这些内容对你有所帮助!

    本文来源:图灵汇
责任编辑: : 冉小伟
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
义务机器代码学习分类
    下一篇