暂无图片
暂无图片
1
暂无图片
暂无图片
2
暂无图片

Python 学习

原创 kayla 2023-03-31
696

day3 python学习
KMeans Clustering 聚类算法
class KMeans:

Kmeans聚类算法实现

'''Kmeans聚类算法实现'''
复制

初始化

def __init__(self, k, times):
    '''初始化
    
    Parameters
    -----
    k: int 聚成几个类
    times: int 迭代次数
    '''
    self.k = k
    self.times = times
复制

根据所给数据训练

def fit(self, X):
    '''根据所给数据训练
    
    Pararmeters
    ------
    X: 类数组类型,形如:[样本数量,特征数量]
    '''
    X = np.asarray(X)
    # 设置随机数种子,以便于可以相同的随机系列,以便随机结果重现
    np.random.seed(0)
    # 从数组中随机选择K个点作为初始聚类中心
    self.cluster_centers_ = X[np.random.randint(0, len(X), self.k)]
    # 用于存放数据所属标签
    self.labels_ = np.zeros(len(X))
    # 开始迭代
    for t in tqdm(range(self.times)):
        # 循环遍历样本计算每个样本与聚类中心的距离
        for index,x in enumerate(X):
            # 计算每个样本与每个聚类中心的欧式距离
            dis = np.sqrt(np.sum((x - self.cluster_centers_)**2, axis=1))
            # 将最小距离的索引赋值给标签数组,索引的值就是当前所属的簇。范围威威(0,K-1)
            self.labels_[index] = dis.argmin()
        # 循环便利每一个数更新聚类中心
        for i in range(self.k):
            # 计算每个簇内所有点的均值,用来更新聚类中心
            self.cluster_centers_[i] = np.mean(X[self.labels_==i], axis=0)
复制

预测样本属于哪个簇

def predict(self, X):        
    '''预测样本属于哪个簇

    Parameters
    -----
    x: 类数组类型。形如[样本数量。特征数量]

    Reeturn
    -----
    result: 类数组,每一个x所属的簇
    '''
    X = np.asarray(X)
    result = np.zeros(len(X))
    for index,x in enumerate(X):
        # 计算样本与聚类中心的距离
        dis = np.sqrt(np.sum((x - self.cluster_centers_)**2, axis=1))
        # 找到距离最近的聚类中中心划分一个类别
        result[index] = dis.argmin()
    return result
复制

全部一览

class KMeans: '''Kmeans聚类算法实现''' def __init__(self, k, times): '''初始化 Parameters ----- k: int 聚成几个类 times: int 迭代次数 ''' self.k = k self.times = times def fit(self, X): '''根据所给数据训练 Pararmeters ------ X: 类数组类型,形如:[样本数量,特征数量] ''' X = np.asarray(X) # 设置随机数种子,以便于可以相同的随机系列,以便随机结果重现 np.random.seed(0) # 从数组中随机选择K个点作为初始聚类中心 self.cluster_centers_ = X[np.random.randint(0, len(X), self.k)] # 用于存放数据所属标签 self.labels_ = np.zeros(len(X)) # 开始迭代 for t in tqdm(range(self.times)): # 循环遍历样本计算每个样本与聚类中心的距离 for index,x in enumerate(X): # 计算每个样本与每个聚类中心的欧式距离 dis = np.sqrt(np.sum((x - self.cluster_centers_)**2, axis=1)) # 将最小距离的索引赋值给标签数组,索引的值就是当前所属的簇。范围威威(0,K-1) self.labels_[index] = dis.argmin() # 循环便利每一个数更新聚类中心 for i in range(self.k): # 计算每个簇内所有点的均值,用来更新聚类中心 self.cluster_centers_[i] = np.mean(X[self.labels_==i], axis=0) def predict(self, X): '''预测样本属于哪个簇 Parameters ----- x: 类数组类型。形如[样本数量。特征数量] Reeturn ----- result: 类数组,每一个x所属的簇 ''' X = np.asarray(X) result = np.zeros(len(X)) for index,x in enumerate(X): # 计算样本与聚类中心的距离 dis = np.sqrt(np.sum((x - self.cluster_centers_)**2, axis=1)) # 找到距离最近的聚类中中心划分一个类别 result[index] = dis.argmin() return result
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

Zixin Huo
暂无图片
2年前
评论
暂无图片 0
day3 python学习 KMeans Clustering 聚类算法 class KMeans: Kmeans聚类算法实现
2年前
暂无图片 点赞
评论
Zixin Huo
暂无图片
2年前
评论
暂无图片 0
day3 python学习 KMeans Clustering 聚类算法 class KMeans: Kmeans聚类算法实现
2年前
暂无图片 点赞
评论