机器学习(四) -- 模型评估(4)

系列文章目录及链接

上篇:机器学习(四) -- 模型评估(1)
           机器学习(四) -- 模型评估(2)
           机器学习(四) -- 模型评估(3)
下篇:机器学习(五) -- 监督学习(1) -- k近邻


前言

tips:标题前有“***”的内容为补充内容,是给好奇心重的宝宝看的,可自行跳过。文章内容被“文章内容”删除线标记的,也可以自行跳过。“!!!”一般需要特别注意或者容易出错的地方。

本系列文章是作者边学习边总结的,内容有不对的地方还请多多指正,同时本系列文章会不断完善,每篇文章不定时会有修改。


衡量模型泛化能力的评价标准就是性能度量(模型评估指标、模型评价标准),而针对不同的任务有不同的评价指标。按照数据集的目标值不同,可以把模型评估分为分类模型评估、回归模型评估和聚类模型评估。

四、 聚类模型评估指标

聚类试图将数据集中的样本划分为若干个通常是互不相交的子集,每个子集叫做一个“簇”(cluster),好的聚类算法,一般要求类簇具有:
        簇内 (intra-cluster) 相似度高
        簇间 (inter-cluster) 相似度低

即同一簇尽可能相似,不同簇尽可能不同。

聚类性能度量大致有两种,
        一类是指当数据集的外部信息可用时,通过比较聚类划分与外部准则的匹配度,可以评价不同聚类算法的性能。即将聚类结果于某个“参考模型”(真实值)进行比较。称为“外部指标”(external index);
        另一类主要基于数据集的集合结构信息从紧致性、分离性、连通性和重叠度等方面对聚类划分进行评价。即基于数据聚类自身进行评估的。称为“内部指标”(internal index).

外部指标:【兰德指数(RI,Rand index)、调整兰德指数(Adjusted Rand index)】、
【基于互信息的分数(MI,Mutual Information-based Score)、标准化互信息(NMI,Normalized Mutual Information)、调整互信息(AMI,Adjusted mutual information)】、
【同质性(Homogeneity Score)和完整性(Completeness Score)以及其调和平均(V-measure)】、
【Fowlkes-Mallows Scores(FMI)】

内部指标:
轮廓系数(Silhouette Coefficient)、Calinski-Harabaz指数(Calinski-Harabaz Index,也称Variance Ratio Criterion)、戴维森堡丁指数(DBI,Davies-Bouldin Index)

1、外部指标

首先需要定义几个变量:
(可以理解为聚类给出的簇,就是你的模型计算出来的结果,参考模型给出的簇,就是“真实”的簇,实际应该分成这个样子。)。

举个例子,参考模型给出的簇与聚类模型给出的簇划分如下:
        编号:    1, 2, 3, 4, 5, 6
        聚类簇: 0, 0, 1, 1, 2, 2
        参考簇: 0, 0, 0, 1, 1, 1

那么满足a的样本对就是(1,2)、(5,6)【1号和2号的聚类簇都是0,参考簇都是0;5号和6号的聚类簇都是2,参考簇都是1】,总共有两个样本对满足a,所以a=2。

同理,满足b的样本对是(3,4)【3号和4号聚类簇都是1,但参考簇不同】,所以b=1。

同理,满足c的样本对是(1,3)(2,3)(4,5)(4,6)【他们分别都是聚类簇不同,参考簇相同】,所以c=4。

同理,满足d的样本对是(1,4)(1,5)(1,6)(2,4)(2,5)(2,6)(3,5)(3,6)【他们分别聚类簇不同,参考簇也不同】,所以d=8。

用代码展示大概就是这个样子。

# 聚类模型给出的簇
y_predict=[0,0,1,1,2,2]
# 参考模型给出的簇
y_true=[0,0,0,1,1,1]

# 计算abcd
def get_abcd(y_predict,y_true):
    a=b=c=d=0
    for i in range(0,(len(y_predict)-1)):
        for j in range(i+1,len(y_predict)):
            if(y_predict[i]==y_predict[j])&(y_true[i]==y_true[j]):
                a=a+1;
            if(y_predict[i]==y_predict[j])&(y_true[i]!=y_true[j]):
                b=b+1;
            if(y_predict[i]!=y_predict[j])&(y_true[i]==y_true[j]):
                c=c+1;
            if(y_predict[i]!=y_predict[j])&(y_true[i]!=y_true[j]):
                d=d+1;
    return a,b,c,d

a,b,c,d=get_abcd(y_predict,y_true)
print(a,',',b,',',c,',',d)

1.1、兰德指数(RI,Rand index)

兰德指数衡量的是聚类算法将数据点分配到聚类中的准确程度。兰德指数的范围从0到1,1的值表示两个聚类完全相同,接近0的值表示两个聚类有很大的不同。兰德指数只能用于评估将样本点分成两个簇的聚类算法

公式

      

其中 都是表示任意两个样本为一类有多少种组合,是数据集中可以组成的总元素对数。
用刚才的例子计算出来的结果就是  

API

from sklearn.metrics import rand_score

