机器学习-Python实现K-Means算法

  K-Means是常用的聚类算法,是一种无监督学习的算法。
步骤如下:
  (1)随机选择k个点作为初始的k个类的中心点;
  (2)迭代时对数据集中的每一个数据点,每一个中心,计算中心与数据点的距离,将数据点分配到距离最近的中心所在的类;
  (3)对每一个类,计算类中所有点的均值,并将均值作为新的中心。
  (4)通过迭代的方法,逐次更新各聚类中心的值,直到得到最好的聚类结果(如值保持不变)。
  实现代码如下:

// Python实现K-Means算法
#K-Means算法
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

#读取数据
data=pd.read_csv('data/kmeans.csv',header=None,names=['x','y'])
# print(data)
# plt.scatter(data['x'],data['y'])
# plt.show()
# print(data['x'].values[0])
#获得横坐标
x=data['x']
#获得纵坐标
y=data['y']

#求每个数据与各个中心点的距离
def distance(data,centers):
    #方法一:
    # dist=np.zeros((data.shape[0],centers.shape[0]))
    # for i in range(len(data)):
    #     for j in range(len(centers)):
    #         dist[i,j]=np.sqrt(np.sum((data.iloc[i,:]-centers[j])**2))
    #方法二:
    d=np.square(np.repeat(np.array(data),4,0).reshape(-1,4,2)-centers)
    dist=np.sqrt(np.sum(d,axis=2))

    return dist

#求每个数据对应的最近的中心点
def near_center(data,centers):
    dist=distance(data,centers)
    near_cen=np.argmin(dist,1)
    return near_cen

def kemans(data,k):
    #step1:初始化centers
    centers=np.random.choice(np.arange(-5,5,0.1),(k,2))
    for _ in range(15):
        #step2点归属
        near_cen=near_center(data,centers)

        #step3类中心更新
        for ci in range(k):
            centers[ci]=data[near_cen==ci].mean()

    return centers,near_cen

centers,near_cen=kemans(data,4)
print(near_cen)
plt.scatter(x,y,c=near_cen)
plt.scatter(centers[:,0],centers[:,1],marker='*',s=50,c='r')
plt.show()

  'kmeans.csv’内容如下。

机器学习-Python实现K-Means算法_第1张图片

  分类结果如下。
机器学习-Python实现K-Means算法_第2张图片

你可能感兴趣的:(机器学习,算法,聚类,python,机器学习,深度学习)