无监督学习 k-means算法

本文详细介绍了无监督学习中的聚类算法,重点讲解了K均值聚类及其改进版二分K-均值聚类。通过实例演示了算法的实现过程,并对比了两种算法的效果。

一、无监督学习

无监督学习是机器学习算法中的一种。监督学习的目的主要是对数据进行分类和回归预测,它主要是通过已知推测未知,大部分监督学习算法有一个训练模型的过程;相对于监督学习,无监督学习则是主要着重于数据的分布特点,与有监督学习不同,无监督学习并没有训练的过程。

二、 聚类

针对给定的样本数据,聚类算法会根据它们的特征相似度或距离,把相似的数据划分为若干个簇中。相似的样本划分到相同的簇中, 不相似的样本划分到不同的簇。聚类处理数据的过程也是从未知到已知的过程,因为聚类算法在事先并不知道聚类得到的簇的特点和样本的分布。

k-means属于无监督学习中聚类算法的一种。

三、 k均值聚类算法

3.1 k-means

k均值聚类算法将样本集划分为k个簇,把每个样本数据划分到距离最近的簇中,且每个样本仅属于一个类,此为k均值聚类算法。k-mean算法属于硬聚类,即每个样本只能属于一个簇。

聚合聚类需要预先考虑以下几个要素:

  1. 距离或相似度;
  2. 合并规则;
  3. 停止条件。

3.2 步骤

  1. 随机选择k个簇作为质心(需要保证这k个簇的特征值在样本集特征值的范围之内);
  2. 把n个样本点划分到距离最近的簇中;
  3. 计算每个簇的平均值。
  4. 判断是否收敛,如果没有收敛,则从步骤2开始。

 

图1 k-means流程图

 

图2 k均值聚类算法 迭代过程

通过图2可以了解到,由于第三张图和第四张图未发生变化,则表示此时的簇已经收敛。

3.3 实现

from numpy import *
from matplotlib import pyplot as plt
import matplotlib


def load_data_set(filename):
    data_matrix = []
    with open(filename) as fp:
        for line in fp.readlines():
            # 多个浮点型的列
            data = line.strip().split('\t')
            float_data = [float(datum) for datum in data]
            data_matrix.append(float_data)
    return data_matrix

 load_data_set函数用于将文本文件导入成一个列表中。

def euclidean_distance(vec_a, vec_b):
    """计算两个向量的欧式距离"""
    return sqrt(sum(power(vec_a - vec_b, 2)))

 距离的计算有很多种选择,比如闵可夫斯基距离、马氏距离等,不同的距离选择会使得计算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值