rand_score(y_true,y_predict)

  

1.1.1、调整兰德指数(Adjusted Rand index)

未调整的兰德指数类取值区间为[ 0,1],没有一个固定的值表示两个随即标签的关系 ;调整的兰德指数将评分规范到了[−1, 1] 之间,以0.0表示两个随机标签的关系。其中值越接近1表示聚类结果越准确,值越接近0表示聚类结果与随机结果相当,值越接近-1表示聚类结果与真实类别完全相反。

完美的标签的得分为1.0,无相关标签的得分是负数或接近于0.0分。

公式

其中E(RI)是兰德系数的期望值。【其实就和归一化有点像(不完全一样哈)--死去的记忆突然攻击QwQ】

API

from sklearn.metrics import adjusted_rand_score

adjusted_rand_score(y_true,y_predict)

调整兰德系数是对称的,交换参数不会改变得分。

1.2、基于互信息的分数(MI,Mutual Information-based Score)

衡量的是聚类结果与真实标签之间的相似性。基于互信息的分数的取值范围为[0,1],其中值越接近1表示聚类结果越准确,值越接近0表示聚类结果与随机结果相当,值越小表示聚类结果与真实类别之间的差异越大。基于互信息的分数是一种相对指标,它的取值受到真实类别数量的影响。当真实类别数量很大时,基于互信息的分数可能会受到偏差。

公式

假设U与V是对N个样本标签的分配情况。

 

API

from sklearn.metrics import mutual_info_score

mutual_info_score(y_true,y_predict)

1.2.1、标准化互信息(NMI,Normalized Mutual Information)

公式

假设U与V是对N个样本标签的分配情况,则两种分布的熵(熵表示的是不确定程度):

API

from sklearn.metrics import normalized_mutual_info_score

normalized_mutual_info_score(y_true,y_predict)

 

1.2.2、调整互信息(AMI,Adjusted mutual information)

公式

API

from sklearn.metrics import adjusted_mutual_info_score

adjusted_mutual_info_score(y_true,y_predict)

!!!注意:MI,NMI,AMI这三个的参数也是对称的,互换不影响结果。

1.3、同质性(Homogeneity Score)和完整性(Completeness Score)以及其调和平均(V-measure)

1.3.1、同质性(Homogeneity Score)

每个簇只包含一个类的成员

公式

API

from sklearn.metrics import homogeneity_score

homogeneity_score(y_true,y_predict)

1.3.2、完整性(Completeness Score)

给定类的所有成员都分配给同一个簇

公式

API

from sklearn.metrics import completeness_score

completeness_score(y_true,y_predict)

1.3.3、V-measure

V-measure是同质性homogeneity和完整性completeness的调和平均数。

公式

API

from sklearn.metrics import v_measure_score

v_measure_score(y_true,y_predict)

1.4、Fowlkes-Mallows Scores(FMI)

FMI是Precision(精度)和 Recall(召回)的几何平均数。取值范围为 [0,1],越接近1越好。

公式

API

from sklearn.metrics import fowlkes_mallows_score

fowlkes_mallows_score(y_true,y_predict)

 2、内部指标

2.1、轮廓系数(Silhouette Coefficient)

轮廓分数使用同一聚类中的点之间的距离,以及下一个临近聚类中的点与所有其他点之间的距离来评估模型的表现。它主要基于样本点与其所属簇内和最近邻簇之间的距离、相似性和紧密度等因素来计算。数值越高,模型性能越好。轮廓系数的取值范围是[-1,1],同类别样本距离越相近,不同类别样本距离越远,值越大。当值为负数时,说明聚类效果很差。

公式

其中:
        a:样本与同一类别中所有其他点之间的平均距离。 
        b:样本与下一个最近的簇中所有其他点之间的平均距离。

API

from sklearn.metrics import silhouette_score
from sklearn.datasets import load_iris

# 加载数据
iris=load_iris()

from sklearn.cluster import KMeans

# 模型训练
kmeans_model = KMeans(n_clusters=3, random_state=1).fit(iris.data)
labels = kmeans_model.labels_


from sklearn.metrics import silhouette_score

# 轮廓系数
silhouette_score(iris.data,labels)

2.2、Calinski-Harabaz指数(Calinski-Harabaz Index,也称Variance Ratio Criterion)

通过计算类中各点与类中心的距离平方和来度量类内的紧密度,通过计算各类中心点与数据集中心点距离平方和来度量数据集的分离度,CH指标由分离度与紧密度的比值得到。从而,CH越大代表着类自身越紧密,类与类之间越分散,即更优的聚类结果。

公式

API

from sklearn.metrics import calinski_harabasz_score

calinski_harabasz_score(iris.data,labels)

2.3、戴维森堡丁指数(DBI,Davies-Bouldin Index)

是计算任意两类别的类内距离平均距离之和除以两聚类中心距离求最大值。DB越小,意味着类内距离越小同时类间距离越大。零是可能的最低值,接近零的值表示更好的分区。

公式

API

from sklearn.metrics import davies_bouldin_score

