注:kmeans算法流程,此处不做介绍。
Scikit中KMeans的参数说明:
class sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=1, algorithm='auto')
具体参数可以参考:网站
https://www.w3cschool.cn/doc_scikit_learn/scikit_learn-modules-generated-sklearn-cluster-kmeans.html?lang=en#sklearn.cluster.KMeans

Kmeans聚类测试1(二维数据)

  • 说明:

    • 数据集:np.random.rand()随机生成的二维数据点
    • 聚类参数:类簇个数为3
  • 代码:
import numpy as np # numpy 用于生成随机点作为样本数据
from sklearn.cluster import KMeans # 聚类算法,前提:安装Scikit-learn
import matplotlib.pyplot as plt # 画图# 生成一个随机数据,样本大小为100, 特征数为2
data = np.random.rand(100, 2)  # 写法1:
# estimator = KMeans(n_clusters=3)  # 构造聚类器
# label_pred = estimator.fit_predict(data)  # 放入数据,聚类,获取预测簇ID
# centroids = estimator.cluster_centers_  # 获取聚类中心
# print(label_pred) # 输出标签
# print(centroids) # 输出中心点# 写法2:
kmeans = KMeans(n_clusters=3).fit(data) # 放入数据进行聚类
label_pred = kmeans.labels_  # 获取聚类标签
centroids = kmeans.cluster_centers_  # 获取聚类中心
print(label_pred) # 输出标签
print(centroids) # 输出中心点# 2D显示
plt.scatter(data[:, 0], data[:, 1], c=label_pred, marker='o')
plt.scatter(centroids[:, 0], centroids[:, 1], marker='>', c='red', linewidths=10)
plt.show()
  • 输出:
  • 其他:

Kmeans聚类测试2(主要测试三维数据点)

  • 说明:

    • 数据集:np.random.rand()随机生成的三维数据点
    • 聚类参数:类簇个数为3
  • 代码:
import numpy as np
from sklearn.cluster import KMeans
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as pltdata = np.random.rand(100, 3)  # 生成一个随机数据,样本大小为100, 特征数为3
estimator = KMeans(n_clusters=3)  # 构造聚类器
y = estimator.fit_predict(data)  # 聚类
label_pred = estimator.labels_  # 获取聚类标签
centroids = estimator.cluster_centers_  # 获取聚类中心print(label_pred)
print(centroids)fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(data[:, 0], data[:, 1], data[:, 2], c=y, marker='o')
ax.scatter(centroids[:, 0], centroids[:, 1], centroids[:, 2], marker='>')
plt.axis([0, 1, 0, 1])
plt.show()
  • 输出:

  • 其他:

Kmeans聚类测试3(主要测试聚类中心的获取方法)

  • 说明:

    • 数据集:np.random.rand()随机生成的三维数据点
    • 聚类参数:类簇个数为3
  • 代码:
import numpy as np # numpy 用于生成随机点作为样本数据
from sklearn.cluster import KMeans # 聚类算法,前提:安装Scikit-learn
import matplotlib.pyplot as plt # 画图# 生成一个随机数据,样本大小为100, 特征数为2
data = np.random.rand(100, 2)  kmeans = KMeans(n_clusters=3).fit(data) # 放入数据进行聚类
label_pred = kmeans.labels_  # 获取聚类标签# 聚类中心获取方法一:
centroids = kmeans.cluster_centers_
print(centroids) # 输出中心点# 聚类中心获取方法二:(通过transform方法来获取距离函数,然后将距离簇心最小的点作为簇中心)
distances = kmeans.transform(data)  # 每个数据点到每个簇心的距离,维度-->(样本个数,类簇个数)
center_idx = np.argmin(distances, axis=0) # 获取distances中每列最小的元素值索引
centers = [data[i] for i in center_idx]  # 根据索引去数据。注意:此时centers是list类型,而不是ndarray。可以通过type(centers)来查看# 注意 将list类型转成ndarray类型,以便plt绘图
centers = np.array(centers)  # 为了防止报错 list indices must be integers or slices, not tuple# print("distances.shape --> ", distances.shape, "  ; distance.type --> ", distances.dtype)
# print(center_x.shape)# 绘图显示
plt.scatter(data[:, 0], data[:, 1], c=label_pred, marker='o')
# plt.scatter(centroids[:, 0], centroids[:, 1], marker='>', c='red', linewidths=10)
plt.scatter(centers[:, 0], centers[:, 1], marker='>', c='red', linewidths=10)
plt.show()
  • 输出:

  • 其他:

