05_无监督学习--聚类模型--K 均值
无监督学习–聚类模型–K 均值
0.引入依赖
import numpy as np
import matplotlib.pyplot as plt
# 这里直接 sklearn 里的数据集
from sklearn.datasets.samples_generator import make_blobs
1.数据的加载和预处理
x, y = make_blobs(n_samples=100, centers=6, random_state=1234, cluster_std=0.6)
# x # array([[-0.02708305, 5.0215929 ], ..., [-4.7583093 , 5.85803377]])
# x.shape # (100, 2)
# y.shape # (100,)
plt.figure(figsize=(9, 9))
plt.scatter(x[:,0], x[:,1], c=y)
plt.show()
作图如下:
[外链图片转存失败(img-sa8Pil3S-1569159801291)(https://s2.ax1x.com/2019/05/18/ELjEL9.png)]
2.算法实现
# 引入 scipy 库中的距离函数,默认实现是欧式距离
from scipy.spatial.distance import cdist
class K_Means(object):
# 初始化,参数 n_clusters(K)、max_iter(迭代次数)、centroids(初始质心)
def __init__(self, n_clusters=6, max_iter=300, centroids=[]):
self.n_clusters = n_clusters
self.max_iter = max_iter
self.centroids = np.array(centroids, dtype=np.float)
# 定义训练模型方法,实现 K-means 聚类过程
def fit(self, data):
# 假如没有指定初始质心,就随机选取 data 中的点作为质心
if (self.centroids.shape ==