- 机器学习基础
- ML - 首页
- ML - 简介
- ML - 入门
- ML - 基本概念
- ML - 生态系统
- ML - Python 库
- ML - 应用
- ML - 生命周期
- ML - 必备技能
- ML - 实现
- ML - 挑战与常见问题
- ML - 局限性
- ML - 现实案例
- ML - 数据结构
- ML - 数学基础
- ML - 人工智能
- ML - 神经网络
- ML - 深度学习
- ML - 获取数据集
- ML - 分类数据
- ML - 数据加载
- ML - 数据理解
- ML - 数据准备
- ML - 模型
- ML - 监督学习
- ML - 无监督学习
- ML - 半监督学习
- ML - 强化学习
- ML - 监督学习 vs. 无监督学习
- 机器学习数据可视化
- ML - 数据可视化
- ML - 直方图
- ML - 密度图
- ML - 箱线图
- ML - 相关矩阵图
- ML - 散点矩阵图
- 机器学习统计学
- ML - 统计学
- ML - 均值、中位数、众数
- ML - 标准差
- ML - 百分位数
- ML - 数据分布
- ML - 偏度和峰度
- ML - 偏差和方差
- ML - 假设
- ML中的回归分析
- ML - 回归分析
- ML - 线性回归
- ML - 简单线性回归
- ML - 多元线性回归
- ML - 多项式回归
- ML中的分类算法
- ML - 分类算法
- ML - 逻辑回归
- ML - K近邻算法 (KNN)
- ML - 朴素贝叶斯算法
- ML - 决策树算法
- ML - 支持向量机
- ML - 随机森林
- ML - 混淆矩阵
- ML - 随机梯度下降
- ML中的聚类算法
- ML - 聚类算法
- ML - 基于质心的聚类
- ML - K均值聚类
- ML - K中心点聚类
- ML - 均值漂移聚类
- ML - 层次聚类
- ML - 基于密度的聚类
- ML - DBSCAN 聚类
- ML - OPTICS 聚类
- ML - HDBSCAN 聚类
- ML - BIRCH 聚类
- ML - 关联传播
- ML - 基于分布的聚类
- ML - 凝聚层次聚类
- ML中的降维
- ML - 降维
- ML - 特征选择
- ML - 特征提取
- ML - 向后剔除法
- ML - 前向特征构造
- ML - 高相关性过滤
- ML - 低方差过滤
- ML - 缺失值比例
- ML - 主成分分析
- 强化学习
- ML - 强化学习算法
- ML - 利用与探索
- ML - Q学习
- ML - REINFORCE 算法
- ML - SARSA 强化学习
- ML - 演员-评论家方法
- 深度强化学习
- ML - 深度强化学习
- 量子机器学习
- ML - 量子机器学习
- ML - 基于Python的量子机器学习
- 机器学习杂项
- ML - 性能指标
- ML - 自动化工作流
- ML - 提升模型性能
- ML - 梯度提升
- ML - 自举汇聚 (Bagging)
- ML - 交叉验证
- ML - AUC-ROC 曲线
- ML - 网格搜索
- ML - 数据缩放
- ML - 训练和测试
- ML - 关联规则
- ML - Apriori 算法
- ML - 高斯判别分析
- ML - 成本函数
- ML - 贝叶斯定理
- ML - 精度和召回率
- ML - 对抗性
- ML - 堆叠
- ML - 轮次
- ML - 感知器
- ML - 正则化
- ML - 过拟合
- ML - P值
- ML - 熵
- ML - MLOps
- ML - 数据泄露
- ML - 机器学习的商业化
- ML - 数据类型
- 机器学习 - 资源
- ML - 快速指南
- ML - 速查表
- ML - 面试问题
- ML - 有用资源
- ML - 讨论
机器学习 - 分类算法
分类是一种监督学习技术,它根据一组输入特征预测分类目标变量。它通常用于解决垃圾邮件检测、欺诈检测、图像识别、情感分析等许多问题。
分类模型的目标是学习输入特征 (X) 和目标变量 (Y) 之间的映射函数 (f)。此映射函数通常表示为决策边界,该边界将输入特征空间中的不同类别分隔开。模型训练完成后,即可用于预测新样本的类别。
现在让我们来看一下构建分类模型所涉及的步骤:
数据准备
第一步是收集和预处理数据。这包括数据清洗、处理缺失值以及将分类变量转换为数值变量。
特征提取/选择
下一步是从数据中提取或选择相关特征。这是一个重要步骤,因为特征的质量会极大地影响模型的性能。一些常见的特征选择技术包括相关性分析、特征重要性排序和主成分分析。
模型选择
选择好特征后,下一步是选择合适的分类算法。有很多不同的算法可供选择,每种算法都有其自身的优点和缺点。一些流行的算法包括逻辑回归、决策树、随机森林、支持向量机和神经网络。
模型训练
选择合适的算法后,下一步是在标记的训练数据上训练模型。在训练过程中,模型学习输入特征和目标变量之间的映射函数。模型参数会迭代调整,以最大限度地减少预测输出与实际输出之间的差异。
模型评估
训练好模型后,下一步是在单独的一组验证数据上评估其性能。这样做是为了估计模型的准确性和泛化性能。常见的评估指标包括准确率、精确率、召回率、F1 分数和受试者工作特征 (ROC) 曲线下的面积。
超参数调整
在许多情况下,可以通过调整模型的超参数来进一步提高其性能。超参数是在训练模型之前选择的设置,用于控制学习率、正则化强度和神经网络中隐藏层的数量等方面。网格搜索、随机搜索和贝叶斯优化是一些常用的超参数调整技术。
模型部署
训练和评估模型后,最后一步是将其部署到生产环境中。这包括将模型集成到更大的系统中,在真实数据上进行测试,并随着时间的推移监控其性能。
分类中的学习器类型
在分类问题中,我们有两种类型的学习器:
懒惰学习器
顾名思义,这种学习器在存储训练数据后等待测试数据出现。只有在获得测试数据后才进行分类。它们在训练上花费的时间较少,但在预测上花费的时间较多。懒惰学习器的示例包括 K 近邻和基于案例的推理。
积极学习器
与懒惰学习器相反,积极学习器在存储训练数据后,无需等待测试数据出现即可构建分类模型。它们在训练上花费的时间较多,但在预测上花费的时间较少。积极学习器的示例包括决策树、朴素贝叶斯和人工神经网络 (ANN)。
在 Python 中构建分类器
Scikit-learn 是一个用于机器学习的 Python 库,可用于在 Python 中构建分类器。在 Python 中构建分类器的步骤如下:
步骤 1:导入必要的 Python 包
要使用 scikit-learn 构建分类器,我们需要导入它。我们可以使用以下脚本导入它:
import sklearn
步骤 2:导入数据集
导入必要的包后,我们需要一个数据集来构建分类预测模型。我们可以从 sklearn 数据集中导入它,也可以根据我们的需要使用其他数据集。我们将使用 sklearn 的乳腺癌威斯康星诊断数据库。我们可以使用以下脚本导入它:
from sklearn.datasets import load_breast_cancer
以下脚本将加载数据集;
data = load_breast_cancer()
我们还需要组织数据,这可以通过以下脚本完成:
label_names = data['target_names'] labels = data['target'] feature_names = data['feature_names'] features = data['data']
以下命令将打印标签的名称,在我们的数据库中为 **“恶性”** 和 **“良性”**。
print(label_names)
上述命令的输出是标签的名称:
['malignant' 'benign']
这些标签映射到二进制值 0 和 1。“恶性”癌症由 0 表示,“良性”癌症由 1 表示。
可以使用以下命令查看这些标签的特征名称和特征值:
print(feature_names[0])
上述命令的输出是标签 0(即 **恶性** 癌症)的特征名称:
mean radius
同样,标签 1 的特征名称可以如下产生:
print(feature_names[1])
上述命令的输出是标签 1(即良性癌症)的特征名称:
mean texture
我们可以使用以下命令打印这些标签的特征:
print(features[0])
这将给出以下输出:
[1.799e+01 1.038e+01 1.228e+02 1.001e+03 1.184e-01 2.776e-01 3.001e-01 1.471e-01 2.419e-01 7.871e-02 1.095e+00 9.053e-01 8.589e+00 1.534e+02 6.399e-03 4.904e-02 5.373e-02 1.587e-02 3.003e-02 6.193e-03 2.538e+01 1.733e+01 1.846e+02 2.019e+03 1.622e-01 6.656e-01 7.119e-01 2.654e-01 4.601e-01 1.189e-01]
我们可以使用以下命令打印这些标签的特征:
print(features[1])
这将给出以下输出:
[2.057e+01 1.777e+01 1.329e+02 1.326e+03 8.474e-02 7.864e-02 8.690e-02 7.017e-02 1.812e-01 5.667e-02 5.435e-01 7.339e-01 3.398e+00 7.408e+01 5.225e-03 1.308e-02 1.860e-02 1.340e-02 1.389e-02 3.532e-03 2.499e+01 2.341e+01 1.588e+02 1.956e+03 1.238e-01 1.866e-01 2.416e-01 1.860e-01 2.750e-01 8.902e-02]
步骤 3:将数据组织成训练集和测试集
由于我们需要在未见过的数据上测试我们的模型,因此我们将数据集分成两部分:训练集和测试集。我们可以使用 *sklearn* Python 包的 *train_test_split()* 函数将数据分成集合。以下命令将导入该函数:
from sklearn.model_selection import train_test_split
接下来,下一条命令将数据分割成训练集和测试集。在这个例子中,我们将40%的数据用于测试,60%的数据用于训练。
train, test, train_labels, test_labels = train_test_split(features,labels,test_size = 0.40, random_state = 42)
步骤 4:模型评估
将数据分成训练集和测试集后,我们需要构建模型。我们将使用朴素贝叶斯算法来实现这个目的。以下命令将导入GaussianNB模块:
from sklearn.naive_bayes import GaussianNB
现在,按照如下方式初始化模型:
gnb = GaussianNB()
接下来,使用以下命令训练模型:
model = gnb.fit(train, train_labels)
现在,为了评估,我们需要进行预测。这可以通过使用predict()函数来实现,如下所示:
preds = gnb.predict(test) print(preds)
这将给出以下输出:
[1 0 0 1 1 0 0 0 1 1 1 0 1 0 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 1 1 1 1 1 1 0 1 0 1 1 0 1 1 1 1 1 1 1 1 0 0 1 1 1 1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1 0 1 1 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 1 1 1 1 1 0 0 1 0 0 1 0 0 1 1 1 0 1 1 0 1 1 0 0 0 1 1 1 0 0 1 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 0 1 1 0 1 1 1 1 1 1 0 0 0 1 1 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 1 0 0 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 0 0 1 1 0 1]
输出中的一系列0和1是恶性和良性肿瘤类别的预测值。
步骤 5:查找准确率
我们可以通过比较两个数组,即test_labels和preds,来找到前面步骤中构建的模型的准确率。我们将使用accuracy_score()函数来确定准确率。
from sklearn.metrics import accuracy_score print(accuracy_score(test_labels,preds)) 0.951754385965
上述输出显示朴素贝叶斯分类器的准确率为95.17%。
分类评估指标
即使你完成了机器学习应用程序或模型的实现,工作也并没有完成。我们必须找出我们的模型有多有效?可能存在不同的评估指标,但我们必须仔细选择它,因为指标的选择会影响如何衡量和比较机器学习算法的性能。
以下是一些重要的分类评估指标,你可以根据你的数据集和问题类型选择:
混淆矩阵
混淆矩阵 - 这是衡量分类问题的性能最简单的方法,其中输出可以是两种或多种类型的类别。
各种机器学习分类算法
以下是一些重要的机器学习分类算法:
我们将在后面的章节中详细讨论所有这些分类算法。
应用
分类算法的一些最重要的应用如下:
- 语音识别
- 手写识别
- 生物特征识别
- 文档分类
在接下来的章节中,我们将讨论机器学习中一些最流行的分类算法。