博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
04 聚类算法 - 代码案例一 - K-means聚类
阅读量:5941 次
发布时间:2019-06-19

本文共 3884 字,大约阅读时间需要 12 分钟。

本案例数据来源:基于scikit包中的创建模拟数据的API创建聚类数据。

100个样本,2个特征,3个聚簇中心点,标准差=1.0,样本取值范围(-10,10)

使用__K-means算法__对数据进行分类操作,并获得聚类中心点以及总的样本簇中心点距离和值。

引入包:from sklearn.cluster import KMeans
相关API:

用KMeans进行聚类分析


常规操作:

import numpy as npimport matplotlib.pyplot as pltimport matplotlib as mplimport sklearn.datasets as dsimport matplotlib.colorsfrom sklearn.cluster import KMeans#引入kmeans## 设置属性防止中文乱码mpl.rcParams['font.sans-serif'] = [u'SimHei']mpl.rcParams['axes.unicode_minus'] = False
一、产生模拟数据:

我们用make_blobs方法生成了2组数据:(data,y) 和 (data2,y2)

N = 1500 # 1500个样本centers = 4 # 4个聚簇中心点data,y = ds.make_blobs(N, n_features=2, centers=centers, random_state=28)data2,y2 = ds.make_blobs(N, n_features=2, centers=centers,  random_state=28)data3 = np.vstack((data[y == 0][:200], data[y == 1][:100],     data[y == 2][:10], data[y == 3][:50]))y3 = np.array([0] * 200 + [1] * 100 + [2] * 10 + [3] * 50)
二、数据前期处理跟前面模型是一样

这里由于数据是自己生成的,所以不做数据预处理了

三、模型的构建

n_clusters就是K值,也是聚类值,本例中定义了centers = 4;

init初始化方法,可以是kmeans++,随机,或者自定义的ndarray

km = KMeans(n_clusters=centers, init='random',random_state=28)km.fit(data, y)

y_hat = km.predict(data)print ("所有样本距离聚簇中心点的总距离和:", km.inertia_)print ("距离聚簇中心点的平均距离:", (km.inertia_ / N))cluster_centers = km.cluster_centers_print ("聚簇中心点:", cluster_centers)

