没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
关于k-means聚类的原理可以参考这篇博客: https://blog.csdn.net/sinat_36710456/article/details/88019323 本篇只讨论基本的代码实现,由于只是对一维数组的聚类,距离公式上比较简单:distance = |a – b| 适合初学者理解最基本的原理 所谓一维数组 比如: [12, 3, 56, 89, 78, 2, 12, 45, 255, 236] 以下代码实现的是对一组数字的聚类 类别的个数可以设置,改变参数n的值即可 代码如下(建议从最下边的主函数开始看起): import numpy as np impor
资源推荐
资源详情
资源评论
k-means对一维数组进行聚类的代码,适合初学者对一维数组进行聚类的代码,适合初学者
关于k-means聚类的原理可以参考这篇博客:
https://blog.csdn.net/sinat_36710456/article/details/88019323
本篇只讨论基本的代码实现,由于只是对一维数组的聚类,距离公式上比较简单:distance = |a – b| 适合初学者理解最基本的
原理
所谓一维数组
比如: [12, 3, 56, 89, 78, 2, 12, 45, 255, 236]
以下代码实现的是对一组数字的聚类
类别的个数可以设置,改变参数n的值即可
代码如下(建议从最下边的主函数开始看起):
import numpy as np
import matplotlib.pyplot as plt
from time import *
def dis(a, b):
return abs(a-b)
def take_first(list_):
return list_[0]
def plot_(centroids, groups_list):
for i in range(len(centroids)):
centroids[i] = int(centroids[i])
z = list(zip(centroids, groups_list))
z.sort(key=take_first)
for i in range(len(centroids)):
centroids[i] = z[i][0] groups_list[i] = z[i][1] plt.bar(np.arange(len(centroids)), groups_list, align='center', color='c',
tick_label=centroids)
plt.title('Distribution ', fontsize=20)
plt.xlabel('Area_Categories ', fontsize=18)
plt.ylabel('Numbers', fontsize=18)
plt.tick_params(axis='both', labelsize=14)
plt.tight_layout()
for a, b in zip(np.arange(len(centroids)), groups_list):
plt.text(a, b, b, ha='center', va='baseline', fontsize=14, fontstyle='italic')
plt.show()
def do_kmeans(n, area_list, centroids):
loss = 0
groups = [] new_centroids = [] for i in range(n):
groups.append([])
new_centroids.append(0)
for area in area_list:
min_distance = 1000000
group_index = 0
for centroid_index, centroid in enumerate(centroids):
distance = dis(area, centroid)
if distance 1:
area_list.append(float(temp))
f.close()
centroid_indices = np.random.choice(len(area_list), n)
centroids = [] for centroid_index in centroid_indices:
centroids.append(area_list[centroid_index])
centroids, groups, old_loss = do_kmeans(n, area_list, centroids)
iterations = 1
i = 0
while True:
i = 1+i
centroids, groups, loss = do_kmeans(n, area_list, centroids)
iterations = iterations + 1
print("number:", i, "************loss = %f" % loss)
if abs(old_loss - loss) iterations_num:
break
old_loss = loss
资源评论
weixin_38656142
- 粉丝: 6
- 资源: 909
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功