K-means聚类算法【机器学习】

本文详细介绍了K-means聚类算法的实验步骤,包括从导入数据到使用K-means进行聚类,以及如何用sklearn库实现算法。实验数据可以清晰地划分为4个类别,经过几次迭代后能稳定找到聚类中心。此外,文章还提供了相关资源链接和画图函数的参考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、实验内容与步骤

源数据(80行)

在这里插入图片描述


题目1

        已知训练数据集data.txt可以划分成4个不同的类别(如下图所示),定义k=4,随机初始化4个不同的聚类中心,通过计算每个样本点与聚类中心之间的距离,将样本点划分成不同的类别中。
在这里插入图片描述

代码

1.导入训练数据集data.txt

def load_data(file_path):
    '''导入数据
    input:  file_path(string):文件的存储位置
    output: data(mat):数据
    '''
    f = open(file_path)
    data = []
    for line in f.readlines():
        row = []  # 记录每一行
        lines = line.strip().split("\t")
        for x in lines:
            row.append(float(x)) # 将文本中的特征转换成浮点数
        data.append(row)
    f.close()
    return np.mat(data)

2.随机初始化k个聚类中心

def randCent(data, k):
    '''随机初始化聚类中心
    input:  data(mat):训练数据
            k(int):类别个数
    output: centroids(mat):聚类中心
    '''
    n = np.shape(data)[1]  # 属性的个数
    centroids = np.mat(np.zeros((k, n)))  # 初始化k个聚类中心
    for j in range(n):  # 初始化聚类中心每一维的坐标
        minJ = np.min(data[:, j])
        rangeJ = np.max(data[:, j]) - minJ
        # 在最大值和最小值之间随机初始化
        centroids[:, j] = minJ * np.mat(np.ones((k , 1))) \
                        + np.random.rand(k, 1) * rangeJ
    return centroids

3.利用K-means进行聚类算法(为每个个体分配聚类中心,移动聚类中心,迭代)

#利用K-Means进行聚类算法(为每个个体分配聚类中心,移动聚类中心,迭代)
def kmeans(data,k,centroids):
    '''
    input:
            data(mat): 训练数据
            k(int): 类别个数
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值