目录
一.基础知识
1.理论概念
随机翻转:对原始数据进行随机旋转是一种数据增强技术,旨在增加数据的多样性和丰富性,从而提高模型的泛化能力和鲁棒性。
作用:通过对原始数据进行随机旋转,我们可以创建更多的训练数据,这些数据与原始数据有所不同,但仍然保留了原始数据的语义信息。这样做的目的是为了让模型接触到更多的样本变化,从而提高其对不同情况的适应能力。
特征缩放:是一种数据预处理技术,用于将数据集中的特征值映射到一个共同的尺度或范围内,以便更好地进行数据分析和模型训练,常见的方法有标准化、正则化(与下不同,注意区分)和中心化。
泛化能力:泛化能力是指机器学习模型对未见过的数据或新的场景的适应能力。具体来说,泛化能力指的是模型在训练集上学习到的知识和模式能够有效地应用于新的数据集或不同的任务中。
鲁棒性:鲁棒性(Robustness)是指系统、模型或算法在面对各种干扰、不确定性或异常情况时保持其性能和可靠性的能力。
作用:鲁棒性是评估模型在实际应用中可靠性和稳定性的重要指标之一,对于许多领域的系统和算法设计都具有重要意义。
过拟合:是指模型在训练数据上表现很好,但在新的数据上表现不佳,因为模型过于拟合了训练数据的噪声和异常值。
交叉验证:交叉验证(Cross-validation)是一种用于评估机器学习模型性能的技术。它的基本思想是将数据集分成多个子集,然后在每个子集上训练和测试模型,最后将所有子集的测试结果进行平均或综合以得到模型的总体性能评估。
原理:在交叉验证中,常用的方法包括 k 折交叉验证(k-fold cross-validation)和留一交叉验证(leave-one-out cross-validation)。
在 k 折交叉验证中,将数据集分为 k 个不相交的子集,每次使用其中 k-1 个子集作为训练集,剩余的 1 个子集作为验证集。这样可以进行 k 次训练和验证,每次使用不同的验证集。通过计算 k 次验证集上的平均性能指标,可以对模型的泛化能力进行评估。
在留一交叉验证中,每次将一个样本作为验证集,其余样本作为训练集。这样进行 n 次训练和验证,每次使用不同的验证样本。最后计算 n 次验证结果的平均性能指标。
交叉验证的结果通常包括模型在每个子集上的性能指标(如准确率、召回率、F1 分数等)以及这些指标的平均值或加权平均值。通过比较不同模型在交叉验证结果上的表现,可以选择最优的模型或超参数。
正则化:参数正则化方法的核心主要是对损失函数Loss Function 添加惩罚项 Penalty:
这里, ||w||1表示参数向量w的L1范数,L1范数为数向量w中各个元素的绝对值之和。
这里,||w||2表示参数向量w的L2范数,L2范数为向量w中各个元素的平方和。
L2/L1正则化都是通过添加一个惩罚项,来调节模型参数(权重w),使loss最小,(例如w一开始数值大,则loss会变大,则在反向传播每次更新权重时,就会对这个w进行惩罚,既降低w,直到模型认为loss已经最优)
ROC图:ROC 图(Receiver Operating Characteristic curve)在机器学习中是一种用于评估二分类模型性能的图形化工具。它可以帮助我们理解和比较不同模型在不同阈值下的真正率(True Positive Rate,TPR)和假正率(False Positive Rate,FPR)之间的关系。
2.常见问题
1.怎么解决模型过拟合问题?
解决模型过拟合的方法有很多,以下是一些常见的方法:
- 数据增强:通过对原始数据进行随机旋转、缩放、翻转等操作,可以增加数据的多样性,从而减少过拟合的风险。
- 正则化:通过添加正则化项(如L1、L2正则化)可以限制模型的复杂度,从而减少过拟合的风险。
- 超参数调整:通过调整模型的超参数(如学习率、核大小等)可以减少过拟合的风险。
- 集成学习:通过使用多个模型进行集成学习,可以减少过拟合的风险。
- 训练集划分:通过将训练集划分为多个子集,并在不同的子集上训练不同的模型,可以减少过拟合的风险。
需要注意的是,不同的模型和任务可能需要不同的方法来解决过拟合问题。在实际应用中,需要根据具体情况选择合适的方法。
2.如何通过调整正则化参数来提高模型的泛化能力?
正则化参数的调整可以对模型的泛化能力产生影响。以下是一些常见的方法来通过调整正则化参数来提高模型的泛化能力:
-
选择合适的正则化方法:不同的正则化方法(如 L1 正则化和 L2 正则化)对模型的泛化能力有不同的影响。L1 正则化倾向于产生稀疏的解,可能导致一些特征的权重为零,从而有助于减少过拟合。L2 正则化则倾向于使权重更加平滑,有助于控制模型的复杂度。
-
调整正则化参数的大小:正则化参数的大小控制了对模型复杂度的惩罚程度。较小的正则化参数值会减弱对模型复杂度的限制,可能导致过拟合。较大的正则化参数值会更强地约束模型,可能导致欠拟合。因此,需要在过拟合和欠拟合之间找到一个合适的平衡点。
-
使用交叉验证:交叉验证是一种常用的评估模型性能的方法。可以使用交叉验证来选择最佳的正则化参数值。通过在不同的正则化参数值下进行交叉验证,并选择在验证集上性能最好的参数值。
-
考虑数据集大小:数据集的大小也会影响正则化参数的选择。对于较小的数据集,较大的正则化参数可能会导致过拟合,因为模型可能无法从有限的数据中学习到足够的信息。对于较大的数据集,较大的正则化参数可能更适合,因为它可以更好地控制模型的复杂度。
-
监控模型的性能指标:在调整正则化参数时,需要同时监控模型在训练集和验证集上的性能指标。如果在验证集上的性能有所提高,而在训练集上的性能没有显著下降,那么可以认为找到了一个较好的正则化参数值。
需要注意的是,最佳的正则化参数值可能会因问题的复杂性、数据集的特性以及模型的结构而有所不同。因此,通常需要进行一些实验和调优来找到最适合特定任务的正则化参数值。
3.ROC图的含义及其作用?
ROC也称受试者工作特征曲线,在机器学习中是一种用于评估二分类模型性能的图形化工具。它可以帮助我们理解和比较不同模型在不同阈值下的真正率(True Positive Rate,TPR)和假正率(False Positive Rate,FPR)之间的关系。
ROC 图的横轴表示假正率(FPR),即在所有负样本中被误分类为正样本的比例。纵轴表示真正率(TPR),即在所有正样本中被正确分类为正样本的比例。
绘制 ROC 图的步骤如下:
- 对模型进行预测,并将预测结果与真实标签进行比较。
- 针对每个可能的阈值,计算真正率(TPR)和假正率(FPR)。
- 将不同阈值下的 TPR 和 FPR 绘制在 ROC 图上。
ROC 图的主要作用包括:
- 比较不同模型的性能:通过比较不同模型的 ROC 曲线,可以直观地评估它们在不同阈值下的性能。ROC 曲线越靠近左上角,表示模型的性能越好。
- 选择最优阈值:通过观察 ROC 曲线,可以找到一个最优的阈值,使得模型在真正率和假正率之间达到一个较好的平衡。
- 评估模型的稳定性:如果多次绘制 ROC 曲线得到的结果相似,说明模型的性能比较稳定。
- 用于临床诊断等领域:ROC 图在医学诊断、欺诈检测等领域中也被广泛应用,帮助医生或决策者做出更准确的决策。
总之,ROC 图是一种非常有用的工具,它可以帮助我们更好地理解和评估机器学习模型的性能,以及在实际应用中做出更明智的决策。
在计算机科学中,阈值通常用来表示一个二进制分类器的决策边界。例如,当使用机器学习算法进行图像分类时,可以使用一个阈值来决定一张图片是属于某个类别还是不属于该类别。
4.梯度下降算法的原理
梯度下降法的原理可以用爬山来形象解释。在爬山时,我们通常会选择坡度较缓的方向,这样可以更轻松地爬到山顶。类似地,在梯度下降法中,我们选择目标函数的负梯度方向,使得函数值在该方向上下降最快。
具体来说,在梯度下降法中,我们首先选择一个初始点 x0,然后计算该点处的梯度 g(x0)。接下来,我们沿着负梯度方向移动一小步,到达新的点 x1=x0-αg(x0),其中 α 是一个学习率。在这个过程中,我们不断更新参数,使得函数的目标函数值不断下降,最终收敛到最小值。
具体地,梯度下降法的步骤如下:
- 定义目标函数:根据问题的需求,定义一个目标函数 f(x),其中 x 是待优化的参数。
- 初始化参数:选择一个初始值 x0,通常是随机选择的。
- 计算梯度:根据目标函数 f(x),计算在 x0 处的梯度 g(x0)。
- 更新参数:根据梯度 g(x0),计算一个新的参数 x1=x0-αg(x0),其中 α 是一个学习率。
- 重复迭代:重复步骤 3 和步骤 4,直到目标函数 f(x)收敛到最小值。
需要注意的是,学习率的选择对于梯度下降法的收敛速度和精度至关重要。如果学习率过大,可能会导致算法不稳定,甚至可能会陷入局部最小值。如果学习率过小,则会导致算法收敛速度过慢。因此,在实际应用中,需要选择合适的学习率,以确保算法的收敛性和效率。
二.机器学习算法介绍
1.多元线性回归
多元线性回归是一种常用的统计分析方法,用于建立自变量和因变量之间的线性关系模型。下面是多元线性回归算法的一般流程:
-
数据准备:收集相关的自变量和因变量数据,并将其整理为数据集。
-
变量选择:根据研究问题的背景和先验知识,选择与因变量可能相关的自变量。
-
数据预处理:对数据进行清洗、缺失值处理、标准化或正则化等预处理操作,以提高数据质量和模型的稳定性。
-
模型建立:使用最小二乘法(Least Squares)或其他合适的方法,构建多元线性回归模型。该模型可以表示为 Y = Xβ + ε,其中 Y 是因变量,X 是自变量矩阵,β 是回归系数向量,ε 是误差项。
-
系数估计:通过最小化模型的残差平方和,使用矩阵运算等方法估计回归系数。
-
模型评估:计算模型的拟合优度指标,如决定系数(R-squared)、均方误差(Mean Squared Error)等,以评估模型的拟合效果。
-
模型解释:对估计的回归系数进行解释,分析每个自变量对因变量的影响程度和方向。
-
模型验证:通过交叉验证、留一法等技术进行模型验证,评估模型的泛化能力和稳定性。
-
预测和应用:利用训练好的模型进行预测,并将其应用于实际问题中,如预测新数据的因变量值。
-
结果分析和报告:对模型的结果进行分析和解释,撰写报告或文章,分享研究结论。
需要注意的是,多元线性回归算法在应用时需要考虑多重共线性、异常值、模型选择等问题,并进行适当的诊断和改进。此外,根据实际情况,还可以进行特征工程、变量筛选、正则化等优化步骤,以提高模型的性能和可解释性。
2.逻辑回归
逻辑回归是一种统计分析模型,用于预测分类变量的结果。它是一种线性分类器,通常用于二分类问题,但也可以扩展到多分类问题。逻辑回归的基本思想是通过对特征进行线性组合,并将结果映射到一个逻辑函数上,从而得到分类结果。
逻辑回归的sigmoid逻辑函数数学表达式为:
,其中是输出值,是输入特征,是一个常数,称为逻辑回归的参数。
在机器学习中,逻辑回归通常用于解决二分类问题,例如将客户分为“购买”和“不购买”两类。在实际应用中,逻辑回归可以用于各种领域,例如医疗保健、金融、市场营销等。
逻辑回归的优点包括:
- 简单易懂:逻辑回归的数学表达式简单,易于理解和实现。
- 易于扩展:逻辑回归可以很容易地扩展到多分类问题。
- 速度快:逻辑回归的计算速度较快,可以在大规模数据集上进行训练和预测。
逻辑回归的缺点包括:
- 对异常值敏感:逻辑回归对异常值比较敏感,如果数据集中存在异常值,可能会导致模型的性能下降。
- 无法处理非线性问题:逻辑回归是一种线性分类器,无法处理非线性问题。
- 无法解释模型的决策过程:逻辑回归的决策过程是基于概率的,无法解释模型为什么做出某个决策。
总的来说,逻辑回归是一种简单易用的分类算法,适用于处理二分类问题,但在处理非线性问题和解释模型决策过程方面存在一些限制。
3.决策树
决策树是一种常用的监督学习算法,可用于分类和回归问题。其主要流程如下:
-
收集数据:收集与问题相关的数据,并进行预处理和清洗。
-
选择特征:选择对目标变量有较大影响的特征,这些特征将用于构建决策树。
-
构建决策树:根据选择的特征,使用递归方法构建决策树。从根节点开始,根据特征的取值将数据划分到不同的子节点。
-
节点分裂:在每个节点上,选择最佳的特征和分裂点,将数据划分到不同的子节点。这个过程可以通过计算信息增益、增益率或基尼系数等指标来确定最佳分裂。
-
重复分裂:递归地对每个子节点进行分裂,直到达到停止条件(例如,子节点中的数据都是同一类别或达到最小节点大小)。
-
剪枝:为了防止过拟合,可能需要对决策树进行剪枝。剪枝的方法包括预剪枝和后剪枝。
-
预测:使用构建好的决策树对新数据进行预测。根据数据在决策树中的路径,最终到达的叶子节点代表预测结果。
决策树算法的优点是易于理解和解释,能够处理非线性关系,并且在处理大规模数据时效率较高。然而,它可能容易过拟合,并且对特征的选择和分裂点的选择比较敏感。
这只是决策树算法的基本流程介绍,实际应用中可能会涉及更多的技术和调整,具体取决于使用的决策树算法和数据集的特点。
1. 决策树的剪枝策略
最基本的有两种:预剪枝(pre-pruning)和后剪枝(post-pruning):
1、预剪枝
预剪枝就是在决策树生成过程中提前停止树的增长的一种剪枝算法。主要思路是在决策树结点分裂之前,计算当前结点划分能否提升模型泛化能力,如果不能,则决策树在该结点停止生长。
2、后剪枝
后剪枝就是先构造一颗完整的决策树,然后自底向上的对非叶结点进行考察,若将该结点对应的子树换为叶结点能够带来泛化性能的提升,则把该子树替换为叶结点。
2.决策树中的特征选择
在决策树算法中,选择合适的特征来构建树是非常重要的一步。以下是一些常见的特征选择方法:
-
信息增益(Information Gain):信息增益是一种常用的特征选择方法,它衡量了特征对于目标变量的区分能力。信息增益越大,说明特征对于目标变量的预测能力越强,因此更适合作为决策树的分裂节点。
-
增益率(Gain Ratio):增益率是信息增益的一种改进方法,它在信息增益的基础上考虑了特征的熵。增益率可以克服信息增益偏向选择取值较多的特征的问题。
-
基尼系数(Gini Index):基尼系数是另一种衡量特征区分能力的指标。它反映了数据集的纯度,基尼系数越小,说明数据集的纯度越高,特征越适合作为分裂节点。
-
特征重要性评估:除了上述方法,还可以使用一些特征重要性评估方法,如随机森林算法中的特征重要性评估。这些方法可以衡量每个特征对于预测结果的贡献程度,从而帮助选择重要的特征。
-
先验知识和业务理解:结合先验知识和业务理解也是选择特征的重要因素。根据领域专家的经验和对数据的理解,可以选择与问题相关的特征,提高决策树的准确性和可解释性。
需要注意的是,特征选择方法的选择需要根据具体问题和数据集的特点进行权衡。在实际应用中,通常会结合多种特征选择方法来选择最合适的特征。同时,在构建决策树时,可以使用交叉验证等技术来评估不同特征选择方法的效果,并选择最优的特征子集。
4.随机森林
随机森林是一种基于决策树的集成学习算法,它通过构建多个决策树来进行预测。随机森林的基本思想是,通过随机选择一些特征子集来构建每个决策树,并通过对多个决策树的预测结果进行平均来得到最终的预测结果。
与决策树不同的是,随机森林中的决策树是通过随机选择特征子集来构建的,这可以减少过拟合的风险,并提高算法的泛化能力。此外,随机森林还可以通过引入随机噪声来增强算法的鲁棒性。
随机森林算法的优点是算法简单、易于实现,并且在处理大规模数据时效率较高。此外,随机森林的预测结果具有较好的泛化能力,并且算法具有较好的鲁棒性。
随机森林算法的缺点是在处理高维度数据时可能会出现维度灾难,并且在处理非线性关系时可能会表现不佳。此外,随机森林算法的计算复杂度较高,可能需要较长的时间来训练模型。
随机森林算法在数据挖掘、机器学习和自然语言处理等领域中得到了广泛的应用,例如用于预测股票价格、识别图像和语音等。
5.KNN(K近邻)算法
KNN(K-Nearest Neighbors)算法是一种常用的监督学习算法,用于分类或回归问题。以下是 KNN 算法的基本流程:
- 定义 K 值:选择一个整数 K,它表示在进行分类或回归时要考虑的最近邻的数量。
- 计算距离:对于每个待预测的样本,计算它与训练集中所有样本的距离。常见的距离度量包括欧几里得距离、曼哈顿距离和余弦相似度等。
- 选择 K 个最近邻:根据计算得到的距离,选择 K 个与待预测样本距离最近的训练样本。
- 多数投票或平均:对于分类问题,根据 K 个最近邻的类别进行多数投票,将得票最多的类别作为待预测样本的类别;对于回归问题,可以计算 K 个最近邻的平均值作为待预测样本的预测值。
- 重复步骤:对每个待预测的样本重复以上步骤,直到处理完所有的样本。
- 模型评估:使用交叉验证或留一法等技术评估模型的性能,并根据需要进行调整和改进。
KNN 算法的主要优点是易于理解和实现,对异常值具有较好的鲁棒性。然而,它的性能在很大程度上依赖于数据的分布和选择合适的 K 值。在高维数据或大规模数据集上,计算距离可能会变得非常耗时。
6.降维算法-PCA
降维算法-PCA属于无监督学习的一种。
主成分分析(Principal Component Analysis,PCA)是一种常用的降维算法,用于将高维数据投影到低维空间,同时保留数据的主要特征。
PCA 的基本思想是:将原始数据矩阵 X 分解为两个矩阵 U 和 V,其中 U 是一个 m×n 矩阵,包含原始数据的主要成分,V 是一个 n×n 矩阵,包含原始数据的协方差矩阵。
具体地,PCA 算法的步骤如下:
- 将原始数据矩阵 X 中心化,即减去其均值。
- 计算原始数据矩阵 X 的协方差矩阵 V。
- 计算协方差矩阵 S 的特征值和特征向量。
- 选择前 k 个特征值和特征向量,组成矩阵 U。
- 将原始数据矩阵 X 投影到矩阵 U 上,得到降维后的数据矩阵 Y。
通过以上步骤,PCA 算法可以将原始数据从高维空间投影到低维空间,同时保留数据的主要特征。PCA 算法在机器学习、数据分析和图像处理等领域有着广泛的应用。
7.朴素贝叶斯
朴素贝叶斯算法是一种基于贝叶斯定理和假设特征条件独立的分类方法。下面是朴素贝叶斯算法的基本流程:
- 特征选择:根据问题的需求,选择对分类有重要影响的特征。
- 假设特征条件独立:在朴素贝叶斯算法中,假设各个特征之间相互独立。
- 计算先验概率:根据训练数据计算每个类别出现的概率,即先验概率。
- 计算条件概率:对于每个特征,计算在每个类别下该特征出现的概率,即条件概率。
- 构建模型:根据先验概率和条件概率构建朴素贝叶斯分类器模型。
- 预测分类:对于新的样本,根据模型计算该样本属于每个类别的概率。
- 选择最大概率的类别作为预测结果。
需要注意的是,朴素贝叶斯算法的性能在很大程度上依赖于特征之间的独立性假设。如果特征之间存在较强的相关性,可能会导致分类效果不佳。在实际应用中,可以通过特征选择、特征工程或使用其他改进的朴素贝叶斯算法来解决这个问题。
8.支持向量机(SVM)
支持向量机(Support Vector Machine,SVM)是一种二分类算法,其主要思想是找到一个超平面,将训练数据分为两类,同时最大化超平面与最近数据点之间的距离。SVM 通过求解一个凸二次规划问题来找到最佳超平面,并通过核技巧来处理非线性数据。
SVM 在机器学习、数据挖掘和模式识别等领域有着广泛的应用,如文本分类、图像识别、情感分析等。
9.k-means(K均值)算法
K-Means 算法是一种常用的聚类算法,属于非监督学习算法。其基本流程如下:
-
确定聚类数量 K:首先需要确定要将数据分成多少个群组,即聚类数量 K。
-
初始化聚类中心:随机选择 K 个数据点作为初始的聚类中心。
-
分配数据点:将每个数据点分配给距离最近的聚类中心,根据数据点与聚类中心的距离来计算。
-
更新聚类中心:计算每个聚类中的所有数据点的平均值,并将其作为新的聚类中心。
-
重复步骤 3 和步骤 4,直到聚类中心不再发生明显变化或达到最大迭代次数。
-
输出聚类结果:根据最终的聚类中心确定每个数据点所属的群组。
K-Means 算法的主要优点是简单、快速,适用于处理大规模数据集。然而,它对初始聚类中心的选择比较敏感,可能会陷入局部最优解。为了提高算法的性能,可以尝试多次运行 K-Means 算法,并选择最佳的聚类结果。
三、在机器学习中的重要技术及python实现
1.预处理阶段
1.1数据标准化
原理
数据标准化是一种数据预处理技术,用于将数据映射到一个共同的尺度或范围内,使得不同变量之间具有可比性。其原理和作用如下:
- 原理:
- 数据标准化的基本思想是对每个变量进行线性变换,使得它们的平均值为 0,标准差为 1。这可以通过减去平均值并除以标准差来实现。
- 对于数据集,其中表示第个样本的特征值,数据标准化可以通过以下公式进行计算:
其中,表示标准化后的第个样本的特征值,表示数据集的平均值,表示数据集的标准差。
代码实现
import pandas as pd
from sklearn.preprocessing import StandardScaler
def z_score_std(df):
# 计算每列的均值和标准差
means = df.mean()
stds = df.std()
# 使用公式进行标准化
df_std = (df - means) / stds
return df_std
def min_max_std(df):
# 计算每列的最大值和最小值
max_values = df.max()
min_values = df.min()
# 使用公式进行标准化
df_std = (df - min_values) / (max_values - min_values)
return df_std
# 创建一个包含示例数据的 DataFrame
data = {'A': [1, 2, 3, 4, 5],
'B': [6, 7, 8, 9, 10],
'C': [11, 12, 13, 14, 15]}
df = pd.DataFrame(data)
z_score_std = z_score_std(df)
min_max_std = min_max_std(df)
df = StandardScaler().fit_transform(df) #调库
df, z_score_std, min_max_std
2.模型建立阶段
2.1梯度下降法
梯度下降法是一种常用的优化算法,用于求解函数的最小值。其基本思想是沿着函数的负梯度方向不断更新参数,使得函数值不断减小,最终收敛到最小值点。
具体来说,梯度下降法通过计算函数在每个参数点处的梯度,并根据梯度的方向和大小来更新参数。梯度是函数在该点处的变化率,负梯度则是函数在该点处下降最快的方向。因此,沿着负梯度方向更新参数,可以使得函数值更快地减小,从而更快地收敛到最小值点。
在机器学习中,梯度下降法常用于求解损失函数的最小值,从而优化模型的参数。通过不断地更新模型的参数,使得损失函数不断减小,最终得到最优的模型参数,从而提高模型的性能。
以下代码模拟简单的梯度下降法过程:
import numpy as np
import matplotlib.pyplot as plt
# 生成包含10个等间距元素的数组,范围从-1到6
x = np.linspace(-1, 6, 120)
y = (theta - 2.5) **2
# 定义梯度下降函数,init_theta 为初始点,eta为学习率,n指方法迭代次数,epsilon指精准度下限
def gredient_descent(init_theta, eta, n=1e4, epsilon=1e-8):
theta = init_theta
theta_list.append(init_theta)
i = 0
while i < n and (theta - 2.5) **2 < 100:
last_theta = theta
gradient_y = 2 * (theta - 2.5)
# 类似以梯度方向(最快方向)改变theta值,使得最大化减少损失函数值
theta = theta - eta * gradient_y
theta_list.append(theta)
if( abs((theta - 2.5) **2 - (last_theta - 2.5) **2)< epsilon):
break
i += 1
eta = 0.1
theta_list = []
gredient_descent(0, eta)
# 可视化梯度下降结果
plt.xlabel('参数theta', loc='right')
plt.ylabel('损失函数Loss', loc='top')
plt.grid()
plt.plot(x,y)
plt.plot(np.array(theta_list), (np.array(theta_list)-2.5)**2, color = 'r', marker = '+')
plt.show()
3.模型评估阶段
3.1混淆矩阵
混淆矩阵(Confusion Matrix)是一种用于评估分类模型性能的工具。它以表格形式展示了模型在不同类别上的预测结果与真实结果之间的关系。
代码实现(包括利用seaborn库中热力图形式绘制混淆矩阵):
y_test 为测试集的真实值,y_pred为测试集的模型预测值。
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.metrics import confusion_matrix
# 设置中文字体
plt.rcParams['font.sans-serif'] = ['KaiTi', 'SimHei', 'FangSong']
# 设置字体大小
plt.rcParams['font.size'] = 15
# 保证正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 生成混淆矩阵
confusion_m = confusion_matrix(y_test, y_pred)
# 利用热力图绘制混淆矩阵
sns.heatmap(confusion_m, annot=True, fmt='g', cmap='Reds',
xticklabels=[' 0', ' 1'],
yticklabels=[' 0', ' 1'])
# 设置横轴标签
plt.ylabel('真实值')
# 设置纵轴标签
plt.xlabel('预测值')
# 设置主题
plt.title('混淆矩阵')
#显示图形和图形数据
plt.show(), confusion_m
3.2分类报告
分类报告提供了关于分类模型在不同类别上的性能的详细信息,包括准确度、精度、召回率、F1 分数等指标。
from sklearn.metrics import classification_report
report = classification_report(y_test, y_pred)
# 使用print输出,识别制表符
print(report)
以下是准确率(Accuracy)、精度(Precision)、召回率(Recall)和 F1 分数(F1 Score)的公式:
- 准确率(Accuracy):用于衡量分类器在所有样本上的正确分类比例,它是真阳性率(True Positive Rate,TPR)和真阴性率(True Negative Rate,TNR)的和。
准确率 = (TP + TN)/(TP + FP + FN + TN)
其中,TP 表示真阳性样本数量,TN 表示真阴性样本数量,FP 表示假阳性样本数量,FN 表示假阴性样本数量。
2. 精度(Precision):用于衡量分类器在预测为正例的样本中,真正为正例的比例。
精度 = TP /(TP + FP)
3. 召回率(Recall):用于衡量分类器在所有正例样本中,正确预测为正例的比例。
召回率 = TP /(TP + FN)
4.F1 分数(F1 Score):是精度和召回率的调和平均值,它综合考虑了精度和召回率两个指标。
F1 分数 = 2 * 精度 * 召回率 /(精度 + 召回率)
F1 分数在精度和召回率都较高时取最大值,当其中一个指标较低时会相应地降低。
四、深度学习一基于神经网络
以下是一个使用 Python 的 TensorFlow
和 Keras
库实现的简单神经网络,用于鸢尾花数据集的分类任务:
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import OneHotEncoder
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
def train_and_evaluate_model(X,y):
# 将标签进行独热编码
encoder = OneHotEncoder(sparse=False)
y_encoded = encoder.fit_transform(y.reshape(-1, 1))
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y_encoded, test_size=0.2, random_state=42)
# 构建神经网络模型
model = Sequential([
Dense(64, activation='relu', input_shape=(4,)),
Dense(64, activation='relu'),
Dense(3, activation='softmax')
])
# 编译模型
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
# 训练模型
model.fit(X_train, y_train, epochs=50, batch_size=16, validation_split=0.1)
# 在测试集上评估模型
loss, accuracy = model.evaluate(X_test, y_test)
print(f"Test Loss: {loss:.4f}, Test Accuracy: {accuracy:.4f}")
# 加载鸢尾花数据集
iris = load_iris()
X = iris.data
y = iris.target
# 调用函数进行模型训练和评估
train_and_evaluate_model(X,y)