kmeans聚类,8个点分为三类

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
  • 已知有如下8个点:

X 1 : ( 2 , 10 ) , X 2 : ( 2 , 5 ) , X 3 : ( 8 , 4 ) , X 4 : ( 5 , 8 ) , X 5 : ( 7 , 5 ) X 6 : ( 6 , 4 ) , X 7 : ( 1 , 2 ) X 8 : ( 4 , 9 ) X_1:(2,10),X_2:(2,5),X_3:(8,4),X_4:(5,8),X_5:(7,5)X_6:(6,4),X_7:(1,2)X_8:(4,9) X1:(2,10),X2:(2,5),X3:(8,4),X4:(5,8),X5:(7,5)X6:(6,4),X7:(1,2)X8:(4,9)

初始点为 X 1 , X 4 , X 7 X_1,X_4,X_7 X1,X4,X7,试用k-means聚类算法将其聚为三类

解:

首先给出距离公式

距离公式
假设A点坐标为 ( X 1 , Y 1 ) (X_1,Y_1) (X1,Y1),B点坐标为 X 2 , Y 2 X_2,Y_2 X2,Y2
Distance= ( X 1 − X 2 ) 2 + ( Y 1 − Y 2 ) 2 \sqrt{(X_1-X_2)^2+(Y_1-Y_2)^2} (X1X2)2+(Y1Y2)2 注此为欧几里得距离Euclidean Distance
参考机器学习中的数学——距离定义一欧几里得距离Euclidean Distance

  1. 首先分别计算各点到 X 1 , X 4 , X 7 X_1,X_4,X_7 X1,X4,X7的距离如下如下 (比如 X 1 X_1 X1 X 1 X_1 X1的距离为0 X 1 X_1 X1 X 2 X_2 X2的距离为 ( 2 − 2 ) 2 + ( 10 − 5 ) 2 = 5 \sqrt{(2-2)^2+(10-5)^2}=5 (22)2+(105)2 =5)
X 1 ( 2 , 10 ) X_1(2,10) X1(2,10) X 4 ( 5 , 8 ) X_4(5,8) X4(5,8) X 7 ( 1 , 2 ) X_7(1,2) X7(1,2)
X 1 ( 2 , 10 ) X_1(2,10) X1(2,10)03.68.1
X 2 ( 2 , 5 ) X_2(2,5) X2(2,5)5.04.23.2
X 3 ( 8 , 4 ) X_3(8,4) X3(8,4)8.55.07.3
X 4 ( 5 , 8 ) X_4(5,8) X4(5,8)3.607.2
X 5 ( 7 , 5 ) X_5(7,5) X5(7,5)7.13.66.7
X 6 ( 6 , 4 ) X_6(6,4) X6(6,4)7.24.15.4
X 7 ( 1 , 2 ) X_7(1,2) X7(1,2)8.17.20
X 8 ( 4 , 9 ) X_8(4,9) X8(4,9)2.21.47.6

注:以 X 8 X_8 X8为例其与 X 4 X_4 X4最近故将他们两个归为一类这里的距离都保留的一位小数

中心点坐标=x坐标的均值y坐标的均值

X 1 X_1 X1为一类中心点也就是它的坐标(2,10)

X 4 , X 3 , X 5 , X 6 , X 8 X_4,X_3,X_5,X_6,X_8 X4,X3,X5,X6,X8为一类
中心点坐标( 8 + 5 + 7 + 6 + 4 5 , 4 + 8 + 5 + 4 + 9 5 \displaystyle\frac{8+5+7+6+4}{5},\displaystyle\frac{4+8+5+4+9}{5} 58+5+7+6+4,54+8+5+4+9)等于(6,6)

X 7 , X 2 X_7,X_2 X7,X2为一类同理中心点为(1.5,3.5)

  1. 第二步计算这个8个点到这三个中心点的距离
2106,61.5,3.5
X 1 X_1 X105.76.5
X 2 X_2 X25.04.11.6
X 3 X_3 X38.52.86.5
X 4 X_4 X43.62.25.7
X 5 X_5 X57.11.45.7
X 6 X_6 X67.22.04.5
X 7 X_7 X78.16.41.6
X 8 X_8 X82.23.66.0

同样的X1,X8到(2,10)最近归为一类中心点为(3,9.5)

X3,X4,X5,X6到(6,6)最近归为一类中心点为(6.25.4.5)

X7,X2到(1.5,3.5)最近归为一类中心点为(1.5.3.5)

3.第三步 重复上次动作计算这个8个点到这三个中心点的距离

( 3 , 9.5 ) (3,9.5) (3,9.5) ( 6.25.4.5 ) (6.25.4.5) (6.25.4.5) ( 1.5.3.5 ) (1.5.3.5) (1.5.3.5)
X 1 X_1 X11.17.06.5
X 2 X_2 X24.64.31.6
X 3 X_3 X37.41.86.5
X 4 X_4 X42.53.75.7
X 5 X_5 X56.00.905.7
X 6 X_6 X66.30.564.5
X 7 X_7 X77.85.81.6
X 8 X_8 X81.15.06.0

X 1 , X 4 , X 8 X_1,X_4,X_8 X1,X4,X8归为一类 中心点为 ( 3.66 , 9 ) (3.66,9) (3.66,9)

X 3 , X 5 , X 6 X_3,X_5,X_6 X3,X5,X6归为一类 中心点为 ( 7 , 4 ) (7,4) (7,4)

X 2 , X 7 X_2,X_7 X2,X7归为一类 中心点为 ( 1.5.3.5 ) (1.5.3.5) (1.5.3.5)

3.第四步 重复上次动作计算这个8个点到这三个中心点的距离

( 3.66 , 9 ) (3.66,9) (3.66,9) ( 7 , 4 ) (7,4) (7,4) ( 1.5.3.5 ) (1.5.3.5) (1.5.3.5)
X 1 X_1 X11.98.16.5
X 2 X_2 X24.35.51.6
X 3 X_3 X36.60.606.5
X 4 X_4 X41.74.75.7
X 5 X_5 X55.21.15.7
X 6 X_6 X65.51.44.5
X 7 X_7 X77.56.71.6
X 8 X_8 X80.346.06.0

X 1 , X 4 , X 8 X_1,X_4,X_8 X1,X4,X8归为一类 , X 3 , X 5 , X 6 X_3,X_5,X_6 X3,X5,X6归为一类 , X 2 , X 7 X_2,X_7 X2,X7归为一类

此时分类结果遇上一步分类一样分类结束,上面就是最后的分类结果

说第“几”步其实不太对这就是一个不停更新中心点的过程。。。。

最后附上代码
定义一个distance的函数,这里就是计算每个点到坐标 ( x , y ) (x,y) (x,y)的距离

from sympy import *
def distance(x,y):
    data=[[2,10],[2,5],[8,4],[5,8],[7,5],[6,4],[1,2],[4,9]]
    for i in range(len(data)):
       row=np.array([(N(sqrt( (data[i][0]-x)**2+(data[i][1]-y)**2),2)) for i in range(len(data))])
       return row
# pd.DataFrame(distance(2,10),distance(2,10),distance(1,2))
list=[distance(3.66,9),distance(7.4,4),distance(1.5,3.5)]
Y=pd.DataFrame(list).T
Y.columns=["$X_1$", "$X_2$", "$X_3$"]
Y.index = ["$X_1$", "$X_2$", "$X_3$", "$X_4$",
            "$X_5$","$X_6$", "$X_7$","$X_8$"]

写的时候发现一篇文章k-means算法例题应用也是类似的题目

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6