y_hat2 = km.fit_predict(data2)y_hat3 = km.fit_predict(data3)
四、画图
def expandBorder(a, b):    d = (b - a) * 0.1    return a-d, b+d
cm = mpl.colors.ListedColormap(list('rgbmyc'))plt.figure(figsize=(15, 9), facecolor='w')
1、原始数据
plt.subplot(241)plt.scatter(data[:, 0], data[:, 1], c=y, s=30, cmap=cm, edgecolors='none')x1_min, x2_min = np.min(data, axis=0)x1_max, x2_max = np.max(data, axis=0)x1_min, x1_max = expandBorder(x1_min, x1_max)x2_min, x2_max = expandBorder(x2_min, x2_max)plt.xlim((x1_min, x1_max))plt.ylim((x2_min, x2_max))plt.title(u'原始数据')plt.grid(True)
2、K-Means算法聚类结果
plt.subplot(242)plt.scatter(data[:, 0], data[:, 1], c=y_hat, s=30, cmap=cm, edgecolors='none')plt.xlim((x1_min, x1_max))plt.ylim((x2_min, x2_max))plt.title(u'K-Means算法聚类结果')plt.grid(True)m = np.array(((1, 1), (0.5, 5)))data_r = data.dot(m)y_r_hat = km.fit_predict(data_r)
3、数据旋转后原始数据图
plt.subplot(243)plt.scatter(data_r[:, 0], data_r[:, 1], c=y, s=30, cmap=cm, edgecolors='none')x1_min, x2_min = np.min(data_r, axis=0)x1_max, x2_max = np.max(data_r, axis=0)x1_min, x1_max = expandBorder(x1_min, x1_max)x2_min, x2_max = expandBorder(x2_min, x2_max)plt.xlim((x1_min, x1_max))plt.ylim((x2_min, x2_max))plt.title(u'数据旋转后原始数据图')plt.grid(True)
4、数据旋转后预测图
plt.subplot(244)plt.scatter(data_r[:, 0], data_r[:, 1], c=y_r_hat, s=30, cmap=cm, edgecolors='none')plt.xlim((x1_min, x1_max))plt.ylim((x2_min, x2_max))plt.title(u'数据旋转后预测图')plt.grid(True)
5、不同方差的原始数据
plt.subplot(245)plt.scatter(data2[:, 0], data2[:, 1], c=y2, s=30, cmap=cm, edgecolors='none')x1_min, x2_min = np.min(data2, axis=0)x1_max, x2_max = np.max(data2, axis=0)x1_min, x1_max = expandBorder(x1_min, x1_max)x2_min, x2_max = expandBorder(x2_min, x2_max)plt.xlim((x1_min, x1_max))plt.ylim((x2_min, x2_max))plt.title(u'不同方差的原始数据')plt.grid(True)
6、不同方差簇数据的K-Means算法聚类结果
plt.subplot(246)plt.scatter(data2[:, 0], data2[:, 1], c=y_hat2, s=30, cmap=cm, edgecolors='none')plt.xlim((x1_min, x1_max))plt.ylim((x2_min, x2_max))plt.title(u'不同方差簇数据的K-Means算法聚类结果')plt.grid(True)
7、不同簇样本数量原始数据图
plt.subplot(247)plt.scatter(data3[:, 0], data3[:, 1], c=y3, s=30, cmap=cm, edgecolors='none')x1_min, x2_min = np.min(data3, axis=0)x1_max, x2_max = np.max(data3, axis=0)x1_min, x1_max = expandBorder(x1_min, x1_max)x2_min, x2_max = expandBorder(x2_min, x2_max)plt.xlim((x1_min, x1_max))plt.ylim((x2_min, x2_max))plt.title(u'不同簇样本数量原始数据图')plt.grid(True)
8、不同簇样本数量的K-Means算法聚类结果
plt.subplot(248)plt.scatter(data3[:, 0], data3[:, 1], c=y_hat3, s=30, cmap=cm, edgecolors='none')plt.xlim((x1_min, x1_max))plt.ylim((x2_min, x2_max))plt.title(u'不同簇样本数量的K-Means算法聚类结果')plt.grid(True)
plt.tight_layout(2, rect=(0, 0, 1, 0.97))plt.suptitle(u'数据分布对KMeans聚类的影响', fontsize=18)plt.show()

转载地址:http://mpqtx.baihongyu.com/

你可能感兴趣的文章
170多个Ionic Framework学习资源(转载)
查看>>
Azure:不能把同一个certificate同时用于Azure Management和RDP
查看>>
Directx11教程(15) D3D11管线(4)
查看>>
Microsoft Excel软件打开文件出现文件的格式与文件扩展名指定格式不一致?
查看>>
ios ble 参考
查看>>
linux中注册系统服务—service命令的原理通俗
查看>>
基于托管C++的增删改查及异步回调小程序
查看>>
Oracle DBMS_STATS 包 和 Analyze 命令的区别
查看>>
给Visual Studio 2010中文版添加Windows Phone 7模板
查看>>
linux下基本命令
查看>>
windows server 2008R2 上安装配置freesshd
查看>>
手动删除SVCH0ST.EXE的方法
查看>>
已释放的栈内存
查看>>
Android网络之数据解析----SAX方式解析XML数据
查看>>
Java递归列出所有文件和文件夹
查看>>
[关于SQL]查询成绩都大于80分的学生
查看>>
Delphi(Tuxedo,BDE,ADO)三合一数据集组件HsTxQuery
查看>>
java之ibatis数据缓存
查看>>
“TNS-03505:无法解析名称”问题解决一例
查看>>
LeetCode - Longest Common Prefix
查看>>