Kmeans聚类测试4(主要测试make_blobs生成的数据集测试效果)

  • 说明:

    • 数据集:make_blobs()生成的二维数据点
    • 聚类参数:类簇个数为3
  • 代码:
    生成数据集
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets.samples_generator import make_blobs# 1000个样本,2维特征,3种类别,方差分别为1.0,3.0,2.0
# X,labels = make_blobs(n_samples=200,n_features=2,centers=3,cluster_std=[1.0,2.0,3.0],random_state=96)center=[[1,1],[-1,-1],[1,-1]]
cluster_std=0.3 # 方差,越大则点分布的越散
X,labels=make_blobs(n_samples=200, centers=center, n_features=2, cluster_std=cluster_std, random_state=0)print('X.shape',X.shape)  # 输出:X.shape (200, 2)
print("labels",set(labels))  # 输出:labels {0, 1, 2}# 画图
plt.scatter(X[:,0],X[:,1],marker='o',c=labels)
plt.title("Three blobs", fontsize='small')
plt.show()

聚类测试

# Kmeans聚类
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = 3).fit(X)label_pred = kmeans.labels_  # 获取聚类标签
centroids = kmeans.cluster_centers_  # 获取聚类中心distances = kmeans.transform(X) # num images * NUM_CLUSTER
center_idx = np.argmin(distances, axis=0)
centers = [X[i] for i in center_idx]
# print(distances)
print(centers) # 如果正确的话,应该和原先设定的中心点位置大不多
print(centroids)
print(type(centroids))
print(type(centers))plt.scatter(X[:,0],X[:,1],marker='o',c=labels)
plt.scatter(centroids[:, 0], centroids[:, 1], marker='>', linewidths=15)
plt.show()
  • 输出:

  • 其他:

Kmeans聚类测试5(时间测试)

  • 说明:

    • 数据集:make_blobs()生成的多维数据点
    • 聚类参数:类簇个数不定
  • 代码:
    生成样本点
import numpy as np
import matplotlib.pyplot as plt # 画图
from sklearn.datasets.samples_generator import make_blobs # 生成数据点
import timen_dim = 8 #特征维度
num_samples = 1000 # 样本点个数
num_cluster = 3 # 类簇个数
cluster_std=0.3 # 方差大小# 设置中心点
center_def=np.random.randint(0,10,size=[num_cluster, n_dim])
print("center_def --> \n",center_def)
# 根据中心点生成相应的数据
X,labels=make_blobs(n_samples=num_samples, centers=center_def,n_features=n_dim, cluster_std=cluster_std, random_state=0)print('X.shape',X.shape)  # 输出:X.shape (200, 2)
print("labels",set(labels))  # 输出:labels {0, 1, 2}del labels # 删除变量,print(labels)

聚类

# Kmeans聚类
start = time.clock()from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = num_cluster).fit(X)Y_pre2 = kmeans.labels_  # 获取聚类标签
# centroids = kmeans.cluster_centers_  # 获取聚类中心center = time.clock()distances = kmeans.transform(X) # num images * NUM_CLUSTER
center_idx = np.argmin(distances, axis=0)
centers_pre2 = [X[i] for i in center_idx]
# print(distances)end = time.clock()print(centers_pre2)
# print(centroids)
# print(type(centroids))
print(type(centers_pre2))
print('finish a in %s' % str(center - start))
print('finish b in %s' % str(end - center))
print('finish all in %s' % str(end - start))
  • 输出:

  • 其他:

