"""
Name: study_kmeans.py
Author: KX-Lau
Time: 2020/11/6 16:59
Desc: 实现kmeans聚类
""" import math
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.cluster import KMeans # -----------不使用sklearn实现kmeans聚类 -------------
class MyKmeans:
def __init__(self, k, n=50):
self.k = k # 聚类中心数k
self.n = n # 迭代次数 def fit(self, x, centers=None):
# 1. 随机选择K个点
if centers is None:
index = np.random.randint(low=0, high=len(x), size=self.k) # 随机生成数组, 每个数组元素从low到high的整数, 元素个数为size
centers = x[index] inters = 0
while inters < self.n:
# 构造k个点的集合
points_set = {key: [] for key in range(self.k)} # 2. 遍历所有点point, 将point放入最近的聚类中心的集合中
for point in x:
nearest_index = np.argmin(np.sum((centers - point) ** 2, axis=1) ** 0.5)
points_set[nearest_index].append(point) # 3. 遍历每一个点集, 计算新的聚类中心
for i_k in range(self.k):
centers[i_k] = sum(points_set[i_k]) / len(points_set[i_k]) inters += 1 return points_set, centers """
iris中文名是鸢尾花卉数据集, 是一类多重变量分析的数据集.
包含150个样本, 分为3类(山鸢尾Setosa, 变色鸢尾Versicolor, 维吉尼亚鸢尾Virginica),
每个类别50个数据, 每个数据包含4个属性(花萼长度, 花萼宽度, 花瓣长度, 花瓣宽度).
""" iris = datasets.load_iris()
data = iris['data'][:, :2]
print(type(data))
mk = MyKmeans(3)
point_sets, centers = mk.fit(data) category1 = np.asarray(point_sets[0])
category2 = np.asarray(point_sets[1])
category3 = np.asarray(point_sets[2]) for i, p in enumerate(centers):
plt.scatter(p[0], p[1], s=200, marker='^', color='yellow', edgecolors='black') plt.scatter(category1[:, 0], category1[:, 1], color='g')
plt.scatter(category2[:, 0], category2[:, 1], color='r')
plt.scatter(category3[:, 0], category3[:, 1], color='b')
plt.xlim(4, 8)
plt.ylim(1, 5)
plt.title('kmeans with k=3')
plt.show() # -----------使用sklearn实现kmeans聚类 -------------
init = np.vstack([data[5], data[109], data[121]]) # 指定初始质心
kmeans = KMeans(n_clusters=3, init=init, max_iter=100).fit(data)
labels = kmeans.labels_
cluster_centers = kmeans.cluster_centers_ c1 = data[labels == 0]
c2 = data[labels == 1]
c3 = data[labels == 2] print('cluster_centers', cluster_centers)
print('init', init) plt.figure() for i, p in enumerate(cluster_centers):
plt.scatter(p[0], p[1], color='yellow', edgecolors='black', s=200, marker='^') plt.scatter(c1[:, 0], c1[:, 1], color='g')
plt.scatter(c2[:, 0], c2[:, 1], color='r')
plt.scatter(c3[:, 0], c3[:, 1], color='b')
plt.xlim(4, 8)
plt.ylim(1, 5)
plt.title('kmeans using sklearn with k=3')
plt.show()

