import numpy as np
import sklearn.datasets #加载原数据
import matplotlib.pyplot as plt
import random #点到各点距离
def PointToData(point,dataset):
a = np.multiply(dataset - point,dataset - point)
# print('a',a)
distence = np.sqrt(a[:,0]+a[:,1])
return distence #选择初始的k个中心簇
def startpoint(k,dataset):
m, n = np.shape(dataset)
index1 = random.randint(0,len(dataset) - 1)
A = [] # 初始的k个中心簇
A_dit = [] # 初始所有点到中心簇的距离
A.append(dataset[index1])
sum_dis = np.zeros((m, 1))
flag_mat = np.ones((m,1))
flag_mat[index1] = 0
for i in range(0, k - 1):
A_dit.append((PointToData(A[i], dataset)).reshape(-1,1) )
# print('A_dit[{}]:{}'.format(i,A_dit[i]))
sum_dis =(sum_dis + A_dit[i]) * flag_mat
# print('sum_dis[{}]:{}'.format(i,sum_dis))
Index = np.argmax(sum_dis)
flag_mat[Index] = 0
# print('选的Index:',Index)
A.append(dataset[Index])
return A #加载数据
Data = sklearn.datasets.load_iris()
dataset = Data.data[:,0:2] # #小数据测试编码
# test = dataset[0:15,:]
# testm,testn = np.shape(test)
# print(test) #测试k
# k = 4
#初始点测试函数
# Apoint = startpoint(k,test)
# print('Apoint',Apoint)
#距离函数测试
# d = PointToData(test[0,:],test)
# print('d,d+d:',d,d+d) def classfy(dataset,Apoint):
m,n = np.shape(dataset)
dis_li = []
num = 0
for point in Apoint:
distence = PointToData(point,dataset)
dis_li.append(distence)
if num == 0:
dis_li_mat = dis_li[num]
else:
dis_li_mat = np.column_stack((dis_li_mat,dis_li[num]))
num += 1
result = np.argmin(dis_li_mat,axis=1)
# print('dis_li:',dis_li)
# print('dis_li_mat:\n', dis_li_mat)
# print('classfy:',result)
return result
# label2 = classfy(test,Apoint)
# print('label2:',label2) #求分类的新中心
def Center(dataset,label,k):
i = 0
newpoint = []
for index in range(k):
flag = (label==index)
# print('flag,i:',flag,i)
num = sum(flag)
# print('num:',num,index)
a = flag.reshape(-1,1) * dataset
newpoint.append(np.sum(a,axis = 0)/num)
i += 1
# print(newpoint)
return newpoint
# testcenter = center(test,label2,k)
# print('testcenter:',testcenter) #K-means主体函数
def myK(k,dataset):
Startpoint = startpoint(k,dataset)
m,n = np.shape(Startpoint)
centerpoint = Startpoint
labelset = classfy(dataset,Startpoint)
newcenter = Center(dataset,labelset,k)
# print('外:cecnterpoint', centerpoint)
# print('外:newcenter', newcenter)
flag = 0
for i in range(k):
for j in range(n):
if centerpoint[i][j] != newcenter[i][j]:
flag = 1
while flag:
print('循环')
# print('里:cecnterpoint', centerpoint)
# print('里:newcenter', newcenter)
flag = 0
for i in range(k):
for j in range(n):
if centerpoint[i][j] != newcenter[i][j]:
flag = 1
# print('flag:',flag)
centerpoint = newcenter[:]
labelset = classfy(dataset,centerpoint)
newcenter = Center(dataset, labelset, k)
# print('final_resultlabel:',labelset)
# print('cenerpoint:', centerpoint)
return labelset,centerpoint #测试
k=5
final_label,centerpoint = myK(k,dataset)
print('centerpoint:',centerpoint)
mat_center = np.mat(centerpoint) #画图
# plt.scatter(test[:,0],test[:,1],40,10*(labelset+1))
plt.scatter(dataset[:, 0], dataset[:, 1],40,10*(final_label+1))
plt.show()

