概述
机器学习评估标准汇总(未完)
- 聚类性能度量
- 外部指标
- Jaccard系数
- FM指数
- 内部指标
- DB指数
- Dunn指数
- 参考资料
python环境
聚类性能度量
外部指标
聚类结果与某个参考模型进行比较
quad
首先,先定义计算用到的数据集。对于数据集
D
=
{
x
1
,
x
2
,
.
.
.
,
x
n
}
D={x_1,x_2,...,x_n}
D={x1,x2,...,xn},假定通过聚类得出的聚类结果为
C
=
{
c
1
,
c
2
,
.
.
.
c
k
}
C={c_1,c_2,...c_k}
C={c1,c2,...ck} ,每一类的类别标签为
λ
lambda
λ;参考模型的聚类结果为
C
∗
=
{
c
1
∗
,
c
2
∗
,
.
.
.
,
c
s
∗
}
C^*={c^*_1, c^*_2,...,c^*_s}
C∗={c1∗,c2∗,...,cs∗},类别标签为
λ
∗
lambda^*
λ∗。
定义四个集合:
a
=
∣
S
S
∣
,
S
S
=
{
(
x
i
,
x
j
)
∣
λ
i
=
λ
j
,
λ
i
∗
=
λ
j
∗
,
i
<
j
}
a=|SS|, SS={(x_i,x_j)|lambda_i=lambda_j,lambda^*_i=lambda^*_j,i<j}
a=∣SS∣,SS={(xi,xj)∣λi=λj,λi∗=λj∗,i<j}
b
=
∣
S
D
∣
,
S
D
=
{
(
x
i
,
x
j
)
∣
λ
i
=
λ
j
,
λ
i
∗
≠
λ
j
∗
,
i
<
j
}
b=|SD|, SD={(x_i,x_j)|lambda_i=lambda_j,lambda^*_i neq lambda^*_j,i<j}
b=∣SD∣,SD={(xi,xj)∣λi=λj,λi∗=λj∗,i<j}
c
=
∣
D
S
∣
,
D
S
=
{
(
x
i
,
x
j
)
∣
λ
i
≠
λ
j
,
λ
i
∗
=
λ
j
∗
,
i
<
j
}
c=|DS|, DS={(x_i,x_j)|lambda_i neq lambda_j,lambda^*_i=lambda^*_j,i<j}
c=∣DS∣,DS={(xi,xj)∣λi=λj,λi∗=λj∗,i<j}
d
=
∣
D
D
∣
,
D
D
=
{
(
x
i
,
x
j
)
∣
λ
i
≠
λ
j
,
λ
i
∗
≠
λ
j
∗
,
i
<
j
}
d=|DD|, DD={(x_i,x_j)|lambda_ineqlambda_j,lambda^*_ineqlambda^*_j,i<j}
d=∣DD∣,DD={(xi,xj)∣λi=λj,λi∗=λj∗,i<j}
quad
也就是说随便从数据集中拿出两个样本来,那么这两个样本要么在同一类,要么不同类,只有这两种情况。那么在两个模型下,就会产生上面的那四种集合。且a+b+c+d=n*(n-1)/2,即无向完全图边的数目。
Jaccard系数
J
C
=
b
+
c
a
+
b
+
c
JC=dfrac{b+c}{a+b+c}
JC=a+b+cb+c
上述公式是python3.7中实现的公式,表明两个集合的不相似度。
#python=3.7
import scipy.spatial.distance as dist
a=[1,0,1]
#将上述集合转换为布尔集合,相同为1,不同为0
b=[0,1,1]
print(dist.jaccard(a,b))
#结果为0.6666666666666666
FM指数
F
M
I
=
a
a
+
b
⋅
a
a
+
c
FMI=sqrt{dfrac{a}{a+b}cdotdfrac{a}{a+c}}
FMI=a+ba⋅a+ca
表示两个集合的相似度
取值[0,1],越接近1相似度越大
#python=3.7
from sklearn.metrics.cluster import fowlkes_mallows_score
#输入分别为参照模型标签集合和预测模型标签集合
fowlkes_mallows_score([2, 2, 1, 1], [1, 1, 2, 2])#1.0
fowlkes_mallows_score([2, 2, 2, 1], [1, 1, 2, 2])#0.408248290463863
内部指标
直接进行聚类评估,不利用任何参考模型
quad 同样先定义一些函数:
- 类C内样本间的平均距离: a v g ( C ) = 2 ∣ C ∣ ( ∣ C ∣ − 1 ) ∑ 1 ≤ i < j ≤ ∣ C ∣ d i s t ( x i , x j ) avg(C)=dfrac{2}{|C|(|C|-1)}sum_{1le i lt j le|C|}dist(x_i,x_j) avg(C)=∣C∣(∣C∣−1)2∑1≤i<j≤∣C∣dist(xi,xj)
- 类内最远距离: d i a m ( C ) = m a x 1 ≤ i < j ≤ ∣ C ∣ d i s t ( x i , x j ) diam(C)=max_{1le ilt j le|C|}dist(x_i, x_j) diam(C)=max1≤i<j≤∣C∣dist(xi,xj)
- 两类的最近样本间距离: d m i n ( C i , C j ) = m i n x i ∈ C i , x j ∈ C j d i s t ( x i , x j ) d_{min}(C_i, C_j)=min_{x_iin C_i,x_j in C_j }dist(x_i,x_j) dmin(Ci,Cj)=minxi∈Ci,xj∈Cjdist(xi,xj)
- 两类中心点的距离: d c e n ( C i , C j ) = d i s t ( μ i , μ j ) d_{cen}(C_i,C_j)=dist(mu_i,mu_j) dcen(Ci,Cj)=dist(μi,μj)
DB指数
D
B
I
=
1
k
∑
i
=
1
k
m
a
x
j
≠
i
(
a
v
g
(
C
i
)
+
a
v
g
(
C
j
)
d
c
e
n
(
μ
i
,
μ
j
)
)
DBI=dfrac{1}{k}sumlimits^k_{i=1}max_{jne i}(dfrac{avg(C_i)+avg(C_j)}{d_{cen}(mu_i,mu_j)})
DBI=k1i=1∑kmaxj=i(dcen(μi,μj)avg(Ci)+avg(Cj))
quad
当聚类中心未给出时,DB指数可以评估模型聚类的优劣。DB指数反映了类间相似度,所以DBI越接近0,说明聚类效果越好
from sklearn import datasets
from sklearn.cluster import KMeans
from sklearn.metrics import davies_bouldin_score
iris = datasets.load_iris()
X = iris.data
#(150,4) 有四个特征
kmeans = KMeans(n_clusters=3, random_state=1).fit(X)
labels = kmeans.labels_ #(150,)
davies_bouldin_score(X, labels)#0.6619715465007528
Dunn指数
D
I
=
m
i
n
1
≤
i
≤
k
{
m
i
n
j
≠
i
(
d
m
i
n
(
C
i
,
C
j
)
max
1
≤
l
≤
k
d
i
a
m
(
C
l
)
)
}
DI=min_{1le i le k}{min_{jne i}(dfrac{d_{min}(C_i,C_j)}{max_{1le l le k}diam(C_l)})}
DI=min1≤i≤k{minj=i(max1≤l≤kdiam(Cl)dmin(Ci,Cj))}
quad
python中没有现成的DI代码,需要自己造轮子
quad
DI代表了类间的距离关系,值越大越好。
参考资料
[1] : https://scikit-learn.org/stable/modules/classes.html?highlight=ri#module-sklearn.metrics
[2] : 周志华 机器学习 西瓜书
最后
以上就是粗暴小白菜为你收集整理的机器学习评估标准汇总以及在python中的函数调用聚类性能度量参考资料的全部内容,希望文章能够帮你解决机器学习评估标准汇总以及在python中的函数调用聚类性能度量参考资料所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复