什么是质心

#encoding=utf8
import numpy as np
#计算样本间距离
def distance(x, y, p=2):'''input:x(ndarray):第一个样本的坐标y(ndarray):第二个样本的坐标p(int):等于1时为曼哈顿距离,等于2时为欧氏距离output:distance(float):x到y的距离      '''#********* Begin *********#    dis2 = np.sum(np.abs(x-y)**p)dis = np.power(dis2,1/p)return dis#********* End *********#
#计算质心
def cal_Cmass(data):'''input:data(ndarray):数据样本output:mass(ndarray):数据样本质心'''#********* Begin *********#Cmass = np.mean(data,axis=0)#********* End *********#return Cmass
#计算每个样本到质心的距离,并按照从小到大的顺序排列
def sorted_list(data,Cmass):'''input:data(ndarray):数据样本Cmass(ndarray):数据样本质心output:dis_list(list):排好序的样本到质心距离'''#********* Begin *********#dis_list = []for i in range(len(data)):dis_list.append(distance(Cmass,data[i][:]))dis_list = sorted(dis_list)#********* End *********#return dis_list

动手实现k-均值

#encoding=utf8
import numpy as np
# 计算一个样本与数据集中所有样本的欧氏距离的平方
def euclidean_distance(one_sample, X):'''input:one_sample(ndarray):单个样本X(ndarray):所有样本output:distances(ndarray):单个样本到所有样本的欧氏距离平方'''#*********Begin*********#one_sample = one_sample.reshape(1, -1)distances = np.power(np.tile(one_sample, (X.shape[0], 1)) - X, 2).sum(axis=1)#*********End*********#return distances
# 从所有样本中随机选取k个样本作为初始的聚类中心
def init_random_centroids(k,X):'''input:k(int):聚类簇的个数X(ndarray):所有样本output:centroids(ndarray):k个簇的聚类中心'''#*********Begin*********#n_samples, n_features = np.shape(X)centroids = np.zeros((k, n_features))for i in range(k):centroid = X[np.random.choice(range(n_samples))]centroids[i] = centroid#*********End*********#return centroids
# 返回距离该样本最近的一个中心索引
def _closest_centroid(sample, centroids):'''input:sample(ndarray):单个样本centroids(ndarray):k个簇的聚类中心output:closest_i(int):最近中心的索引'''#*********Begin*********#distances = euclidean_distance(sample, centroids)closest_i = np.argmin(distances)#*********End*********#return closest_i
# 将所有样本进行归类,归类规则就是将该样本归类到与其最近的中心
def create_clusters(k,centroids, X):'''input:k(int):聚类簇的个数centroids(ndarray):k个簇的聚类中心X(ndarray):所有样本output:clusters(list):列表中有k个元素,每个元素保存相同簇的样本的索引'''#*********Begin*********#clusters = [[] for _ in range(k)]for sample_i, sample in enumerate(X):centroid_i = _closest_centroid(sample, centroids)clusters[centroid_i].append(sample_i)#*********End*********#return clusters
# 对中心进行更新
def update_centroids(k,clusters, X):'''input:k(int):聚类簇的个数X(ndarray):所有样本output:centroids(ndarray):k个簇的聚类中心'''#*********Begin*********#n_features = np.shape(X)[1]centroids = np.zeros((k, n_features))for i, cluster in enumerate(clusters):centroid = np.mean(X[cluster], axis=0)centroids[i] = centroid#*********End*********#return centroids
# 将所有样本进行归类,其所在的类别的索引就是其类别标签
def get_cluster_labels(clusters, X):'''input:clusters(list):列表中有k个元素,每个元素保存相同簇的样本的索引X(ndarray):所有样本output:y_pred(ndarray):所有样本的类别标签'''#*********Begin*********#y_pred = np.zeros(np.shape(X)[0])for cluster_i, cluster in enumerate(clusters):for sample_i in cluster:y_pred[sample_i] = cluster_i#*********End*********#return y_pred
# 对整个数据集X进行Kmeans聚类,返回其聚类的标签
def predict(k,X,max_iterations,varepsilon):'''input:k(int):聚类簇的个数X(ndarray):所有样本max_iterations(int):最大训练轮数varepsilon(float):最小误差阈值output:y_pred(ndarray):所有样本的类别标签'''#*********Begin*********## 从所有样本中随机选取k样本作为初始的聚类中心centroids = init_random_centroids(k,X)# 迭代,直到算法收敛(上一次的聚类中心和这一次的聚类中心几乎重合)或者达到最大迭代次数for _ in range(max_iterations):# 将所有进行归类,归类规则就是将该样本归类到与其最近的中心clusters = create_clusters(k,centroids, X)former_centroids = centroids# 计算新的聚类中心centroids = update_centroids(k,clusters, X)# 如果聚类中心几乎没有变化,说明算法已经收敛,退出迭代diff = centroids - former_centroidsif diff.any() < varepsilon:breaky_pred = get_cluster_labels(clusters, X)#*********End*********#return y_pred

