编程实现之k均值算法
聚类属于无监督学习。周志华老师在《机器学习》一书中详细讲解了各种聚类算法,如k均值、学习向量量化、高斯混合聚类等。在这篇博客中,我根据周志华老师描述的算法步骤,用Python实现了 k均值算法。具体代码如下:
import pandas as pd
import numpy as np
import random
import matplotlib.pyplot as plt#首先从数据集中读入数据
midu = []
hantanglv = []df = pd.read_excel('西瓜数据集4.0.xlsx')
for i in df.index.values:midu.append(df.ix[i].values[1])hantanglv.append(df.ix[i].values[2])
m = len(midu)def distance(x1, y1, x2, y2):return ((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2))**0.5def kMeans(x):m = 0h = 0for i in x:m = m + i[0]h = h + i[1]return m/len(x), h/len(x)#按照书上所讲,将聚类簇数定义为3
k = 3
#用flag表示均值向量有没有更新
flag = k#选择k个样本作为均值向量
u = random.sample(range(0, m), k)
U = []
for i in u:U.append((midu[i], hantanglv[i]))#开始迭代
while flag==k:C = []flag=0for i in range(k):C.append([])for i in range(m):#使用欧式距离everyDistance = [distance(midu[i], hantanglv[i], j[0], j[1]) for j in U]C[everyDistance.index(min(everyDistance))].append((midu[i], hantanglv[i])) for i in range(k):mk, hk = kMeans(C[i])if U[i][0] != mk or U[i][1] != hk:U[i] = (mk, hk)flag = flag + 1#将聚类结果可视化出来
co = ['r', 'g', 'b', 'm']
for i in range(k):mm = [a[0] for a in C[i]]hh = [a[1] for a in C[i]] plt.scatter(mm, hh, color=co[i%len(co)])plt.scatter(U[i][0], U[i][1], marker='x')
plt.show()
采用的数据集是西瓜数据集4.0:
最终聚类结果如下图所示:
因为初始均值向量是随机生成的,所以每次的聚类结果都不太一样。
编程实现之k均值算法相关推荐
- 一句话总结K均值算法
一句话总结K均值算法 核心:把样本分配到离它最近的类中心所属的类,类中心由属于这个类的所有样本确定. k均值算法是一种无监督的聚类算法.算法将每个样本分配到离它最近的那个类中心所代表的类,而类中心的确 ...
- spark Bisecting k-means(二分K均值算法)
Bisecting k-means(二分K均值算法) 二分k均值(bisecting k-means)是一种层次聚类方法,算法的主要思想是:首先将所有点作为一个簇,然后将该簇一分为二.之后选择能最大程 ...
- k均值算法原理详细讲解以及matlab代码实现
有研究生物电信号处理和机器学习的欢迎加我qq429500506共同交流学习进步. 最近更新文章的频率太低了,主要原因是不想为了发文章而发文章,想潜心研究,写好文章,顺便想说一句开源万岁,最近一个月虽然 ...
- k-modes算法mysql_第十一章 K-Means(K均值)算法模型实现(中)
python2 代码实现: from numpy import * import numpy def loadDataSet(fileName): #general function to parse ...
- k均值算法 二分k均值算法_如何获得K均值算法面试问题
k均值算法 二分k均值算法 数据科学访谈 (Data Science Interviews) KMeans is one of the most common and important cluste ...
- k均值算法 二分k均值算法_使用K均值对加勒比珊瑚礁进行分类
k均值算法 二分k均值算法 Have you ever seen a Caribbean reef? Well if you haven't, prepare yourself. 您见过加勒比礁吗? ...
- python实现k均值算法_python实现kMeans算法
聚类是一种无监督的学习,将相似的对象放到同一簇中,有点像是全自动分类,簇内的对象越相似,簇间的对象差别越大,则聚类效果越好. 1.k均值聚类算法 k均值聚类将数据分为k个簇,每个簇通过其质心,即簇中所 ...
- k均值算法的优化目标和随机初始化
这里我们来学习k均值算法的优化目标(代价函数): 优化目标的值等于每一个训练集数据到该所属的聚类中心距离的平方的平均值 其实在我们进行之前所循环进行的聚类分簇和移动聚类中心的操作,都是在不断的最小化J ...
- LBG算法、Lloyd算法和K均值算法
---------------------------------LBG算法.Lloyd算法和K-Means算法--------------------------------- LBG算法是一种矢量 ...
- K均值算法(继续优化中)
K均值算法代码 #include<iostream> #include<math.h> using namespace std; //distance函数通过欧几里得计算两点间 ...
最新文章
- CF 19D Points 【线段树+平衡树】
- python 冷门_Python最冷门的模块
- CTFshow 信息收集 web8
- Ext grid 根据行号获取行数据
- php连接mysql开发环境_PHP开发环境搭建及常用的数据库操作
- L1-066 猫是液体 (5 分)-PAT 团体程序设计天梯赛 GPLT
- 三菱5uplc伺服电机指令_PLC中伺服控制指令的应用
- 1KB文件夹快捷方式病毒解决方法
- 读数学建模国赛优秀论文的笔记
- 九阴真经 服务器列表文件,九阴真经合服_九阴真经数据互通_九阴真经公告_快吧游戏...
- python数据可视化学习之随机漫步
- 人体红外传感器(HC_SR051)实现 人体感应灯
- 2023最新WSL搭建深度学习平台教程(适用于Docker-gpu、tensorflow-gpu、pytorch-gpu)
- 初级测试工程师面试指南
- listview显示数据倒叙
- 智象科技一体化运维平台的价值
- bzoj3786星系探索(splay维护dfs序)
- 国内十款手机ROOT软件运用评测
- Python的函数大全
- Kinect for Windows SDK开发入门(十):手势识别 上:基本概念