聚类分析(cluster analysis)
欢迎访问新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)相关推荐
- MATLAB聚类分析(Cluster Analysis)
使用环境:MATLAB2016a.MATLAB2010a 聚类分析是一种无监督式学习,不像回归分析等需要Inputs 和 Targets ,聚类分析是只通过提供一组数据实现分类的算法.下面给出本人在学 ...
- 数据挖掘之聚类分析(Cluster Analysis)
1.Motivations(目的) Identify grouping structure of data so that objects within the same group are clos ...
- Cluster analysis :Basic Concepts and Algorithms -- Part 5 Cluster Evalation
系列文章 Cluster analysis :Basic Concepts and Algorithms – Part 1 Overview Cluster analysis :Basic Conce ...
- Cluster analysis :Basic Concepts and Algorithms -- Part 1 Overview
参考文献:(1)<Introduction to Data Mining (Second Edition)>,2018,Tan, Pang-Ning:Steinbach, Michael: ...
- R语言聚类分析--cluster, factoextra
R语言聚类分析–cluster, factoextra 本文转载自"R语言中文社区",己获授权,宏基因组公众号编辑对内容进行测试.修改及补充. 原文链接:https://mp.we ...
- 词袋模型(bag of words)构建并使用主题模型(topic models)特征进行文本聚类分析(clustering analysis)实战
词袋模型(bag of words)构建并使用主题模型(topic models)特征进行文本聚类分析(clustering analysis)实战 目录
- Cluster analysis :Basic Concepts and Algorithms -- Part 3 Hierarchical Clustering
系列文章目录 Cluster analysis :Basic Concepts and Algorithms – Part 1 Overview Cluster analysis :Basic Con ...
- Matlab聚类分析(Cluster Analyses)
cited from:来源 总括 Matlab提供系列函数用于聚类分析,归纳起来具体方法有如下: 方法一: 直接聚类,利用clusterdata函数对样本数据进行一次聚类,其缺点为可供用户选择的面较窄 ...
- Cluster Analysis with Dirichlet Process Mixture Models
在一篇文章看到使用DPMM做聚类,网上很多关于Dirichlet Process的资料,很多关于DPMM的资料,但是没找着怎么用这个来做聚类,而且这个对数学要求太高了,看了两天硬是搞不懂是个啥,最后算 ...
最新文章
- 用友公司Java面试题(含答案)
- eselasticsearch入门_ElasticSearch入门 附.Net Core例子
- Matlab中配置LibSVM 总结
- vector-空间增长
- 日跑几十万作业,唯品会HDFS是如何优化的
- 如何添加JWT生成的token在请求头中
- bzoj4419 [Shoi2013]发微博 差分
- 我为什么开始编程?(2015.7-2016.10阶段性总结)
- 移动端日历插件_小程序日历组件开发教程!
- 吴恩达|机器学习作业8.0.异常检测
- Java-虚拟机-局部变量表
- 剑指offer之顺时针打印矩阵
- System.Trunc、System.Round、System.Int - 返回整数部分
- 强劲有力的EnableQ在线调查问卷引擎
- 2022edu教育邮箱哪个好?申请注册教育邮箱很难吗?
- 高维数据软子空间聚类FSC
- 两步免费开通企业微信,不用提交资料
- Fatal NI connect error 12170错误解决办法
- Android_10开发京东商城手机客户端的几点非技术性总结
- 案例一: 使用IDA PRO+OllyDbg+PEview 追踪windows API 动态链接库函数的调用过程。 首先用文本编辑器写一个C++源程序名为StackFrame.cpp ,代码如下:
热门文章
- Android 9.0 行为变更(一)针对所有 API 级别的应用
- #7 C++高级--内存管理、文件处理、多线程
- 任意流(随机流)——RandomAccessFile
- 手动标记用例状态_别再用「六个点」当省略号了,这些标点都有更规范的输入方式...
- 想成为精英,你的时间颗粒度够细吗?
- 定制合成彩色光刻胶(黑色负性i-line光刻胶;红色、蓝色、黄色、紫色、绿色、黑色)
- 正则表达式切掉log日志前面不需要的内容
- 金融科技大数据产品推荐:金融魔方 ---专业的金融SaaS服务平台
- navigationBar 标题字体颜色设置
- 题目内容: 写一个将华氏温度转换成摄氏温度的程序,转换的公式是: °F = (9/5)*°C + 32 其中C表示摄氏温度,F表示华氏温度。 程序的输入是一个整数,表示华氏温度。输出对