机器学习---kmeans聚类的python实现的更多相关文章

  1. (转) K-Means聚类的Python实践

    本文转自: http://python.jobbole.com/87343/ K-Means聚类的Python实践 2017/02/11 · 实践项目 · K-means, 机器学习 分享到:1 原文 ...

  2. Kmeans 聚类 及其python实现

    主要参考   K-means 聚类算法及 python 代码实现    还有  <机器学习实战> 这本书,当然前面那个链接的也是参考这本书,懂原理,会用就行了. 1.概述 K-means  ...

  3. K-means聚类的Python实现

    生物信息学原理作业第五弹:K-means聚类的实现. 转载请保留出处! K-means聚类的Python实现 原理参考:K-means聚类(上) 数据是老师给的,二维,2 * 3800的数据.plot ...

  4. K-means聚类 的 Python 实现

    K-means聚类 的 Python 实现 K-means聚类是一个聚类算法用来将 n 个点分成 k 个集群. 算法有3步: 1.初始化– K 个初始质心会被随机生成 2.分配 – K 集群通过关联到 ...

  5. Python数据科学手册-机器学习: k-means聚类/高斯混合模型

    前面学习的无监督学习模型:降维 另一种无监督学习模型:聚类算法. 聚类算法直接冲数据的内在性质中学习最优的划分结果或者确定离散标签类型. 最简单最容易理解的聚类算法可能是 k-means聚类算法了. ...

  6. k-means聚类算法python实现

    K-means聚类算法 算法优缺点: 优点:容易实现缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢使用数据类型:数值型数据 算法思想 k-means算法实际上就是通过计算不同样本间的距离来判断他 ...

  7. 机器学习——KMeans聚类,KMeans原理,参数详解

    0.聚类 聚类就是对大量的未知标注的数据集,按数据的内在相似性将数据集划分为多个类别,使类别内的数据相似度较大而类别间的数据相似度较小,聚类属于无监督的学习方法. 1.内在相似性的度量 聚类是根据数据 ...

  8. 机器学习-K-means聚类及算法实现(基于R语言)

    K-means聚类 将n个观测点,按一定标准(数据点的相似度),划归到k个聚类(用户划分.产品类别划分等)中. 重要概念:质心 K-means聚类要求的变量是数值变量,方便计算距离. 算法实现 R语言 ...

  9. 机器学习--k-means聚类原理

    “物以类聚,人以群分”, 所谓聚类就是将相似的元素分到一"类"(有时也被称为"簇"或"集合"), 簇内元素相似程度高, 簇间元素相似程度低. ...

随机推荐

  1. 如何在Room框架下注册onUpgrade回调及自定义DatabaseErrorHandler

      在 Android 中,Room 为 SQLite 提供了高效稳定的抽象层,简化开发流程.RoomDatabase.java 是初始化数据库的重要构建组件,通过它我们可以添加RoomDatabas ...

  2. LGP6146题解

    思维僵化了,习惯按照右端点排序,没想到是按照左端点排序... 考虑从左到右依次加入线段,考虑贡献. 设前 \(i\) 条线段的答案为 \(dp[i]\). 考虑两种情况: 不加,贡献为 \(dp[i- ...

  3. VuePress 博客优化之开启 Algolia 全文搜索

    前言 在 <一篇带你用 VuePress + Github Pages 搭建博客>中,我们使用 VuePress 搭建了一个博客,最终的效果查看:TypeScript 中文文档. 由于 V ...

  4. vue项目部署到阿里云服务器(windows),Nginx代理!

    项目构成: 前端:vue+vant-ui, 数据库:mysql, 后端:node.js 部署方式:nginx代理: 一,首先要拥有自己的服务器,阿里,腾讯都可以,我用的是阿里的: 如果只是做个人项目的 ...

  5. Java基础——自动装箱与拆箱

    装箱:把基本数据类型转换为对应的包装类类型 //装箱Integer i=Integer.ValuesOf(100);//自动装箱integer i1=100;//能够直接赋值成功的称为自动装箱,也调用 ...

  6. Rsync未授权访问

    1.漏洞名称 Rsync 未授权访问漏洞 2.漏洞原理 rsync是Linux下一款数据备份工具,支持通过rsync协议.ssh协议进行远程文件传输. 其中rsync协议默认监听873端口,如果目标开 ...

  7. Golang 包了解以及程序的执行

    Golang 包了解以及程序的执行 引言  Go 语言是使用包来组织源代码的,包(package)是多个 Go 源码的集合,是一种高级的代码复用方案.Go 语言中为我们提供了很多内置包,如 fmt.o ...

  8. 开发中常用的几种 Content-Type

    开发中常用的几种 Content-Type application/x-www-form-urlencoded 浏览器的原生 form 表单,如果不设置,那么最终就会以 application/x-w ...

  9. spring cloud 断路器的作用是什么?

    在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待.这样就不会使得线程因 ...

  10. xml文件使用DOM解析,报异常org.xml.sax.SAXParseException,"characterEncoding" 的引用必须以 ';' 分隔符结尾异常

    这个异常一般为xml文件对&的报错,只需要将&改为转义后的&amp即可解决