k-means伪代码
1、初始化k个簇中心。
2、更新所有样本点簇归属:样本点到哪个簇中心点最近就属于哪个簇。
3、重新计算每个簇的中心点(直到簇中心点不再变化或达到更新最大次数)
#k-means伪代码
import numpy as np
import copy
#计算欧氏距离
def get_distance(X,Y):
return np.sum((X-Y)**2)**0.5
def calc_mean(X): #计算中心点,每一维取均值
l=len(X[0])
list_mean=[]
for i in range(l):
s=0
for j in X:
s+=j[i]
m=s/len(X)
list_mean.append(m)
return list_mean def k_means(x_train,k,max_iter):
num_iter = 0
#初始簇中心
cluster_center = x_train[:k]
pre_cluster_center = copy.deep_copy(cluster_center) #上一次的簇中心点
#开始迭代
while num_iter<max_iter:
#临时变量
clusters_data={} #字典{簇下标:坐标}
for i in x_train:
cluster_dists=[]
for index,cluster in enumerate(cluster_center):
distance=get_distance(i,cluster)
cluster_dists.append((index,distance)) #每个样本到中心点的距离 cluster_dists.sort(key=lambda x:x[1]) #升序
min_index,min_dist=cluster_dists[0] #取距离最近 if min_index not in clusters_data:
clusters_data[min_index]=[]
clusters_data[min_index].append(i) #数据添加到临时变量中 #更新簇中心点
for index in clusters_data:
cluster_center[index]=calc_mean(clusters_data[index])
if pre_cluster_center == cluster_center:
break #如果簇中心点不再变化,那么结束
else:
pre_cluster_center = copy.deep_copy(cluster_center) #拷贝一下
return cluster_center #返回最终的簇中心点
k-means伪代码的更多相关文章
- KNN 与 K - Means 算法比较
KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...
- 软件——机器学习与Python,聚类,K——means
K-means是一种聚类算法: 这里运用k-means进行31个城市的分类 城市的数据保存在city.txt文件中,内容如下: BJ,2959.19,730.79,749.41,513.34,467. ...
- 快速查找无序数组中的第K大数?
1.题目分析: 查找无序数组中的第K大数,直观感觉便是先排好序再找到下标为K-1的元素,时间复杂度O(NlgN).在此,我们想探索是否存在时间复杂度 < O(NlgN),而且近似等于O(N)的高 ...
- 网络费用流-最小k路径覆盖
多校联赛第一场(hdu4862) Jump Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- numpy.ones_like(a, dtype=None, order='K', subok=True)返回和原矩阵一样形状的1矩阵
Return an array of ones with the same shape and type as a given array. Parameters: a : array_like Th ...
- [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法
前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...
- <机器学习>无监督学习算法总结
本文仅对常见的无监督学习算法进行了简单讲述,其他的如自动编码器,受限玻尔兹曼机用于无监督学习,神经网络用于无监督学习等未包括.同时虽然整体上分为了聚类和降维两大类,但实际上这两类并非完全正交,很多地方 ...
- 机器学习算法的基本知识(使用Python和R代码)
本篇文章是原文的译文,然后自己对其中做了一些修改和添加内容(随机森林和降维算法).文章简洁地介绍了机器学习的主要算法和一些伪代码,对于初学者有很大帮助,是一篇不错的总结文章,后期可以通过文中提到的算法 ...
- 当我们在谈论kmeans(2)
本稿为初稿,后续可能还会修改:如果转载,请务必保留源地址,非常感谢! 博客园:http://www.cnblogs.com/data-miner/ 其他:建设中- 当我们在谈论kmeans(2 ...
- scikit-learn包的学习资料
http://scikit-learn.org/stable/modules/clustering.html#k-means http://my.oschina.net/u/175377/blog/8 ...
随机推荐
- CentOS 7 Docker 安装
CentOS Docker 安装 Docker支持以下的CentOS版本: CentOS 7 (64-bit) CentOS 6.5 (64-bit) 或更高的版本 本文以 CentOS 7.6 版本 ...
- CSS3实用指南 初读笔记
1.7.1 浏览器前缀 当一个浏览器实现了一个新的属性.值或者选择器,而这个特性还不是处于候选推荐标准状态的时候,在属性前面会添加一个前缀以便于它的渲染引擎识别. CSS属性的浏览器前缀: 前 ...
- Flutter路由(一)
第一点:push使用 1.pushNamed——Navigator.of(context).pushNamed('routeName') Navigator.of(context).pushNamed ...
- vtk旋转扫描实体示例:vtkQuadRotationalExtrusionFilter、vtkRotationalExtrusionFilter
一.vtkQuadRotationalExtrusionFilter Detailed Description sweep polygonal data creating "skirt&qu ...
- 对MPU6050坐标矩阵修改的学习
MPU6050是根据三轴陀螺仪和三轴加速度计数据通过DMP运算的出欧拉角.系统默认为水平放置, 但是实际使用过程中并不都是水平放置,有些特殊的场合,要求芯片竖直放置,这时候就不得 不修改MPU6050 ...
- Pandas中关于 loc \ iloc 用法的理解
转载至:https://blog.csdn.net/w_weiying/article/details/81411257 loc函数:通过行索引 "Index" 中的具体值来取行数 ...
- 【miscellaneous】华为智能视频监控系统设计解决方案
[导读] 近年来,随着经济的快速增长.社会的迅速进步,校园.工厂园区.中小企业.楼宇等领域对安全防范和现场记录报警系统的需求与日俱增,视频监控在工作.生活各方面得到了非常广泛的应用. 1.中小型视频监 ...
- python 并发编程 进程池与线程池
一 进程池与线程池 1.为什么需要进程池和线程池 基于多进程或多线程实现并发的套接字通信,然而这种实现方式的致命缺陷是: 服务端的程序运行在一台机器身上,一台机器性能是有极限的,不能无限开线程 服务的 ...
- xshell登陆后脚本
vbs的写法: Sub Main xsh.Screen.Send "ssh 用户名@服务器地址" xsh.Screen.Send VbCr xsh.Screen.WaitForSt ...
- poj1061(扩展欧基里德定理)
题目链接:https://vjudge.net/problem/POJ-1061 题意:在一个首位相接的坐标轴上,A.B开始时分别位于X,Y处,每个单位时间向右移动m,n米,问是否能相遇,坐标轴长L. ...