K-means算法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xvV44zrK-1573127992123)(https://img-blog.csdn.net/20171220143951780?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSEhUTkFO/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)]
关于步骤:参考之前的博客
关于代码与数据:暂时整理代码如下:后期会附上github地址,上传原始数据与代码完整版,

各种聚类算法的对比:参考连接
Kmeans算法的缺陷

1.聚类中心的个数K 需要事先给定,但在实际中这个 K 值的选定是非常难以估计的,很多时候,事先并不知道给定的数据集应该分成多少个类别才最合适
2.Kmeans需要人为地确定初始聚类中心,不同的初始聚类中心可能导致完全不同的聚类结果。

#!usr/bin/env python
#_*_ coding:utf-8 _*_
import random
import math
'''
kMeans:2列数据对比,带有head
'''
#1.load data
def importData():f = lambda name,b,d: [name, float(b), float(d)]with open('birth-death-rates.csv', 'r') as inputFile:return [f(*line.strip().split('\t')) for line in inputFile]

写入文件类型

**#2. calculate Distance **

def euclideanDistance(x,y):return math.sqrt(sum([(a-b)**2 for (a,b) in zip(x,y)]))#L=points,
def partition(points, k, means, d=euclideanDistance):# print('means={}'.format(means))thePartition = [[] for _ in means]  # list of k empty listsindices = range(k)# print('indices={}'.format(indices))for x in points:#index为indices索引,调用d函数,计算每个值与聚类中心的距离,将其分类closestIndex = min(indices, key=lambda index: d(x, means[index]))#实现X与每个Y直接的求解:key=lambda index: d(x, means[index])thePartition[closestIndex].append(x)return thePartition

#3.寻找收敛点
def mean(points):''' assume the entries of the list of points are tuples;e.g. (3,4) or (6,3,1). '''n = len(points)# print(tuple(float(sum(x)) / n for x in zip(*points)))   #*points将【[1,2],[2,3]】分割出来【1,2】return tuple(float(sum(x)) / n for x in zip(*points))  #将最开始的[[4, 1], [1, 5]] 经过处理变成[(4, 1),(1, 5)]def kMeans(points, k, initialMeans, d=euclideanDistance):oldPartition = []newPartition = partition(points, k, initialMeans, d)while oldPartition != newPartition:oldPartition = newPartitionnewMeans = [mean(S) for S in oldPartition]newPartition = partition(points, k, newMeans, d)return newPartition

#0.函数调用初始中心点

if __name__ == "__main__":L = [x[1:] for x in importData()] # remove names# print (str(L).replace('[','{').replace(']', '}'))import matplotlib.pyplot as plt'''plt.scatter(*zip(*L))plt.show()'''import randomk = 3partition = kMeans(L, k, random.sample(L, k))  #L是集合,K分类个数,random.sample(L, k)中心点plt.scatter(*zip(*partition[0]), c='b')#[[],[],[]]plt.scatter(*zip(*partition[1]), c='r')plt.scatter(*zip(*partition[2]), c='g')plt.show()

python 聚类分析实战案例:K-means算法(原理源码)相关推荐

  1. PCL 实现 SAC_IA 算法原理源码解析

    PCL 实现 SAC_IA 算法原理源码解析 采样一致性算法(SAC_IA)用于点云粗配准中,配准效果还不错,PCL 中也实现了该算法,本文深入 PCL 源码,学习一下 SAC_IA 算法在 PCL ...

  2. python聚类分析案例_python 聚类分析实战案例:K-means算法(原理源码)

    K-means算法: 关于步骤:参考之前的博客 关于代码与数据:暂时整理代码如下:后期会附上github地址,上传原始数据与代码完整版, 各种聚类算法的对比:参考连接 Kmeans算法的缺陷 1.聚类 ...

  3. kmeans改进 matlab,基于距离函数的改进k―means 算法

    摘要:聚类算法在自然科学和和社会科学中都有很普遍的应用,而K-means算法是聚类算法中经典的划分方法之一.但如果数据集内相邻的簇之间离散度相差较大,或者是属性分布区间相差较大,则算法的聚类效果十分有 ...

  4. Python数据清洗实战案例--拉勾招聘数据清洗

    Python数据清洗实战案例–拉勾招聘数据清洗 (本篇博客主要介绍个人对一份数据的清洗代码和清洗效果) 主要涉及应用的库是numpy.pandas.matplotlib,话不多说,直接上代码 #全部行 ...

  5. Python+Appium 实战案例

    Python+Appium 实战案例 1.获取连接的设备名称 adb devices 2.获取APP的包名和首页名称 在模拟器获取真机中打开需要测试的APP 输入:adb shell 输入:dumps ...

  6. Python开发实战案例之网络爬虫(附源码)-张子良-专题视频课程

    Python开发实战案例之网络爬虫(附源码)-35人已学习 课程介绍         课程特色: 特色1:案例驱动-围绕两大完整的Python网络爬虫实战开发案例:IT电子书下载网络爬虫和股票交易数据 ...

  7. js实战案例--点击关闭二维码

    js实战案例–点击关闭二维码 要求:当鼠标点击二维码关闭按钮时,则关闭整个二维码 如

  8. 动态代理原理源码分析

    看了这篇文章非常不错转载:https://www.jianshu.com/p/4e14dd223897 Java设计模式(14)----------动态代理原理源码分析 上篇文章<Java设计模 ...

  9. 深入解析SpringBoot核心运行原理和运作原理源码

    SpringBoot核心运行原理 Spring Boot 最核心的功能就是自动配置,第 1 章中我们已经提到,功能的实现都是基于"约定优于配置"的原则.那么 Spring Boot ...

最新文章

  1. 鼠标样式(cursor)
  2. 深度学习之循环神经网络(11-a)LSTM情感分类问题代码
  3. KMS的几个开源实现汇总
  4. 这个神器火了,做个高大上的PPT演示竟然就这么简单!
  5. ASP.NET MVC在IIS6下部署的小技巧
  6. SpringCloud工作笔记068---登录堡垒机_下载文件报错_Xshell向Linux上传下载文件_lrzsz_ZModem
  7. SpringBoot整合Encahce后,访问页面页面出现异常信息,无法获取返回数据
  8. adobe audition cs6 能打开mpcm文件吗?_单根32G内存靠谱吗?阿斯加特 W2 32G DDR4 2666内存测试...
  9. 【Oracle】append
  10. datatable行内内容太长,有时不自动换行解决方法
  11. poj - 1509 Glass Beads
  12. atitit.为什么笔记本跟个手机不能组装而pc可以
  13. 2021-2027全球与中国大数据工程服务市场现状及未来发展趋势
  14. linux将目录打包压缩,Linux系统文件、目录及文件系统的压缩与打包详解
  15. Error: ImageIO: PNG invalid PNG file: iDOT doesn't point to valid IDAT chunk 解决
  16. getc和fgetc区别
  17. android 安装APP缓存文件在哪,APP的缓存文件到底应该存在哪?看完这篇文章你应该就自己清楚了...
  18. 接口测试用例设计:常见问题和风险
  19. 大数据技术之Hive 第4章 DDL数据定义语言
  20. 中国会计科目的中英文对照

热门文章

  1. 浅谈Telegraf+InfluxDB+Grafana快速搭建简易实时监控系统
  2. 复制百度文库的文字加什么后缀_外链引流对SEO有帮助 选择域名后缀便于发外链...
  3. Android EditText定制粘贴和定制输入
  4. 项目一.认识Linux操作系统
  5. Extjs 扩展Htmleditor,支持 图片上传 文件上传 插入flash 插入多媒体 插入层 插入横线等功能
  6. 想成为一名合格的前端工程师,需要掌握哪些技能?
  7. 微信自动聊聊天机器人(利用腾讯的智能聊天接口)
  8. java 注册表 修改_[Java] jar文件运行(修改注册表修)
  9. 海联金汇巨亏24亿,30亿收购的联动优势商誉减值20亿、背后现大量现金贷口子
  10. 指纹使用(FingerprintManager)