Python使用系统聚类算法对随机元素进行分类
来源:互联网 发布:2016淘宝c店越来越难做 编辑:程序博客网 时间:2024/06/05 00:47
系统聚类算法又称层次聚类或系谱聚类,首先把样本看作各自一类,定义类间距离,选择距离最小的一对元素合并成一个新的类,重复计算各类之间的距离并重复上面的步骤,直到将所有原始元素分成指定数量的类。该算法的计算复杂度比较高,不适合大数据聚类问题。
from randomimport randrange
def generate(s, m1, m2):
'''生成形式如[('a', (1,5)), ('b', (3,6))]的随机坐标'''
x = [(ch, (randrange(m1), randrange(m1))) for ch in s]
return x
def xitongJulei(points, k=5):
'''根据欧几里得距离对points进行聚类,最终划分为k类'''
points = points[:]
while len(points)>k:
nearest = float('inf')
# 查找距离最近的两个点,进行合并
# 合并后的两个点,使用中点代替其坐标
for index1, point1 in enumerate(points[:-1]):
position1 = point1[1]
# 注意:这里的start参数很重要
for index2, point2 in enumerate(points[index1+1:], start=index1+1):
position2 = point2[1]
distance = (position1[0]-position2[0])**2 + (position1[1]-position2[1])**2
if distance < nearest:
result = (index1, index2)
nearest = distance
# 弹出距离最近的两个点,合并为一个点
p2 = points.pop(result[1])
p1 = points.pop(result[0])
p = (p1[0]+p2[0], ((p1[1][0]+p2[1][0])/2, (p1[1][1]+p2[1][1])/2))
# 使用合并后的点代替原来的两个点
points.append(p)
# 查看每步处理后的数据
print(points)
return points
# 生成随机测试数据
points = generate('abcde', 5, 5)
print('origin:'.center(20,'=')+'\n', points)
print('steps:'.center(20,'='))
# 聚类
result = xitongJulei(points, k=2)
print('result'.center(20,'='))
print(result)
附上代码截图方便理解代码的对齐关系:
某次运行结果:
======origin:=======
[('a', (1, 3)), ('b', (1, 0)), ('c', (1, 3)), ('d', (0, 0)), ('e', (4, 4))]
=======steps:=======
[('b', (1, 0)), ('d', (0, 0)), ('e', (4, 4)), ('ac', (1.0, 3.0))]
[('e', (4, 4)), ('ac', (1.0, 3.0)), ('bd', (0.5, 0.0))]
[('e', (4, 4)), ('acbd', (0.75, 1.5))]
=======result=======
[('e', (4, 4)), ('acbd', (0.75, 1.5))]
- Python使用系统聚类算法对随机元素进行分类
- Python :k-means聚类算法对数据进行分类
- 使用spark mllib 随机森林算法对文本进行多分类
- 使用scikit-learn的随机森林对西瓜进行分类
- Python使用系统聚类方法进行数据分类案例一则
- Python使用K-means聚类算法进行分类案例一则
- 使用python对高光谱数据进行处理和分类
- 使用冒泡排序算法对数组元素进行排序
- Python使用collections的Counter类对字符串、列表、字典的数据元素进行计数
- Python对文件进行批量随机重命名
- Python对文件进行批量随机重命名
- 使用python进行文本分类
- 使用Python进行文本分类
- Python实现决策树对西瓜进行分类
- 使用随机梯度算法对高斯核模型进行最小二乘法的MATLAB程序
- 使用SVM对多类多维数据进行分类
- 利用class、id对元素进行分类、标识。
- 使用Outlook对邮件进行分类
- Lesha and array splitting CodeForces
- Git常用命令
- 13、调整数组顺序使奇数位于偶数前面
- anaconda所有版本
- 哈希表算法实现
- Python使用系统聚类算法对随机元素进行分类
- Vue的过渡效果
- 四、StackPanel控件
- c++学习(三)
- Android中UI线程与子线程的通信
- SVN使用手册
- LCS(最长连续子序列+最长连续字串)
- Makefile相关规则
- ubuntu17.04 Redis安装与使用