K-means聚类

pandas publisher01 21℃

聚类指的是把集合,分组成多个类,每个类中的对象都是彼此相似的。K-means是聚类中最常用的方法之一,它是基于点与点距离的相似度来计算最佳类别归属。

在使用该方法前,要注意(1)对数据异常值的处理;(2)对数据标准化处理(x-min(x))/(max(x)-min(x));(3)每一个类别的数量要大体均等;(4)不同类别间的特质值应该差异较大

 

一、K-means聚类步骤:

(1)选择k个初始聚类中心

(2)计算每个对象与这k个中心各自的距离,按照最小距离原则分配到最邻近聚类

(3)使用每个聚类中的样本均值作为新的聚类中心

(4)重复步骤(2)和(3)直到聚类中心不再变化

(5)结束,得到k个聚类

二、聚类分析代码演算:

import numpy as np

import pandas as pd

import matplotlib.pyplot as plt

%matplotlib inline

from sklearn.datasets.samples_generator import make_blobs

#make_blobs聚类生成器

x,y_true=make_blobs(n_samples=300,#生成300条数据

                  centers=4,    #4类

                  cluster_std=0.5,#方差一致,愈大各类别里面点的散度愈大

                  random_state=0)

print(x[:5])

print(y_true[:5])

#x生成数据值,y生成数据的对应类别标签

#random_state随机种子数

plt.scatter(x[:,0],x[:,1],marker=’.’)

plt.grid()

from sklearn.cluster import KMeans

#导入模块

kmeans=KMeans(n_clusters=4)

kmeans.fit(x)

y_kmeans=kmeans.predict(x)

cen=kmeans.cluster_centers_#得到不同族的中心点

print(cen)

plt.scatter(x[:,0],x[:,1],c=y_kmeans,cmap=’Dark2′,s=50,marker=’x’)

plt.scatter(cen[:,0],cen[:,1],c=[0,1,2,3],cmap=’Dark2′,s=70,marker=’o’)

plt.title(‘K-means 300 points’)

plt.xlabel(‘values1’)

plt.ylabel(‘values2’)

运行结果:

三、利用K-means聚类做图像压缩:

from skimage import io

from sklearn.cluster import KMeans

import numpy as np

image=io.imread(‘dogg.jpg’)

io.imshow(image)

io.show()

rows=image.shape[0]

cols=image.shape[1]

image=image.reshape(image.shape[0]*image.shape[1],3)

kmeans=KMeans(n_clusters=128)

kmeans.fit(image)

cluster=np.asarray(kmeans.cluster_centers_,dtype=np.unit8)

labels=np.asarray(kmeans.labels_,dtype=np.uint8)

labels=labels.reshape(rows,cols)

print(clusters.shape)

np.save(‘IMG_6439copy.npy’,clusters)

io.imsave(‘dog_copy.jpg’,labels)

image=io.imread(‘IMG_6439copy.jpg’)

io.imshow(image)

io.show()

转载请注明:Python量化投资 » K-means聚类

喜欢 (0)or分享 (0)