davies_bouldin_score(iris.data,labels)

 3、总结

外部指标:

Rand Index:用于衡量聚类结果和真实标签之间的相似度。
Adjusted Rand Score:Rand Index的调整版本,可以对随机结果进行惩罚。
Mutual Information Score:衡量聚类结果和真实标签之间的相似度。
Normalized Mutual Information Score:Mutual Information Score的归一化版本。
Adjusted Mutual Information Score:Normalized Mutual Information Score的调整版本。
Homogeneity and Completeness Score:分别衡量聚类结果的同质性和完整性。
V-Measure:基于Homogeneity和Completeness Score计算的综合评估指标。
Fowlkes-Mallows Score:用于衡量聚类结果和真实标签之间的相似度。

内部指标:

Silhouette Score:用于衡量聚类结果中每个样本点与自身簇和其他簇之间的相似度。
Calinski-Harabasz Index:基于簇内和簇间方差之间的比值来计算聚类性能。
Davies-Bouldin Index:基于簇内的紧密度和簇间的分离度来计算聚类性能。

一般情况下,主要是对无标签的数据进行聚类操作。如果在评价中用到外部指标,就需通过人工标注等方法获取标签,成本较高,因此内部指标的实际实用性更强。


旧梦可以重温,且看:机器学习(四) -- 模型评估(1)
                                    机器学习(四) -- 模型评估(2)
                                    机器学习(四) -- 模型评估(3)
欲知后事如何,且看:机器学习(五) -- 监督学习(1) -- k近邻

  • 21
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 机器学习模型评估、选择和验证是指评估模型的性能、从多个模型中选择最佳模型,并验证模型的泛化能力。常用的评估方法包括准确率、精确率、召回率、F1 分数、ROC 曲线和 AUC 等。常用的选择方法包括交叉验证、超参数调优、学习曲线分析等。 ### 回答2: 机器学习的目标是通过训练来构建模型,以便能够高效地预测未知数据。但是,模型的准确性不仅取决于所使用的算法,还取决于其它因素,例如数据和参数设置。 模型评估能够帮助我们了解模型性能的好坏。评估算法的过程通常涉及到数据划分、交叉验证和各种评估指标。一般来说,数据划分的过程将数据集拆分成训练集和测试集。用训练集来构建模型并进行参数调整,然后使用测试集来衡量模型的性能。交叉验证是在数据集合上的一个更安全和更可靠的方法,它将原始数据集划分成K个互斥的子集,并使用K-1个子集来训练模型,用剩余的子集来评估模型的性能。 选择正确的模型非常关键,因为模型的性能可以直接影响结果的准确性。选择模型的一个重要因素是如何表示数据集。数据可以使用多种方式表示,而不同的数据表示方式有不同的优劣。选择适当的模型是当然的,但是我们还应该使用技术来优化模型,并防止模型过度拟合或欠拟合。 模型验证是评估模型如何执行任务的最终步骤。验证后,我们可以使用模型进行预测并将其应用于新数据。如果模型的性能不符合要求,可以通过重新评估、更改数据集或改变模型参数来尝试改善。模型验证是机器学习流程中非常重要的一部分,可以确保我们的模型效果良好,从而为我们提供可靠的预测结果。 总之,机器学习是一种建立复杂模型的方法,不同的算法、数据表示方式和参数会影响其性能。为了找到最佳模型,我们需要进行模型评估、选择和验证等工作。这些步骤是机器学习流程的关键组成部分,可以帮助我们构建高效且准确的模型,从而应对各种实际应用场景。 ### 回答3: 机器学习是一种人工智能领域的重要技术,它允许计算机从历史数据中学习,建立预测模型,并用于未来的数据预测和决策。模型评估、选择与验证是机器学习过程中的重要一环,以保证模型的准确性、稳定性和泛化能力。 模型评估的目的是检验模型的表现,并度量其优劣。常用的评估指标包括精确度、召回率、F1值等,这些指标可以用于比较不同模型之间的性能表现。评估模型时,通常需要将数据集划分为训练集和测试集,训练集用于训练模型,而测试集用于评估模型性能。评估模型的结果可以指导我们调整模型的参数,提高模型的预测精度。 模型选择是在多个模型中选择最合适的模型。常用的模型选择方法包括交叉验证、留一法等。交叉验证是将数据集分成k个子集,每个子集轮流作为测试集进行模型评估,其余部分用于训练模型,最后将测试集误差取平均值作为综合误差来评估模型的性能。 模型验证是对模型的泛化能力的验证。泛化能力是指模型对未知数据的预测精度,即模型是否能够对新数据进行较好的预测。在模型验证中,需要将数据集划分为训练集、验证集和测试集。在训练集中训练模型,在验证集上调整模型参数,并在测试集上验证模型的泛化能力。常用的验证方法包括留存法、k折交叉验证等。 综上所述,模型评估、选择与验证对于机器学习中的预测模型非常重要。这些技术可以保证模型的准确性和稳定性,并提高模型的泛化能力,为数据分析和预测提供可靠依据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值