聚类算法---k-means算法

学习目标:

聚类算法

学习内容:

k-means算法

学习记录:

聚类算法主要有:
(1)划分聚类。大部分是基于距离的聚类算法。有k-means,k-medoids,CLARANS.
(2)层次聚类。是进行层次化的分解,到某种条件满足为止。有BIRCH,CURE,CHAMELEON.
(3)密度聚类。基于密度的算法。有DBSCAN,OPTICS,DENCLUE.

距离计算有闵可夫斯基距离,欧几里得距离,曼哈顿距离,切比雪夫距离。皮尔逊相关系数,余弦相似度,杰卡德相似系数。
这一部分内容下一篇文章再记录。

K-means聚类

K-means聚类要求样本点与中心点的欧几里得距离最小。

算法思想:
1.先导入数据。要求数据为数值型矩阵
2.创建初始质心:指定聚类数k,从原始数据集中随机选择k个对象作为初始质心。
3.计算数据集中每一个点到所有质心的距离,将数据点分配到距离最近的质心。,从而形成簇分配矩阵。
4.重新计算质心:将簇中所有点的均值作为新的质心。
5.重复3,4直至质心不再变化。

上面是算法实现的思想,写一下我认为的:开始的原始数据是杂乱无章的,但是我们要实现对其聚类,以什么为标准呢?以他们之间的到一个中心的欧几里得距离最小。这个中心是不断迭代来实现对其聚类的。假设四类东西,开始首先要输入要输入我们要分为4类,(即k=4),在这群数据中随机生成四个中心,然后我们计算每一个数据点到这个四个中心的距离,如果数据距离这个1号中心最近,那么说明他最可能是第一类。将它暂且归到第一类中,生成簇分配矩阵。因为一次聚类的肯定不准确,要重新绘制中心,经过第一次聚类已经形成了四个簇,计算簇的均值作为新的中心,在计算每个数据点到中心的距离重复下去,到中心稳定下来。

代码:

import numpy as np
import matplotlib.pyplot as plt


def loadFile(path):
    dataList = []
    # 打开文件:以二进制读模式、utf-8格式的编码方式打开
    fr = open(path, 'r', encoding='UTF-8')
    record = fr.read()
    fr.close
    # 按照行转换为一维表即包含各行作为元素的列表,分隔符有'\\r', '\\r\\n', \\n'\n",
    recordList = record.splitlines()
    # 逐行遍历:行内字段按'\\t'分隔符分隔,转换为列表
    for line in recordList:
        if line.strip():
            dataList.append(list(map(float, line.split('\t'))))
    # 返回转换后的矩阵
    recordmat = np.mat(dataList)
    return recordmat


def distEclud(vecA, vecB):
    return np.linalg.norm(vecA - vecB, ord=2)


def randCents(dataSet, k):
    n = np.shape(dataSet)[1]
    cents = np.mat(np.zeros((k, n)))
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值