python sklearn工具包_使用Python的sklearn包做kmeans

使用Python的sklearn包做kmeans

标签:#kmeans##python##编程#

时间:2018/10/31 14:42:14

作者:小木

首先要安装numpy和sklearn包,然后运行sklearn的kmeans方法即可。

这里我们使用了三种评价方法,一种是

##### 1、Silhouette Coefficient

Silhouette Coefficient是对聚类方法进行解释和验证一致性的方法。该技术提供了一个简洁的图形表示,表明每个对象在其集群中的位置。

Silhouette Coefficient是对象与其自身簇(内聚力)相比与其他簇(分离)相似程度的度量。 值从-1到+1,其中高值表示对象与其自己的簇很好地匹配并且与相邻簇不匹配。 如果大多数对象具有高值,则聚类结果是合适的。 如果许多点具有低值或负值,则聚类效果不好,可能具有太多或太少的簇。

可以使用任何距离度量来计算Silhouette Coefficient结果,例如欧几里德距离或曼哈顿距离。

##### 2.Rand Index

Rand索引计算集群(由聚类算法返回)与基准分类的相似程度。 人们还可以将Rand指数视为算法所做出的正确决策百分比的度量。 它可以使用以下公式计算:

```math

RI = \frac{TP+TN}{TP+FP+FN+TN}

```

这里的TP是真实的正值数量,TN是真实的负值数量,FP是错误正值的数量,FN是错误负值的数量。

##### 3. between_ss / total_ss

这个是组间距离平方和和总的距离平方和之比,是R语言中KMeans内置的一个评价方法,见[使用R语言进行K-means聚类并分析结果](https://www.datalearner.com/blog/1051493902550927)

代码如下:

```python

from sklearn.cluster import KMeans

import numpy as np

from sklearn.metrics import silhouette_score

# 定义between_SS / total_SS 的计算方法

def sum_of_square_scores(original_data, predict_labels, cluster_centers, n_clusters):

avg = np.mean(original_data, axis=0)

dist = np.power(original_data - avg, 2)

total_ss = np.sum(dist)

within_squares = np.zeros((n_clusters, len(original_data[0])))

for i in range(0, len(original_data)):

cluster = predict_labels[i]

within_squares[cluster] += np.power(original_data[i] - cluster_centers[cluster], 2)

within_ss = np.sum(within_squares)

return (total_ss - within_ss) / total_ss

# 载入数据

X = np.loadtxt("D:/data/kmeans.txt", delimiter=' ')

# 运行KMeans

kmeans = KMeans(n_clusters=2, random_state=0).fit(X)

# 使用Silhouette Coefficient评价

sil_coeff = silhouette_score(X, kmeans.labels_, metric='euclidean')

# 使用between_ss / total_ss 评价

bss = sum_of_square_scores(X, kmeans.labels_, kmeans.cluster_centers_, kmeans.n_clusters)

print("coeff:" + str(sil_coeff))

print("between_ss / total_ss:" + str(bss))

```

你可能感兴趣的:(python,sklearn工具包)