Kmeans聚类测试6(KMeans聚类手写数字)

  • 说明:

    • 数据集:sklearn 自带的手写数字数据集
    • 聚类参数:数字从0-9 共10个类别
    • 由于是聚类算法,算法并不能识别出具体的数字,只能将相同数字的图片聚成一类。由于模型的选择,识别率还有待提升。
  • 代码:
    导入模块
# from keras.datasets import mnist
from sklearn.datasets import load_digits
from sklearn.cluster import KMeans
from sklearn.model_selection import train_test_splitimport numpy as np
import matplotlib.pyplot as plt
import time
import warnings

加载数据集

# 加载数据集
digits = load_digits()n_samples,n_features=digits.data.shape
print("共有 ", n_samples, " 个样本数据,每个样本有 ", n_features, " 个特征")
print("手写数字集的大小 --> ",digits.data.shape) #(1797, 64)
print("手写数字集的形状 --> ", digits.images.shape) #(1797, 8, 8)# # 随机截取20%的数据作为测试集
# x_train, x_test, y_train, t_test = train_test_split(digits.data, digits.target, test_size=0.2, random_state=22)# 转成np数组,截取前1437个数据
all_x_data = np.array(digits.data)
all_y_data = np.array(digits.target)
x_train = all_x_data[0:1437, 0:64]
y_train = all_y_data[:1437]print("训练集样本大小",x_train.shape)
print("训练集标签大小",y_train.shape)


kmeans聚类

warnings.filterwarnings('ignore')  # 屏蔽警告信息
np.set_printoptions(threshold=np.inf)  # 输出时,全部输出,不带省略号for index, init_name in enumerate(('k-means++','random')):for index, iteration in enumerate((100,  300, 600)): # 迭代次数,默认是10次start = time.clock() # KMeans(n_clusters=8, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='auto', verbose=0, random_state=None, copy_x=True, n_jobs=None, algorithm='auto')kmeans = KMeans(n_clusters=10, init=init_name, max_iter=iteration).fit(x_train)# y_pred = kmeans.fit_predict(x_train)y_pred = kmeans.labels_  end = time.clock()print ("聚类参数: init=", init_name, "max_iter:", iteration," finish all in", str(end - start))#         # 显示前50个数据,分成 5行 10列 显示
#         print(y_pred[:50].reshape(5, 10))
#         print(y_train[:50].reshape(5, 10))# 构建6*6的图片fig=plt.figure(figsize=(6,6))fig.subplots_adjust(left=0,right=1,bottom=0,top=1,hspace=0.05,wspace=0.05)i = 0for index in range(1437):if y_pred[index] == 2:
#                 # 输出第二个簇类的标签
#                 print("索引-->", index," ; 预测标签(簇类ID)-->",y_pred[index],"  ; 实际标签值--> ",y_train[index])ax=fig.add_subplot(8,8,i+1,xticks=[],yticks=[])ax.imshow(digits.images[index],cmap=plt.cm.binary,interpolation='nearest')#用目标值标记图像ax.text(0,7,str(digits.target[index])+"-->"+str(y_pred[index]))i= i+1if i==36:breakplt.show()
  • 输出:
    仅仅只用kmeans聚类算法对手写数字的识别率并不高,所以识别错的也很多。

  • 其他:

