数据科学【六】:聚类(二)
本文数据采用mnist dataset。
获得聚类中心点
使用cluster_centers_ 即可。 示例:将mnist数据集分为十个聚类,并绘制各个中心点。
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.datasets import load_digits
mnist = load_digits()
data_a = mnist.data
kmeans_a = KMeans(n_clusters = 10)
kmeans_a.fit(data_a)
from sklearn.decomposition import PCA
centers = PCA(2).fit_transform(kmeans_a.cluster_centers_)
plt.scatter(centers[:, 0], centers[:, 1])
plt.show()
聚类差异评价方式
我们可以使用disagree distance来评价两个聚类之间的差异。其定义为:
D
(
P
,
C
)
=
Σ
x
,
y
I
P
,
C
(
x
,
y
)
D(P, C)=\Sigma _{x, y} \mathbb{I}_{P, C}(x, y)
D(P,C)=Σx,y?IP,C?(x,y) 其中
I
P
,
C
(
x
,
y
)
=
{
1
,
若
P
与
C
在
x
,
y
的
的
归
属
问
题
上
不
同
0
\mathbb{I}_{P,C}(x,y)=\left\{ \begin{aligned} 1& , 若P与C在x, y的的归属问题上不同\\ 0 & \end{aligned} \right.
IP,C?(x,y)={10?,若P与C在x,y的的归属问题上不同? 举个例子:下表为对
x
1
x_1
x1?至
x
5
x_5
x5?,
P
P
P,
C
C
C两聚类给出的标签:
| P | C |
---|
x
1
x_1
x1? | 1 | 1 |
x
2
x_2
x2? | 1 | 2 |
x
3
x_3
x3? | 2 | 1 |
x
4
x_4
x4? | 3 | 3 |
x
5
x_5
x5? | 3 | 4 |
对于
x
1
,
x
2
x_1, x_2
x1?,x2?,
P
P
P认为它们标签相同, 均为1, 而
C
C
C认为它们属不同类,因此diagree distance加上1. 对于
x
1
,
x
4
x_1, x_4
x1?,x4?,
P
P
P认为它们标签不同,
C
C
C 也认为它们标签不同,因此两个聚类在这两个数据上达成一致, diagree distance加上0. 示例:计算上一节进行的10分类与原标签的disagree distance
labels_b = mnist.target
labels_a = kmeans_a.labels_
disagreement_dis = 0
for i in range(len(labels_b)-1):
for j in range(i+1, len(labels_b)):
if (labels_a[i] == labels_a[j]) != (labels_b[i] == labels_b[j]):
disagreement_dis += 1
print(disagreement_dis)
99161
|