一.项目动机

人工智能挑战性课程,第二次项目对数据进行聚类,当然这也是之后任何无监督聚类或者是无监督机器学习的理论基础

二.项目代码

import numpy
import matplotlib.pyplot as plt
import random
from sklearn.datasets import make_blobs
import codecs
from sklearn.cluster import KMeans
from collections import defaultdict
from itertools import chain
import math
import matplotlib.pyplot as pltdef get_data(filepath):"""处理数据"""indata=codecs.open(filepath,"r","utf-8").readlines()dataset=list()number=0nodedata=defaultdict(list)a = 0b = 0c = 0for line in indata:line=line.strip()line=line.replace(',',' ')strlist=line.split()if strlist[4] == 'Iris-setosa':a = a + 1if strlist[4] == 'Iris-versicolor':b = b + 1if strlist[4] == 'Iris-virginica':c = c + 1#print(strlist[0:4])numlist = list()for item in strlist[0:4]:num=float(item)numlist.append(num)numlist.append(strlist[-1])dataset.append(numlist)number=number+1nodedata[number]=numlistreturn dataset,nodedata,number,a,b,cdef get_every_max_and_deal(dataset,number):a=0b=0c=0d=0for i in dataset:a1,b1,c1,d1=i[0],i[1],i[2],i[3]if a1>a:a=a1if b1>b:b=b1if c1>c:c=c1if d1>d:d=d1passnum=[a,b,c,d]return  numdef get_distance(vec1,vec2):"""计算欧氏距离"""return numpy.sqrt(numpy.sum(numpy.square(vec1-vec2)))def get_ma_distance(vec1,vec2):X=numpy.vstack([vec1,vec2])XT=X.TS=numpy.cov(X)SI=numpy.linalg.inv(S)n=XT.shape[0]d1=[]for i in range(0,n):for j in range(i+1):delta=XT[i]-XT[j]d=numpy.sqrt(numpy.dot(delta,SI),delta.T)d1.append(d)return d1def initcenter(dataset,k):"""初始化K个质心,随机获取"""return random.sample(dataset,k)def Kmeans(dataset,k,number,nodedata,num):"""聚类,先随机选取聚类中心,然后分别计算,迭代100次"""distance={}for i in range(number):distance[i+1]=100000  #距离聚类中心的初始值初始化无穷大initcenter_node=initcenter(dataset,k)cu_lei=defaultdict(list) #存储每一个类now_distance=defaultdict(list)for line in range(number):line_node_data=nodedata[line+1]for j in range(k):every=initcenter_node[j]vec1=numpy.mat(line_node_data[0:4])   #列表转换为矩阵vec2=numpy.mat(every[0:4])vec1=vec1/numvec2=vec2/numnow_distance[line+1].append(get_distance(vec1,vec2)) #计算欧式距离index=numpy.argmin(now_distance[line+1]) #返回其最小值的位置cu_lei[index+1].append(line_node_data)   #将该点加入到这个簇类中passpasstime=0while time<=300:initcenter_new_node = []  # 存储每一个聚类的均值中心点for m in range(k):coming_list=cu_lei[m+1]vec=numpy.mat([0,0,0,0])j=0for line in coming_list:vec=vec+numpy.mat(line[0:4])j=j+1pass#print("-------------------")new_center_node=numpy.array(vec/j)   #每个聚类中心的均值点new_center_node=new_center_node.tolist()new_center_node=list(chain.from_iterable(new_center_node))#重新转换为列表类型initcenter_new_node.append(new_center_node)now_distance=defaultdict(list)cu_lei = defaultdict(list)  # 存储每一个类for line in range(number):line_new_node_data=nodedata[line+1]for each in range(k):every = initcenter_new_node[each]vec1 = numpy.mat(line_new_node_data[0:4])  # 列表转换为矩阵vec2 = numpy.mat(every[0:4])vec1 = vec1 / numvec2 = vec2 / numnow_distance[line + 1].append(get_distance(vec1, vec2))  # 计算欧式距离index = numpy.argmin(now_distance[line + 1])  # 返回其最小值的位置cu_lei[index + 1].append(line_new_node_data)  # 将该点加入到这个簇类中time=time+1return cu_leidataset,nodedata,number,one,two,three=get_data('data')
num=get_every_max_and_deal(dataset, number)
a=initcenter(dataset,3)
ans=Kmeans(dataset,3,number,nodedata,num)
node_new=[[] for _ in range(3)]
for line in range(3):node=ans[line+1]for j in node:node_new[line].append(j[4])
def get_new_data_test(node_new):for line in node_new:print(line)print("____________________________________")biaozhun=len(line)maxlabel=max(line,key=line.count)find_number=line.count(maxlabel)print("分类为%s的准确率为:"%maxlabel)print(find_number/biaozhun)pass
get_new_data_test(node_new)plt.plot(node_new[0])
plt.plot(node_new[1])
plt.plot(node_new[2])plt.show()