Scikit-Learn (浅谈Kmeans聚类算法)相关推荐

  1. 【老生谈算法】matlab实现Kmeans聚类算法源码——Kmeans聚类算法

    matlab实现Kmeans聚类算法代码实现 1.文档下载: 本算法已经整理成文档如下,有需要的朋友可以点击进行下载 序号 文档(点击下载) 本项目文档 [老生谈算法]matlab实现Kmeans聚类 ...

  2. 【白话机器学习】算法理论+实战之K-Means聚类算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  3. 一步步教你轻松学K-means聚类算法

    一步步教你轻松学K-means聚类算法 (白宁超   2018年9月13日09:10:33) 导读:k-均值算法(英文:k-means clustering),属于比较常用的算法之一,文本首先介绍聚类 ...

  4. kmeans算法_实战 | KMeans 聚类算法

    1. 写在前面 如果想从事数据挖掘或者机器学习的工作,掌握常用的机器学习算法是非常有必要的,常见的机器学习算法: 监督学习算法:逻辑回归,线性回归,决策树,朴素贝叶斯,K近邻,支持向量机,集成算法Ad ...

  5. 超详细!构建基于客户细分的 K-Means 聚类算法

    客群细分对于企业了解目标受众非常重要.根据受众群体的不同,我们可以给采取不同的营销策略.目前有许多无监督的机器学习算法可以帮助公司识别他们的用户群并创建消费群体. 在本文中,我将分享一种目前比较流行的 ...

  6. 一文搞懂K-means聚类算法

    一步步教你轻松学K-means聚类算法 阅读目录 目录 聚类 K-means(k均值)聚类算法 案例描述 从文件加载数据集 计算两个向量的欧氏距离 构建一个包含 K 个随机质心的集合 K-Means ...

  7. 实战案例!基于 K-Means 聚类算法的客户精准营销模型

    客群细分对于企业了解目标受众非常重要.根据受众群体的不同,我们可以给采取不同的营销策略.目前有许多无监督的机器学习算法可以帮助公司识别他们的用户群并创建消费群体. 在本文中,我将分享一种目前比较流行的 ...

  8. python音频聚类_用K-means聚类算法实现音调的分类与可视化

    本文由 伯乐在线 - ggspeed 翻译,耶鲁怕冷 校稿.未经许可,禁止转载! 英文出处:jared polivka.欢迎加入翻译组. 利用 K-means 聚类算法来聚类和可视化音调 Galvan ...

  9. 简述 K-means聚类算法

    什么是K-means聚类算法 机器学习算法主要分为两大类:有监督学习和无监督学习,它们在算法思想上存在本质的区别. 有监督学习,主要对有标签的数据集(即有"参考答案")去构建机器学 ...

  10. java iris_利用K-Means聚类算法实现对iris.data.ulab

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 利用K-Means聚类算法实现对iris.data.ulabel数据的聚类,这是在网上找到如果要换成我的iris.date iris.date.ulabl ...

最新文章

  1. 无电路板的微型电路制作
  2. SPSiteDataQuery
  3. 《视觉SLAM十四讲》笔记(ch8)
  4. 【XAudio2】2.XAudio2 开始!
  5. 中国1,3丁二醇市场趋势报告、技术动态创新及市场预测
  6. SVN自助更新:运维利器Puppet实例讲解
  7. 20145326蔡馨熤《网络对抗》——信息搜集与漏洞扫描
  8. imshow、image以及imagesc的区别
  9. JS回调函数、真实举例
  10. qq不显示我的android手机,qq2013不显示手机在线怎么办
  11. lpx寒假作业案例6
  12. NAT类型与P2P游戏
  13. 苹果6换屏多钱_苹果手机屏幕碎了怎么办?维修更换要多少钱
  14. 超鸿蒙 混希夷 寂寥,下列句子与“故凡为愚者.莫我若也 的句式不同的一项是 A.超鸿蒙.混希夷.寂寥而莫我知也 B.而良人未之知也 C.及长.不省所怙.惟兄嫂是依 D.王语暴以好乐...
  15. RabbitMQ基础篇 (一)
  16. 人工智能可以应用在哪些领域?
  17. 纸本书变电子书是很小的事——詹宏志谈数字出版时代
  18. 让你的努力配得上你的梦想书摘
  19. spoon java_如何以及为什么使用Spoon分析,生成和转换Java代码
  20. 获取webservice(wsdl)数据包

热门文章

  1. IBM DB2关键特性解析:DB2分区特性
  2. [mysql终极优化]之主从复制与读写分离详细设置教程
  3. eclipse打断点的调试
  4. dns服务与配置管理,一机多站
  5. asp.net扩展Forms验证
  6. popen和pclose
  7. elk怎么读的_大数据采集和抽取怎么做?这篇文章终于说明白了!
  8. 3 超链接_excel函数应用技巧:超链接函数HYPERLINK
  9. springboot+1、图片上传到本地路径信息保存在数据库2、根据id删除本地图片
  10. java连接微信服务器调用微信接口