python面向对象实现K均值聚类
来源:互联网 发布:网络语byd是什么意思 编辑:程序博客网 时间:2024/06/08 10:16
此例中先以随机点为核心进行第一次聚类,再将结果的质心作为核心再次聚类,重复两次,改善了聚类效果
import pandas as pdfrom pandas import DataFrame,Seriesimport numpy as npimport matplotlib.pyplot as pltfrom numpy import random as npr#数据准备a1=npr.randn(100,2)*(25,30)+(100,200);b1=npr.randn(100,2)*(30,40)+(300,400)c1=npr.randn(100,2)*(45,60)+(300,200);d1=npr.randn(100,2)*(55,35)+(100,500)data=[]data.extend([x for xl in(a1,b1,c1,d1) for x in xl])data=DataFrame(data)类=[]#定义类别类(分类),操作点方法(放置)class 分类: 成员=[];质心=[0,0] def __init__(self,点): self.成员=[点] self.质心=list(DataFrame(self.成员).mean(axis=0)) def 添加成员(self,点): self.成员.extend([点]) self.质心=list(DataFrame(self.成员).mean(axis=0))def 放置(点): m=[] for x in 类: m.append([x,((点[0] - x.质心[0])**2 + (点[1] - x.质心[1])**2)**0.5]) 距离集合=DataFrame(m,columns=['a','b']) 最近类=距离集合.ix[距离集合['b'].idxmin()][0] 最近类.添加成员(点)#随机确定第一次核心随机点=list(list(data.ix[i]) for i in npr.randint(0,data.shape[0]-1,size=4))print(随机点)#操作点方法def func(): 类.append(a);类.append(b);类.append(c);类.append(d) for i in range(data.shape[0]): 放置(list(data.ix[i]))# ----------------------------------------------------------------------------------------# 原始数据fig, axes = plt.subplots(1,4,figsize=(20,8))axes[0].scatter(data[0], data[1])# 一次迭代类=[]a, b, c, d = [分类(随机点[i]) for i in range(4)]#第一次放置点,确定新核心func()#作图ad=DataFrame(a.成员);bd=DataFrame(b.成员);cd=DataFrame(c.成员);dd=DataFrame(d.成员)for v,xd in enumerate([ad,bd,cd,dd]): axes[1].scatter(xd[0],xd[1],color=['g','k','y','r'][v])axes[1].scatter(DataFrame(随机点)[0],DataFrame(随机点)[1],s=80)# 二次迭代#确定新核心随机点=list([a.质心,b.质心,c.质心,d.质心])类=[]a, b, c, d = [分类(随机点[i]) for i in range(4)]#第二次放置点func()#作图ad=DataFrame(a.成员);bd=DataFrame(b.成员);cd=DataFrame(c.成员);dd=DataFrame(d.成员)for v,xd in enumerate([ad,bd,cd,dd]): axes[2].scatter(xd[0],xd[1],color=['g','k','y','r'][v])axes[2].scatter(DataFrame(随机点)[0],DataFrame(随机点)[1],s=80)# 三次迭代#确定新核心随机点=list([a.质心,b.质心,c.质心,d.质心])类=[]a, b, c, d = [分类(随机点[i]) for i in range(4)]#第三次放置点func()#作图ad=DataFrame(a.成员);bd=DataFrame(b.成员);cd=DataFrame(c.成员);dd=DataFrame(d.成员)for v,xd in enumerate([ad,bd,cd,dd]): axes[3].scatter(xd[0],xd[1],color=['g','k','y','r'][v])axes[3].scatter(DataFrame(随机点)[0],DataFrame(随机点)[1],s=80)print(ad.shape,bd.shape,cd.shape,dd.shape)plt.show()
0 0
- python面向对象实现K均值聚类
- python实现之K-均值聚类
- Python K均值聚类
- python-k均值聚类
- 二分k均值 Python实现
- 机器学习经典算法详解及Python实现--聚类及K均值、二分K-均值聚类算法
- 机器学习经典算法详解及Python实现--聚类及K均值、二分K-均值聚类算法
- 机器学习K均值聚类 python
- Kmeans K均值聚类,OpenCV实现
- K均值聚类以及matlab实现
- Matlab实现K均值聚类
- K-均值聚类
- K均值聚类
- k均值聚类
- k均值聚类
- K均值聚类
- K均值聚类
- k均值聚类
- 用VMware Workstation 11的LAN区段功能构造内网环境
- 职场宝典
- Android 6.0指纹识别App开发demo
- iOS_Pass iOS10适配:权限访问、MiPush小米推送(更新中)
- WEB前端 | H5基础——(1)H5新增标签
- python面向对象实现K均值聚类
- Wdatepicker日期控件的使用指南
- updates is listed more than once in the configuration 的解决
- webpack入坑之旅
- 解决Android Studio加载第三方jar包,出现包重复加载的问题:
- Java并发专题 带返回结果的批量任务执行 CompletionService ExecutorService.invokeAll
- 51nod 1136 欧拉函数(欧拉函数)
- Chrome 浏览器修改默认搜索引擎跟网页右键搜索 启动特定页
- Cocos2dx游戏资源加密之XXTEA