python实现Kmeans算法相关推荐

  1. kmeans算法实例及python代码-Python实现k-means算法

    本文实例为大家分享了Python实现k-means算法的具体代码,供大家参考,具体内容如下 这也是周志华<机器学习>的习题9.4. 数据集是西瓜数据集4.0,如下 编号,密度,含糖率 1, ...

  2. [549]python实现K-Means算法

    K-Means是一种聚类(Clustering)算法,使用它可以为数据分类.K代表你要把数据分为几个组,前文实现的K-Nearest Neighbor算法也有一个K,实际上,它们有一个相似之处:K-M ...

  3. 利用 Python 实现 K-means 算法

    利用 Python 实现 K-means 算法   使用 Python 实现K-means算法,采用随机函数随机在二维平面上生成100个点,然后使用所写程序对这100个点进行聚类[可以采用SSE(Su ...

  4. 《机器学习》西瓜书课后习题9.4——python实现K-means算法

    <机器学习>西瓜书课后习题9.4--python实现K-means算法 9.4 试编程实现k均值算法,设置三组不同的k值.三组不同的初始中心点,在西瓜数据集4.0上进行实验比较, 并讨论什 ...

  5. python实现K-means算法

    K-means算法流程: 随机选k个样本作为初始聚类中心 计算数据集中每个样本到k个聚类中心距离,并将其分配到距离最小的聚类中心 对于每个聚类,重新计算中心 回到2,至得到局部最优解 python代码 ...

  6. 数据挖掘-聚类分析(Python实现K-Means算法)

    概念: 聚类分析(cluster analysis ):是一组将研究对象分为相对同质的群组(clusters)的统计分析技术.聚类分析也叫分类分析,或者数值分类.聚类的输入是一组未被标记的样本,聚类根 ...

  7. python颜色识别算法_纯Python编写K-means算法,提取图片中的主体颜色

    在文章 今天我用Python手写了一个K-means算法,来完成同样的功能. 聚类是数据挖掘中一种非常重要的学习流派,指将未标注的样本数据中相似的分为同一类,正所谓"物以类聚,人以群分&qu ...

  8. python实现kmeans算法对图片的聚类分割

    kmeans算法未调用库,使用基本数据结构实现 1.     对于给定的图片IMGP8080.jpg,要求把河流部分划分出来.可以采用以下方法:在该图像中分别在河流部分与非河流部分画出一个窗口,把在这 ...

  9. 基于Python实现k-means算法和混合高斯模型

    1. 实验目的 实现一个 k-means 算法和混合高斯模型,并且用 EM 算法估计模型中的参数. 2. 实验要求 用高斯分布产生 k 个高斯分布的数据(不同均值和方差)(其中参数自己设定). 用 k ...

  10. 【机器学习】使用Python实现k-means算法,并根据红酒的13个特征对红酒数据进行聚类。

    数据集为一份红酒数据,一共有178个样本,每个样本有13个特征,这里不会提供你红酒的标签,你需要自己根据这13个特征对红酒进行聚类,部分数据如下图: # encoding=utf8 import nu ...

最新文章

  1. dabs是什么意思_单词flounder是什么中文意思
  2. 【五线谱】踏板标记 ( 踩下踏板 Ped 标记 | 松开踏板 * 标记 | MIDI 中的对应踏板指令 | 连续控制信号 | 开关控制信号 )
  3. sklearn-GridSearchCV调节超参数
  4. sjms-4 行为型模式
  5. 值得一看的PCB接地设计规范!
  6. python DB.fetchall()--获取数据库所有记录列表
  7. M1芯片MacBook pro重装系统出现报错情况的解决方法
  8. 被国产机所迫?苹果或将每半年发布一次新iPhone
  9. 你不知道的javascript_你不知道的javascript(上)
  10. 数据结构专题(二):2.7顺序表反转
  11. MySQL 一张表中两个字段值互换
  12. 《Cisco防火墙》一8.7 通过NAT规则定义连接限制
  13. centos 6.5 安装qt5.2
  14. windows Server2016 关闭135端口
  15. Camunda 6、SpringBoot Camunda 流程前端任务流程图跟踪显示
  16. 完善保密加密机制(Perfectly-secret Encryption)——无条件安全加密算法
  17. web前端优化与细节
  18. PHP之深度剖析:网站唯一登录,踢人效果
  19. 数据太大,记事本打不开怎么办?
  20. c/c++ 有n个人围成一圈, 顺序排号。从第1个人开始报数(从1~3报数), 凡报到3的人退出圈子, 问最后留下的人原来排在第几号。

热门文章

  1. 天猫精灵测评与开发案例
  2. 如何使用 SQL 对数据进行分析?
  3. Life:欧洲各国双飞11天(包含德、法、意、瑞,菲斯特雪山、卢浮宫 凡尔塞宫、贡多拉游船 金色山口列车)行程安排之详细攻略(转载自网络)
  4. Servlet实现登录带有验证码验证案例
  5. lisp医院化验系统_医院管理系统(his)电子病历 体检系统 l is pacs
  6. 读npy、pck、nii格式数据集
  7. 电磁屏蔽技术的三种主要方法
  8. UBUNTU 编译安装GEOS
  9. 高淇300集Java——零基础开发桌球小游戏项目
  10. java对excel插入水印_Java通过POI和JXL给Excel动态添加水印