吴恩达机器学习课后作业-07kmeans and pca

k-均值

K-均值是最普及的聚类算法,算法接受一个未标记的数据集,然后将数据聚类成不同的组。
K-均值是一个迭代算法,假设我们想要将数据聚类成n个组,其方法为:
首先选择K个随机的点,称为聚类中心(cluster centroids);
对于数据集中的每一个数据,按照距离K个中心点的距离,将其与距离最近的中心点关联起来,与同一个中心点关联的所有点聚成一类。
计算每一个组的平均值,将该组所关联的中心点移动到平均值的位置。
重复步骤2-4直至中心点不再变化。

在这里插入图片描述
样本数据
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import scipy.io as sio
from scipy.optimize import minimize
import pandas as pd
from sklearn.svm import SVC

"""
1获取每个样本所属类别
"""
def fnd_centroids(x,centros):
    idx=[]
    for i in range(len(x)):
        #x[i] 1x2数组   centros是 kx2的数组

        dist =np.linalg.norm((x[i]- centros),axis=1)#dis 1xk
        id_i=np.argmin(dist)
        idx.append(id_i)
    return np.array(idx)

"""
2.计算聚类中心点
"""
def compute_centros(X,idx,k):
    centros =[]
    for i in range(k):
        centros_i = np.mean(x[idx == i],axis=0)
        centros.append(centros_i)
    return np.array(centros)

"""
3.运行kmeans,重复执行12
"""
def run_kmeans(x,centros,iters):
    k = len(centros)
    centros_all =[]
    centros_all.append(centros)
    centros_i = centros
    for i in range(iters):
        idx = fnd_centroids(x,centros_i)
        centros_i = compute_centros(x,idx,k)
        centros_all.append(centros_i)
    return idx,np.array(centros_all)
"""
绘制数据集和聚类中心的移动轨迹
"""

def plot_data(X,centros_all,idx):
    plt.figure()
    plt.scatter(X[:,0],X[:,1],c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值