@[Algorithm]1.K-meams++算法实现

本文介绍了K-means++算法,它是K-means算法的一种改进,旨在通过更合理的初始聚类中心选择来提高聚类效果。算法流程包括随机选择第一个聚类中心,计算数据点与最近聚类中心的距离,根据距离概率选择新的聚类中心,重复该过程直至选择k个中心。此外,文章还提到了欧几里得距离和曼哈顿距离的概念,并给出了与矩阵操作相关的代码示例。
摘要由CSDN通过智能技术生成

一.理解什么是K-means算法

资料:
对于K-means++算法的理解,我觉得一篇博客写的很好:
https://www.cnblogs.com/wang2825/articles/8696830.html

1.1 算法过程:

(1)随机选取K个对象作为初始聚类中心;
(2)将数据样本集合中的样本按照最小距离原则分配到最邻近聚类;
(3)根据聚类的结果,重新计算K个聚类的中心,并作为新的聚类中心;
(4)重复步骤2.3直到聚类中心不再变化。

1.2 数学表达式:

在这里插入图片描述

n:样本数。
k:样本分为k类。
rnk:第n个样本点是否属于第k类,属于则rnk=1, 不属于则rnk=0。
μK:第k个中心点。

K-means 要做的就是最小化:
在这里插入图片描述
这个函数。
迭代的方法:
1、固定μK,得到rnk。
2、固定rnk,求出最优的μK。
在这里插入图片描述
求rnk在这里插入图片描述求μk在这里插入图片描述

二.基于K-means的K-means++算法

2.1 算法:

(1) 使用K-means算法时,我们可以在输入的数据集中随机的选择k个点作为初始的聚类中心,但是随机选择初始点可能会造成聚类的结果和数据的实际分布相差很大。k-means++算法选择初始聚类中心的基本思想是:初始的聚类中心之间的相互距离要尽可能的远。

(2) 从输入的数据点集合中随机选择一个点作为第一个聚类中心。

(3) 对于数据集中的每一个点x,计算它与最近聚类中心的距离D(x)。

(4) 选择一个新的数据点作为新的聚类中心,选择的原则是:D(x)较大的点,被选取作为聚类中心的概率较大。对于每个点,我们都计算其和最近的一个聚类中心的距离D(x)并保存在一个数组里,然后把这些距离加起来得到Sum(D(x))。再取一个随机值Random(0 < Random < Sum)然后用Random -= D(x),直到其<=0,此时的点就是下一个聚类中心。

(5)重复3和4直到k个聚类中心被选出来。

Note:

由于 K-means 算法的分类结果会受到初始点的选取而有所区别,因此有提出这种算法的改进: K-means++ 。
其实这个算法也只是对初始点的选择有改进而已,其他步骤都一样。初始质心选取的基本思路就是,初始的聚类中心之间的相互距离要尽可能的远。
因为老师给出的代码里面已经实现了K-means,考虑初始点不同可能带来的效果不一样,所以我在老师的基础上用了K-means++。在最后的代码中,我会放出老师的K-means实现代码,和我自己写的K-means++代码。

三. 欧几里得距离和曼哈顿距离

3.1 欧几里得距离:Euclidean distance

jianyi 在这里插入图片描述

曼哈顿距离: Manhattan distance

在这里插入图片描述
在这里插入图片描述

3.2构造欧几里得距离函数

如图,matrix1和matrix2分别代表了两个向量,易得这两个向量的距离就是5:
在这里插入图片描述

四.与matrix相关的代码

4.1 创建零矩阵

示例:创建一个3*3的矩阵在这里插入图片描述

4.2矩阵的行数和列数

在这里插入图片描述

五.K-means++代码

import pandas as pd
from numpy import *
import math
import random

def readfile(filepath):
    file=np.loadtxt(filepath,encoding='utf-8-sig')
    return file
def distEclud(vecA, vecB):   #计算欧几里得距离
    return np.sqrt(np.sum(np.square(vecA - vecB)))
def proCenter(length,DataSet,distArray,center):              #disarray 存放聚类中心的坐标,center 第一个聚类中心的坐标
    proArray=np.zeros([(DataSet.shape[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值