欢迎访问新blog页面:K-Means-Simple understanding and code implementation

一、聚类定义

聚类分析(cluster analysis)是一组将研究对象分为相对同质的群组(clusters)的统计分析技术。 聚类分析区别于分类分析(classification analysis) ,后者是有监督的学习。

  • 依据研究对象(样品或指标)的特征,对其进行分类的方法,减少研究对象的数目。

  • 各类事物缺乏可靠的历史资料,无法确定共有多少类别,目的是将性质相近事物归入一类。

  • 各指标之间具有一定的相关关系。

  • 变量类型:定类变量、定量(离散和连续)变量

二、划分聚类方法-Kmeans:

对于给定的样本集,按照样本之间的距离大小,将样本集划分为K个簇。让簇内的点尽量紧密的连在一起,而让簇间的距离尽量的大。

  • 步骤1:取得k个初始中心点
  • 步骤2:利用中心点划分样本集为k个簇
  • 步骤3:根据已经被分类的数据分别重新计算各自的中心点,如果中心点发生变化回到步骤2,未发生变化转到步骤4
  • 步骤4:收敛

缺点:
初始值敏感、采用迭代方法,得到的结果只是局部最优、K值的选取不好把握、对于不是凸的数据集比较难收敛
如何衡量Kmeans 算法的精确度?
SSE(Sum of Square Error) 误差平方和, SSE越小,精确度越高。

三、改进算法-二分Kmeans

  • 首先将所有点作为一个簇,然后将其一分为二。
  • 每次选择一个簇一分为二,选取簇的依据取决于其是否能最大程度降低SSE即选取聚类后SSE最小的一个簇进行划分。
  • 直至有k个簇

四、Kmeans Code

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as scio
# %matplotlib inlinedef K_Means(X, sp, K):# 计算临近点def near(p):dis = [np.sum(np.square(x-p)) for x in sp]return dis.index(min(dis))   # 打印结果def print_result(sp_list):#打印中心点迭代轨迹sp_list = [np.array([x[k] for x in sp_list]) for k in range(K)]for k in range(K):plt.plot(sp_list[k][:,0], sp_list[k][:,1], 'k->', label='type{}'.format(k))#分类打印其他点p_list = [[] for k in range(K)]for p in X:i = near(p)            p_list[i].append(p)p_list = [np.array(x) for x in p_list]color = ['r','g','b']    for i in range(K):plt.plot(p_list[i][:,0], p_list[i][:,1],color[i]+'o')plt.title('K-Means Result')plt.xlabel('X')plt.ylabel('Y')plt.legend('123')plt.show()# 迭代中心点sp_list = []sp_list.append(sp)while True:count = np.zeros(K)sp_t = np.zeros((K,2))for p in X:i = near(p)            count[i] += 1sp_t[i] += psp_t = np.array([sp_t[i]/count[i] for i in range(K)])SSE = np.sum(np.square(sp-sp_t))if SSE < 0.001:breaksp = sp_tsp_list.append(sp)print_result(sp_list)print('聚类中心:')for p in sp:print(p, end=',')if __name__ == '__main__':data = scio.loadmat('ex7data2.mat')X = data['X']K = 3sp = np.array([[3, 3], [6, 2], [8, 5]]) # starting pointK_Means(X, sp, K)

K为3聚类中心: [1.95399466 5.02557006],[3.04367119 1.01541041],[6.03366736 3.00052511]

[测试数据下载地址]: ex7data2.mat
[参考资料]:K-Means聚类算法原理

