顾名思义,分类就是把事物“分类”成子类别的任务。但是,被一台机器!如果这听起来并不多,想象一下你的电脑能够区分你和陌生人。在土豆和西红柿之间。在A和F之间。现在听起来很有趣。分类是监督机器学习的一部分,我们将标记的数据用于训练。在机器学习和统计学中,分类是基于包含观察的训练数据集并且其类别成员是已知的,来识别新观察属于类别(子群体)集合中的哪一个的问题。
什么是分类?
分类是根据数据或对象的特征或属性将其分类为预定义的类或类别的过程。在机器学习中,分类是一种监督学习技术,其中在标记的数据集上训练算法,以预测新的、看不见的数据的类或类别。
分类的主要目标是建立一个模型,可以准确地分配一个标签或类别的基础上,其功能的新的观察。例如,分类模型可以在标记为狗或猫的图像的数据集上训练,然后用于基于它们的特征(例如颜色、纹理和形状)来预测狗或猫的新的、看不见的图像的类别。
分类分为两种类型:
- 二元分类:在二元分类中,目标是将输入分类为两个类别或类别中的一个。例如-根据一个人的健康状况,我们必须确定该人是否患有某种疾病。
- 多元分类:在多元分类中,目标是将输入分类为若干类或类别中的一个。例如-根据不同种类的花的数据,我们必须确定我们观察到的花属于哪个种类。
分类算法的类型
有各种类型的分类器。其中一些是:
- 线性分类器:线性模型在类之间创建线性决策边界。它们简单且计算效率高。一些线性分类模型如下:
逻辑回归
具有内核='linear’的支持向量机
单层感知器
随机梯度下降(SGD)分类器 - 非线性分类器:非线性模型在类之间创建非线性决策边界。它们可以捕获输入特征和目标变量之间更复杂的关系。一些非线性分类模型如下:
K-近邻
核SVM
朴素贝叶斯
决策树分类
集成学习分类器:
随机森林
AdaBoost
装袋分级机,
投票分类器,
ExtraTrees分类器
多层人工神经网络
分类算法中的学习者类型
在机器学习中,分类学习者也可以被分类为“懒惰”或“渴望”学习者。
- 懒惰的学习者:懒惰学习者也被称为基于实例的学习者,懒惰学习者在训练阶段不学习模型。相反,它们只是存储训练数据,并在预测时使用它来分类新实例。它在预测时间非常快,因为它在预测期间不需要计算。但是在高维空间中或者当训练实例的数量很大时,其效果较差。懒惰学习者的例子包括k-最近邻和基于案例的推理。
- “渴望”学习者:急切学习者也被称为基于模型的学习者,急切学习者在训练阶段从训练数据中学习模型,并在预测时使用该模型对新实例进行分类。它在具有大型训练数据集的高维空间中更有效。急切学习器的例子包括决策树、随机森林和支持向量机。
分类模型评价
评估分类模型是机器学习中的重要步骤,因为它有助于评估模型在新的、看不见的数据上的性能和泛化能力。有几种度量和技术可以用于评估分类模型,这取决于具体的问题和需求。以下是一些常用的评估指标:
- 分类精度:正确分类的实例占测试集中实例总数的比例。这是一个简单直观的度量标准,但在不平衡的数据集中可能会产生误导,其中大多数类占主导地位的准确性得分。
- 混淆矩阵:显示每个类别的真阳性、真阴性、假阳性和假阴性数量的表格,可用于计算各种评估指标。
- 精度和召回:精确度衡量真阳性占预测阳性总数的比例,而召回率衡量真阳性总数的比例。这些度量在其中一个类别比另一个更重要的场景中,或者当存在误报和误报之间的权衡时是有用的。
- F1分数:精确度和召回率的调和平均值,计算为2 x(精确度x召回率)/(精确度+召回率)。对于精确度和召回率都很重要的不平衡数据集,这是一个有用的度量。
- ROC曲线和AUC:受试者操作特征(ROC)曲线是针对分类器的决策函数的不同阈值的真阳性率(召回率)相对于假阳性率(1-特异性)的图。曲线下面积(AUC)测量分类器的整体性能,其值范围从0.5(随机猜测)到1(完美分类)。
- 交叉验证:一种将数据分成多个折叠并在每个折叠上训练模型的技术,同时在其他折叠上进行测试,以获得对模型性能的更稳健的估计。
重要的是要根据具体问题和要求选择适当的评估指标,并通过评估独立测试数据的模型来避免过拟合。
分类是如何工作的?
分类背后的基本思想是在标记数据集上训练模型,其中输入数据与其对应的输出标签相关联,以学习输入数据和输出标签之间的模式和关系。一旦模型被训练,它就可以用于预测新的未见数据的输出标签。
分类过程通常涉及以下步骤:
- 了解问题:在开始分类之前,了解您要解决的问题是很重要的。你试图预测的类别标签是什么?输入数据和类标签之间的关系是什么?
假设我们必须根据7个自变量(称为特征)来预测患者是否患有某种疾病。这意味着,只有两种可能的结果:
病人得了病,意思是“真的”。
患者无疾病。意思是“假的”
这是一个二元分类问题。 - 数据准备:一旦你对问题有了很好的理解,下一步就是准备你的数据。这包括收集和预处理数据,并将其划分为训练集、验证集和测试集。在这个步骤中,数据被清理、预处理并转换成可由分类算法使用的格式。
X:它是独立特征,以N*M矩阵的形式存在。N是否。M是特征的数量。
y:对应于针对N个观察中的每一个的预测类别的N向量。 - 特征提取:从数据中提取相关特征或属性,其可用于区分不同类别。
假设我们的输入X有7个独立的特征,只有5个特征影响标签或目标值,其余2个特征可忽略不计或不相关,那么我们将仅使用这5个特征进行模型训练。 - 模型选择:有许多不同的模型可用于分类,包括逻辑回归、决策树、支持向量机(SVM)或神经网络。考虑到数据的大小和复杂性以及可用的计算资源,选择适合您的问题的模型非常重要。
- 模型训练:一旦您选择了一个模型,下一步就是在您的训练数据上训练它。这涉及调整模型的参数以最小化训练数据的预测类别标签和实际类别标签之间的误差。
- 模型评估:评估模型:在训练模型之后,重要的是在验证集上评估其性能。这将使您很好地了解模型在新的、不可见的数据上的性能。
对数损失或交叉熵损失、混淆矩阵、精度、召回率和AUC-ROC曲线是用于测量模型性能的质量度量。 - 模型调参:如果模型的性能不令人满意,您可以通过调整参数或尝试不同的模型对其进行微调。
- 部署模型:最后,一旦我们对模型的性能感到满意,我们就可以部署它对新数据进行预测。 它可以用于真实的世界问题。
分类算法的应用
分类算法广泛应用于各个领域的许多现实应用中,包括:
- 垃圾邮件过滤
- 信用风险评估
- 医学诊断
- 图像分类
- 情绪分析
- 欺诈检测
- 质量控制
- 推荐系统
案例:
让我们来亲身体验一下Classification是如何工作的。我们将研究各种分类器,并在一个众所周知的标准数据集Iris数据集上看到它们的性能的相当简单的分析比较。
运行给定脚本的要求:
- Python
- Scipy和Numpy
- Pandas
- Scikit-learn
# Importing the required libraries
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
from sklearn import datasets
from sklearn import svm
from sklearn.tree import DecisionTreeClassifier
from sklearn.naive_bayes import GaussianNB
# import the iris dataset
iris = datasets.load_iris()
X = iris.data
y = iris.target
# splitting X and y into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=1)
# GAUSSIAN NAIVE BAYES
gnb = GaussianNB()
# train the model
gnb.fit(X_train, y_train)
# make predictions
gnb_pred = gnb.predict(X_test)
# print the accuracy
print("Accuracy of Gaussian Naive Bayes: ",
accuracy_score(y_test, gnb_pred))
# DECISION TREE CLASSIFIER
dt = DecisionTreeClassifier(random_state=0)
# train the model
dt.fit(X_train, y_train)
# make predictions
dt_pred = dt.predict(X_test)
# print the accuracy
print("Accuracy of Decision Tree Classifier: ",
accuracy_score(y_test, dt_pred))
# SUPPORT VECTOR MACHINE
svm_clf = svm.SVC(kernel='linear') # Linear Kernel
# train the model
svm_clf.fit(X_train, y_train)
# make predictions
svm_clf_pred = svm_clf.predict(X_test)
# print the accuracy
print("Accuracy of Support Vector Machine: ",
accuracy_score(y_test, svm_clf_pred))
输出:
Accuracy of Gaussian Naive Bayes: 0.9333333333333333
Accuracy of Decision Tree Classifier: 0.9555555555555556
Accuracy of Support Vector Machine: 1.0
总结
分类是一个非常广阔的研究领域。尽管它只是机器学习的一小部分,但它是最重要的一部分。