吴恩达机器学习作业九:kmeans聚类

发布于:2025-09-01 ⋅ 阅读:(24) ⋅ 点赞:(0)

数据集在作业一

Kmeans聚类

K-means 是一种无监督聚类算法,其核心思想是将数据集划分为 k 个不同的簇(Cluster),使得每个簇内的数据点尽可能相似,而不同簇的数据点尽可能差异较大。

算法流程

这个过程其实有点像梯度下降,都是一点一点向最优值逼近。

代码

读取数据及可视化

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio

# 读取数据
data=sio.loadmat("ex7data2.mat")
X=data['X']
# print(X.shape)(300, 2)

# 可视化
def plot_data(X):
    plt.scatter(X[:,0],X[:,1],marker='o',c='y',edgecolors='g')
    plt.show()

# plot_data(X)

簇分配

def find_centres(X,centers):
    m=X.shape[0]
    idx=np.zeros(m)
    for i in range(m):
        min_dist=np.inf
        for j in range(len(centers)):
            dist=np.sum((X[i]-centers[j])**2)
            if dist<min_dist:
                min_dist=dist
                idx[i]=j
    return idx

作用是对所有的点按照新的中心进行划分。

初始聚类中心

centers=np.array([[3,3],[6,2],[8,5]])
idx=find_centres(X,centers)#每个样本所属的簇索引
# print(idx)

计算聚类中心,按照初始簇分配来计算平均中心

def compute_centres(X,idx,centers):
    centers=[]#用来存储新的聚类中心
    for i in range(int(idx.max())+1):
        centers.append(np.mean(X[idx==i],axis=0))
    return centers

centers_new=compute_centres(X,idx,centers)
# print(centers_new)

计算聚类中心,按照初始簇分配来计算平均中心

def compute_centres(X,idx,centers):
    centers=[]#用来存储新的聚类中心
    for i in range(int(idx.max())+1):
        centers.append(np.mean(X[idx==i],axis=0))
    return centers

centers_new=compute_centres(X,idx,centers)
# print(centers_new)

按照分好的簇,取新的一轮中心点

执行kmeans聚类

def kmeans(X,centers,count):
    centers_all=[]
    centers_all.append(centers)
    for i in range(count):
        idx=find_centres(X,centers)
        centers=compute_centres(X,idx,centers)
        centers_all.append(centers)
    return idx,np.array(centers_all)

idx是用来记录最新的每个点属于哪一个簇,centers_all是用来记录所有中心点。

绘制kmeans聚类过程

def plot_kmeans(X,idx,centers_all):
    plt.scatter(X[:,0],X[:,1],marker='o',c=idx,cmap='rainbow')
    plt.plot(centers_all[:,:,0],centers_all[:,:,1],'kx--')
    plt.show()

idx,centers_all=kmeans(X,centers,100)
plot_kmeans(X,idx,centers_all)

总结

读入数据——构建簇分配——构建计算簇类中心函数——初始化簇类中心——搭建执行kmeans算法


网站公告

今日签到

点亮在社区的每一天
去签到