结果:

240717 聚类 kmean_聚类算法

240717 聚类 kmean_机器学习_02

无监督学习是一种对不含标记的数据建立模型的机器学习范式。 
~~
k-means算法是最流行的聚类算法之一。 这个算法常常利用数据的不同属性将输入数据划分
为k组。 分组是使用最优化的技术实现的, 即让各组内的数据点与该组中心点的距离平方和最小
化。

代码

# -*- coding: utf-8 -*-
 import numpy as np
 import matplotlib.pyplot as plt
 from sklearn import metrics
 from sklearn.cluster import KMeansimport utilities
# 加载数据
 data = utilities.load_data('data_multivar.txt')
 num_clusters = 4# 画出原始数据
 plt.figure()
 plt.scatter(data[:,0], data[:,1], marker='o', 
         facecolors='none', edgecolors='k', s=30)
 x_min, x_max = min(data[:, 0]) - 1, max(data[:, 0]) + 1
 y_min, y_max = min(data[:, 1]) - 1, max(data[:, 1]) + 1
 plt.title('Input data')
 plt.xlim(x_min, x_max)
 plt.ylim(y_min, y_max)
 plt.xticks(())
 plt.yticks(())# 训练模型
 kmeans = KMeans(init='k-means++', n_clusters=num_clusters, n_init=10)
 kmeans.fit(data)# 步长
 step_size = 0.01# 找到聚合点
 x_min, x_max = min(data[:, 0]) - 1, max(data[:, 0]) + 1
 y_min, y_max = min(data[:, 1]) - 1, max(data[:, 1]) + 1
 x_values, y_values = np.meshgrid(np.arange(x_min, x_max, step_size), np.arange(y_min, y_max, step_size))# 计算预测
 predicted_labels = kmeans.predict(np.c_[x_values.ravel(), y_values.ravel()])# 画出所有结果
 predicted_labels = predicted_labels.reshape(x_values.shape)
 plt.figure()
 plt.clf()
 plt.imshow(predicted_labels, interpolation='nearest',
            extent=(x_values.min(), x_values.max(), y_values.min(), y_values.max()),
            cmap=plt.cm.Paired,
            aspect='auto', origin='lower')plt.scatter(data[:,0], data[:,1], marker='o', 
         facecolors='none', edgecolors='k', s=30)centroids = kmeans.cluster_centers_
 plt.scatter(centroids[:,0], centroids[:,1], marker='o', s=200, linewidths=3,
         color='k', zorder=10, facecolors='black')
 x_min, x_max = min(data[:, 0]) - 1, max(data[:, 0]) + 1
 y_min, y_max = min(data[:, 1]) - 1, max(data[:, 1]) + 1
 plt.title('Centoids and boundaries obtained using KMeans')
 plt.xlim(x_min, x_max)
 plt.ylim(y_min, y_max)
 plt.xticks(())
 plt.yticks(())
 plt.show()
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.