资源简介
K-Means算法是典型的基于距离的聚类算法,其中k代表类簇个数,means代表类簇内数据对象的均值(这种均值是一种对类簇中心的描述),因此,K-Means算法又称为k-均值算法。K-Means算法是一种基于划分的聚类算法,以距离作为数据对象间相似性度量的标准,即数据对象间的距离越小,则它们的相似性越高,则它们越有可能在同一个类簇。数据对象间距离的计算有很多种,k-means算法通常采用欧氏距离来计算数据对象间的距离。该算法认为簇是由距离靠近的对象组成的,因此把得到紧凑且独立的簇作为最终目标。
代码片段和文件信息
import numpy as np
import matplotlib.pyplot as plt
# 先在四个中心点附近产生一堆数据
real_center = [(1 1) (1 2) (2 2) (2 1)]
point_number = 50
points_x = []
points_y = []
for center in real_center:
offset_x offset_y = np.random.randn(point_number) * 0.3 np.random.randn(point_number) * 0.25
x_val y_val = center[0] + offset_x center[1] + offset_y
points_x.append(x_val)
points_y.append(y_val)
points_x = np.concatenate(points_x) # 将二维数组拼接成一个list
points_y = np.concatenate(points_y)
# 绘制点图
plt.scatter(points_x points_y color=‘green‘ marker=‘+‘)
# 绘制中心点
center_x center_y = zip(*real_center)
plt.scatter(center_x center_y color=‘red‘ marker=‘^‘)
plt.xlim(0 3)
plt.ylim(0 3)
plt.show()
#=================================================================================
# 第一步,随机选择 K 个点
K = 4
p_list = np.stack([points_x points_y] axis=1) #用np.stack将points_x和points_y拼接,变成(xy)的坐标形式 p_list.shape(2002)
index = np.random.choice(len(p_list) size=K) #在p_list中随机选择K个点的序列号
centeroid = p_list[index] #取出指定序列号的点的坐标
# 以下是画图部分
for p in centeroid:
plt.scatter(p[0] p[1] marker=‘^‘)
plt.xlim(0 3)
plt.ylim(0 3)
plt.show()
#===============================================================================
# 第二步,遍历所有点 P,将 P 放入最近的聚类中心的集合中
points_set = {key: [] for key in range(K)}
# print(“前“points_set)
for p in p_list:
# print(“center:“centeroid)
# print(“循环出来的p:“p)
#判断这个点离哪一个中心点近,近则记录下index。然后在对应index的集合中加入该点
nearest_index = np.argmin(np.sum((centeroid - p) ** 2 axis=1) ** 0.5) #np.argmin返回(距离)最小值的下标,参数axis=1:按行方向求和
points_set[nearest_index].append(p)
# point_set = {0:[([x1y1])([x2y2])......]1:[]......}
# 以下是画图部分
for k_index p_set in points_set.items():
p_xs = [p[0] for p in p_set]
p_ys = [p[1] for p in p_set]
plt.scatter(p_xs p_ys color=‘C{}‘.format(k_index))
for ix p in enumerate(centeroid):
plt.scatter(p[0] p[1] color=‘C{}‘.format(ix) marker=‘^‘ edgecolor=‘black‘ s=128)
plt.xlim(0 3)
plt.ylim(0 3)
plt.show()
#===============================================================================
# 第三步,遍历每一个点集,计算新的聚类中心
for k_index p_set in points_set.items():
# print(k_indexp_set)
p_xs = [p[0] for p in p_set]
p_ys = [p[1] for p in p_set]
# print(p_xs)
# print(p_ys)
centeroid[k_index 0] = sum(p_xs) / len(p_set)
centeroid[k_index 1] = sum(p_ys) / len(p_set)
# 0 [array([1.6062368 0.7195094])
# array([1.5209016 0.79879955])
# array([1.58217716 0.6752188 ])
# array([1.47984399 0.77579545])
# array([1.56584005 0.72633556])
# array([1.36814733 0.85458767])
# array([1.47112209 1.26962527])
# array([1.39860841 0.88106941])
# array([1.42538269 1.00176483])
# array([1.8285598 0.63840008])
# array([1.59278399 0.87566845])
# array([1.75997827 1.58673337])
# array([2.40024409 1.43842766])
# array([1.63783343 1.04777846])
# array([2.27202361
相关资源
- python实现SGBM图像匹配算法
- python实现灰度直方图均衡化
- scrapy_qunar_one
- Python学习全系列教程永久可用
- python简明教程.chm
- 抽奖大转盘python的图形化界面
- 双边滤波器实验报告及代码python
- python +MYSQL+HTML实现21蛋糕网上商城
- Python-直播答题助手自动检测出题搜索
- OpenCV入门教程+OpenCV官方教程中文版
- Python 串口工具源码+.exe文件
- Python开发的全栈股票系统.zip
- Python操作Excel表格并将其中部分数据写
- python书籍 PDF
- 利用python绘制散点图
- python+labview+No1.vi
- 老男孩python项目实战
- python源码制作whl文件.rar
- python3.5可用的scipy
- PYTHON3 经典50案例.pptx
- 计算机科学导论-python.pdf
- python模拟鼠标点击屏幕
- windows鼠标自动点击py脚本
- 鱼c小甲鱼零基础学python全套课后题和
- Python 练习题100道
- Practical Programming 2nd Edition
- wxPython Application Development Cookbook
- python 3.6
- Python 3.5.2 中文文档 互联网唯一CHM版本
- python3.5.2.chm官方文档
评论
共有 条评论