聚类分析(cluster analysis)相关推荐

  1. MATLAB聚类分析(Cluster Analysis)

    使用环境:MATLAB2016a.MATLAB2010a 聚类分析是一种无监督式学习,不像回归分析等需要Inputs 和 Targets ,聚类分析是只通过提供一组数据实现分类的算法.下面给出本人在学 ...

  2. 数据挖掘之聚类分析(Cluster Analysis)

    1.Motivations(目的) Identify grouping structure of data so that objects within the same group are clos ...

  3. Cluster analysis :Basic Concepts and Algorithms -- Part 5 Cluster Evalation

    系列文章 Cluster analysis :Basic Concepts and Algorithms – Part 1 Overview Cluster analysis :Basic Conce ...

  4. Cluster analysis :Basic Concepts and Algorithms -- Part 1 Overview

    参考文献:(1)<Introduction to Data Mining (Second Edition)>,2018,Tan, Pang-Ning:Steinbach, Michael: ...

  5. R语言聚类分析--cluster, factoextra

    R语言聚类分析–cluster, factoextra 本文转载自"R语言中文社区",己获授权,宏基因组公众号编辑对内容进行测试.修改及补充. 原文链接:https://mp.we ...

  6. 词袋模型(bag of words)构建并使用主题模型(topic models)特征进行文本聚类分析(clustering analysis)实战

    词袋模型(bag of words)构建并使用主题模型(topic models)特征进行文本聚类分析(clustering analysis)实战 目录

  7. Cluster analysis :Basic Concepts and Algorithms -- Part 3 Hierarchical Clustering

    系列文章目录 Cluster analysis :Basic Concepts and Algorithms – Part 1 Overview Cluster analysis :Basic Con ...

  8. Matlab聚类分析(Cluster Analyses)

    cited from:来源 总括 Matlab提供系列函数用于聚类分析,归纳起来具体方法有如下: 方法一: 直接聚类,利用clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄 ...

  9. Cluster Analysis with Dirichlet Process Mixture Models

    在一篇文章看到使用DPMM做聚类,网上很多关于Dirichlet Process的资料,很多关于DPMM的资料,但是没找着怎么用这个来做聚类,而且这个对数学要求太高了,看了两天硬是搞不懂是个啥,最后算 ...

最新文章

  1. 用友公司Java面试题(含答案)
  2. eselasticsearch入门_ElasticSearch入门 附.Net Core例子
  3. Matlab中配置LibSVM 总结
  4. vector-空间增长
  5. 日跑几十万作业,唯品会HDFS是如何优化的
  6. 如何添加JWT生成的token在请求头中
  7. bzoj4419 [Shoi2013]发微博 差分
  8. 我为什么开始编程?(2015.7-2016.10阶段性总结)
  9. 移动端日历插件_小程序日历组件开发教程!
  10. 吴恩达|机器学习作业8.0.异常检测
  11. Java-虚拟机-局部变量表
  12. 剑指offer之顺时针打印矩阵
  13. System.Trunc、System.Round、System.Int - 返回整数部分
  14. 强劲有力的EnableQ在线调查问卷引擎
  15. 2022edu教育邮箱哪个好?申请注册教育邮箱很难吗?
  16. 高维数据软子空间聚类FSC
  17. 两步免费开通企业微信,不用提交资料
  18. Fatal NI connect error 12170错误解决办法
  19. Android_10开发京东商城手机客户端的几点非技术性总结
  20. 案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程。 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下:

热门文章

  1. Android 9.0 行为变更(一)针对所有 API 级别的应用
  2. #7 C++高级--内存管理、文件处理、多线程
  3. 任意流(随机流)——RandomAccessFile
  4. 手动标记用例状态_别再用「六个点」当省略号了,这些标点都有更规范的输入方式...
  5. 想成为精英,你的时间颗粒度够细吗?
  6. 定制合成彩色光刻胶(黑色负性i-line光刻胶;红色、蓝色、黄色、紫色、绿色、黑色)
  7. 正则表达式切掉log日志前面不需要的内容
  8. 金融科技大数据产品推荐:金融魔方 ---专业的金融SaaS服务平台
  9. navigationBar 标题字体颜色设置
  10. 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度。 程序的输入是一个整数,表示华氏温度。输出对