【机器学习】k-means聚类原理及python实现

本文介绍了K-means聚类算法的原理,包括其工作流程、优缺点和适用数据类型。通过实例展示了如何对地图上的点进行聚类,并探讨了二分K-means算法作为改进方法。此外,还提供了SSE(误差平方和)作为评估聚类效果的指标,并讨论了如何选择最佳K值。
摘要由CSDN通过智能技术生成

【机器学习】k-means聚类原理及python实现

1、k-means原理

2、改进的kmenas-------二分k-means

3、实例----对地图上的点进行聚类

              本节完整代码可戳:https://github.com/LisaPig/machineLearning/tree/master/k_means

        聚类是一种无监督的学习,它将相似的对象归到同一个簇中。它有点像全自动分类。聚类方法几乎可以应用于所有对象,簇内的对象越相似,聚类的效果越好。本章要学习一种称为K-均值( K-means)聚类的算法。之所以称之为K-均值是因为它可以发现k个不同的簇,且每个簇的中心采用簇中所含值的均值计算而成。下面会逐步介绍该算法的更多细节。
 

一、k-means原理

        K-均值是发现给定数据集的k个簇的算法。簇个数k是用户给定的,每一个簇通过其质心( 即簇中所有点的中心)来描述。


1. K-均值算法的工作流程?

        首先,随机确定k个初始点作为质心。然后将数据集中的每个点分配到一个簇中,具体来讲,为每个点找距其最近的质心,并将其分配给该质心所对应的簇。这一步完成之后,每个簇的质心更新为该簇所有点的平均值。
        上述过程的伪代码表示如下:
                       创建k个点作为起始质心(经常是随机选择)
                       当任意一个点的簇分配结果发生改变时
                                对数据集中的每个数据点
                                        对每个质心
                                                计算质心与数据点之间的距离
                                        将数据点分配到距其最近的簇
                                对每一个簇,计算簇中所有点的均值并将均值作为质心

代码实现:


 

2、K-均值聚类的优缺点
        优点:容易实现。
        缺点:可能收敛到局部最小值,在大规模数据集上收敛较慢。
        适用数据类型:数值型数据。

3、聚类和分类的区别?

         聚类与分类的最大不同在于,分类的目标事先已知,而聚类则不一样。因为其产生的结果与分类相同,而只是类别没有预先定义,聚类有时也被称为无监督分类( unsupervisedclassification)。
 

4.最基本的k-means函数实现聚类:

# -*- coding:utf-8 -*-
"""
@author:Lisa
@file:k_means.py
@time:2018/7/14 0014下午 8:27
"""
from numpy import *
import numpy as np
import matplotlib.pyplot as plt
import matplotlib


"""
函数:读取数据集文件
输出:读取到的数据集(列表形式)
"""
def loadDataSet(filename):
    dataMat=[]
    fr=open(filename)
    for line in fr.readlines():
        curLine=line.strip().split('\t')
        floatLine=list(map(float,curLine) )   #将每一行的数据映射成float型
        dataMat.append(floatLine)
    return dataMat


"""
函数:计算欧式两个向量之间的距离
输入:两个向量vecA、vecB
"""

def distEclud(vecA,vecB):
    return np.sqrt(np.sum(np.power(vecA-vecB , 2)))

"""
函数:k个质心随机初始化
返回值:随机初始化的k个质心数据点
说明:此函数为k-means函数初始化k个质心
注意:质心的每一维度的取
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值