数据挖掘算法原理与实践:k-均值相关推荐

  1. 数据挖掘算法原理与实践:数据预处理

    第1关:标准化 任务描述 本关任务:利用sklearn对数据进行标准化. 相关知识 为了完成本关任务,你需要掌握:1.为什么要进行标准化,2.Z-score标准化,3.Min-max标准化,4.Max ...

  2. 头歌平台(EduCoder)————数据挖掘算法原理与实践:决策树

    第1关:决策树算法思想 任务描述 本关任务:根据本节课所学知识完成本关所设置的选择题. 相关知识 为了完成本关任务,你需要掌握决策树的相关基础知识. 第2关:决策树算法原理 任务描述 本关任务:根据本 ...

  3. educoder 数据挖掘算法原理与实践:线性回归(房价预测)

    第1关:线性回归算法思想 1 BC 第2关:动手实现线性回归 #encoding=utf8 import numpy as np#mse def mse_score(y_predict,y_test) ...

  4. kmeans算法原理以及实践操作

    原文:http://www.cnblogs.com/dudumiaomiao/p/5839905.html kmeans算法原理以及实践操作(多种k值确定以及如何选取初始点方法) kmeans一般在数 ...

  5. LSA/LSI算法原理和实践

    本篇文章主要转载自LSI/LSA算法原理与实践Demo 目录: 1.使用场景 2.优缺点 3.算法原理 3.1.传统向量空间模型的缺陷 3.2.Latent Semantic Analysis (La ...

  6. Apollo星火计划学习笔记——Apollo开放空间规划算法原理与实践

    文章目录 前言 1. 开放空间规划算法总体介绍 1.1 Task: OPEN_SPACE_ROI_DECIDER 1.2 Task: OPEN_SPACE_TRAJECTORY_PROVIDER 1. ...

  7. 【操作系统】进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(2a):SJF(短任务优先) 算法 原理与实践 1 前提铺垫 与上一篇同. 2 STCF 原理 STCF(Shortest Time-to-Completion Fi ...

  8. 【操作系统】进程调度(2a):SJF(短任务优先) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(1):FIFO(先进先出)算法 原理与实践 1 前提铺垫 请参考上一篇文章的前提铺垫部分,本文与之完全一致. 2 SJF 原理 SJF(Shortest Job Fi ...

  9. 【操作系统】进程调度(3):RR(轮转) 算法 原理与实践

    0 前言 接上一篇文章:进程调度(2b):STCF(最短完成时间优先) 算法 原理与实践 1 前提铺垫 除了与上一篇相同的,这里介绍新的基础知识. 1.1 三种类型的程序 计算密集型(CPU导向) 输 ...

  10. 【操作系统】进程调度(1):FIFO(先进先出)算法 原理与实践

    0 前言 本文基于书籍<Operating System:Three Easy Pieces>. 中译本:<操作系统导论>,中译本质量还可以,但是英文版后来的更新,中文版目前没 ...

最新文章

  1. 我的fedora10的virtual box网络设置
  2. Windows下Python环境搭建
  3. boost::hana::make_set用法的测试程序
  4. 1814: 一元三次方程求解
  5. NYOJ 289 苹果(01背包)
  6. VS2008+OpenCL环境配置
  7. 深度学习之 BP 算法
  8. (TTSR)Learning Texture Transformer Network for Image Super-Resolution
  9. 算法编程:找一个数在一系列数中出现次数一半以上
  10. oracle left join行数,sql – 如何将此LEFT JOIN返回的行数限制为一个?
  11. dz中footer.php在哪找,去掉DZ顶部标题,美化底部左下方版权,详细教程
  12. Matlab导出高DPI图像——生成高分辨率.eps .tiff .jpg图像的方法
  13. 小程序轮播图测试用例
  14. 怎么看自己电脑的IP地址
  15. win10 如何更换即将过期的产品密钥
  16. MapReduce程序中的万能输入FileInputFormat.addInputPaths
  17. Python+Mysql实现教务管理系统
  18. Unity 3D 多媒体 音频
  19. NetXpert XG帮您解决“布线安装与维护”难题
  20. MySQL5.7 yum 安装

热门文章

  1. VS提示error C2011: “timespec”:“struct”类型重定义
  2. c语言学生成绩管理系统的设计,C语言学生成绩管理系统设计
  3. 五种常用的MySQL图形化管理工具
  4. 还在花钱买课呢?教你白嫖开放注册图书馆价值上万元的学习资源
  5. 大文件上传NeatUpload简单用法nbsp;(…
  6. Power BI销售数据分析
  7. 解决chrome最新版本无法正常浏览https网页的问题
  8. 自动控制原理4.4---系统性能分析
  9. 开源先锋启示|有爱的开源
  10. android 类似按键精灵脚本_android软件。按键精灵或者脚本精灵都可以,录制脚本可以设置播放次数的最好了。...