机器学习之--kmeans聚类简单算法实例的更多相关文章

  1. 机器学习六--K-means聚类算法

    机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...

  2. 机器学习中K-means聚类算法原理及C语言实现

    本人以前主要focus在传统音频的软件开发,接触到的算法主要是音频信号处理相关的,如各种编解码算法和回声消除算法等.最近切到语音识别上,接触到的算法就变成了各种机器学习算法,如GMM等.K-means ...

  3. 机器学习-K-means聚类及算法实现(基于R语言)

    K-means聚类 将n个观测点,按一定标准(数据点的相似度),划归到k个聚类(用户划分.产品类别划分等)中. 重要概念:质心 K-means聚类要求的变量是数值变量,方便计算距离. 算法实现 R语言 ...

  4. 菜鸟之路——机器学习之Kmeans聚类个人理解及Python实现

    一些概念 相关系数:衡量两组数据相关性 决定系数:(R2值)大概意思就是这个回归方程能解释百分之多少的真实值. Kmeans聚类大致就是选择K个中心点.不断遍历更新中心点的位置.离哪个中心点近就属于哪 ...

  5. 机器学习:K-Means聚类算法

    本文来自同步博客. 前面几篇文章介绍了回归或分类的几个算法,它们的共同点是训练数据包含了输出结果,要求算法能够通过训练数据掌握规律,用于预测新输入数据的输出值.因此,回归算法或分类算法被称之为监督学习 ...

  6. 【机器学习】K-means聚类算法与EM算法

    初始目的 将样本分成K个类,其实说白了就是求一个样本例的隐含类别y,然后利用隐含类别将x归类.由于我们事先不知道类别y,那么我们首先可以对每个样例假定一个y吧,但是怎么知道假定的对不对呢?怎样评价假定 ...

  7. 机器学习: K-means 聚类

    今天介绍机器学习里常见的一种无监督聚类算法,K-means.我们先来考虑在一个高维空间的一组数据集,S={x1,x2,...,xN}" role="presentation&quo ...

  8. 机器学习之KMeans聚类

    零.学习生成测试数据 from sklearn.datasets import make_blobs from matplotlib import pyplot # create test data ...

  9. 【Python学习笔记】使用python进行kmeans聚类

    使用python进行kmeans聚类 假设我们要解决一个这样的问题. 以下是一些同学,大萌是一个学霸,而我们想要找到这些人中的潜在学霸,所以我们要把这些人分为两类--学霸与非学霸. 高数 英语 Pyt ...

随机推荐

  1. Typora 使用说明

    目录 Typora是一款超简洁的markdown编辑器,具有如下特点: 完全免费,目前已支持中文 跨平台,支持windows,mac,linux 支持数学公式输入,图片插入 极其简洁,无多余功能 界面 ...

  2. 并发编程之wait()、notify()

    前面的并发编程之volatile中我们用程序模拟了一个场景:在main方法中开启两个线程,其中一个线程t1往list里循环添加元素,另一个线程t2监听list中的size,当size等于5时,t2线程 ...

  3. HBase基本概念与基本使用

    1. HBase简介 1.1 什么是HBase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE ...

  4. JGUI源码:实现蒙版层显示(18)

    有的时候需要显示一个蒙版层,蒙版层显示的主要原理是在指定元素比如div上创建一个子元素div,设置absolute.宽高100%.设置z-index置于顶层,设置半透明效果,fadein,fadeou ...

  5. webpack打包理解

    webpack打包理解(将所有依赖文件打包到一个文件中) 由于前端代码变得越来越多,越来越复杂, 纯粹脚本化的代码书写方式已经不能满足工程化得需求. 前端模块被抽象出来, 不仅仅包括js模块, 其它如 ...

  6. Contest2178 - 2019-4-18 高一noip基础知识点 测试7 题解版

    刚刚改完题,才有时间发题解 传送门 T1 exgcd裸题 对a,b跑exgcd,答案就是x*c/gcd(a,b),y*c/gcd(a,b) 不合法的情况:当且仅当c%gcd(a,b)!=0 代码 T2 ...

  7. SVN clean失败解决方法

    一.问题描述 1.svn 更新或者提交时,报错:svn cleanup failed–previous operation has not finished; run cleanup if it wa ...

  8. pythonのdjango 信号

    一.内置信号 Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Model signals pre_init # d ...

  9. Maven - <Profile>详解

    转载自:https://www.cnblogs.com/wxgblogs/p/6696229.html Profile能让你为一个特殊的环境自定义一个特殊的构建:profile使得不同环境间构建的可移 ...

  10. 学习笔记——单片机简介 & 点亮LED & 流水灯 & 电路基础【更新Ing】

    视频地址:https://www.bilibili.com/video/av10765766 超详细!!!!!! 单片机内部三大资源 [资源:单片机可提供使用的东西] FLASH 可以重复擦写 断电后 ...