Python实现基本KMeans算法

本文介绍了Python实现的基本KMeans算法,包括算法伪代码和鸢尾花数据集的示例代码。还探讨了两种改进算法:K-means++用于优化初始质心选择,二分KMeans用于避免局部最优。最后,提到了KMeans算法的深入研究,如其与EM算法的关系及避免局部最优的其他方法。
摘要由CSDN通过智能技术生成

前言

聚类分析将数据划分成有意义或有用的簇。如果目标是划分成有意义的簇,则簇应当捕获数据的自然结构。
聚类是一种无监督学习方法,因为只是根据样本的相似度或距离将其进行归类,而类或簇事先并不知道。
常用的聚类算法包括:层次聚类、K均值聚类、DBSCAN。在这篇文章中我们简单介绍一下基本KMeans算法的实现。
因为基本KMeans算法的原理比较简单,这里就不详细解释了,感兴趣的朋友可以查阅李航老师的《统计学习方法(第2版)》。

基本KMeans

基本KMeans算法可以用下面的伪代码表示:

选择K个点作为初始质心。
repeat
	将每个点指派到最近的质心,形成K个簇。
	重新计算每个簇的质心。
util 质心不发生变化。 

下面我们给出Python的代码实现,代码中使用的数据集为鸢尾花数据集,距离采用欧氏距离,算法评价标准为误差平方和(Sum of squared error)。
首先,鸢尾花数据集的格式如下:

5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa

然后,具体的基本KMeans代码实现如下:

import numpy as np
import pandas as pd


def load_dataset(path):
    """
    加载聚类训练集,此处以鸢尾花数据集为例
    Args:
        path: 训练集路径,默认格式为csv
    """
    csv_data = pd.read_csv(path, header=None)
    dataset = csv_data.loc[:, 0:3]
    labels = csv_data.loc[:, 4]
    return dataset, labels


def euclidean_distances(vec_x, vec_y):
    """
    计算两个向量的欧氏距离
    Args:
        vec_x: 样本向量x
        vec_y: 样本向量y
    """
    return np.sqrt(np.sum(np.power(np.asarray(vec_x) - np.asarray(vec_y), 2)))


  • 0
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值