Python机器学习:K-means算法实现原理、自实现过程、调包实现详细代码!!!

本文深入探讨了K-means算法的原理,通过详细代码介绍了如何从零开始自实现该算法,并提供了使用Python库进行调包实现的示例。
摘要由CSDN通过智能技术生成

算法原理:

自实现过程详细代码:

import numpy as np
import  matplotlib.pyplot as plt

def build_data():
    """
    准备数据
    :return:准备好的数据
    """
    data_list = []
    # 加载数据
    with open("./test.txt") as f:
        # 将所有的元素读成一个列表
        lines = f.readlines()
        # 循环对每一行元素进行单独处理
        for line in lines:
            # print(line)
            # 去除line 前后的空白字符
            line_obj = line.strip().split('\t')
            # print(line_obj)
            # print(type(line_obj))
            # print("*"*20)
            # 把 line_obj 里面的每一个元素 转化为float,追加到一列表中
            data_list.append([float(line_obj[0]), float(line_obj[1])])

    # 列表嵌套列表的数据 ,每一个列表元素是原来的每一行元素
    # print(data_list)
    # 将列表嵌套列表转化为二维数组
    data_array = np.array(data_list)
    # print(data_array)
    # 将二维数组 转化为矩阵
    data = np.mat(data_array)
    # print(data)
    # print(type(data))
    return data


def center_init(data, k):
    """
    初始化聚类中心
    :param data: 所有的样本数据
    :param k: 聚类的类别数目
    :return: 聚类中心
    """
    # 随机在 data中挑选4行 作为初始化的聚类中心
    # 获取data 的列数
    columns_num = data.shape[1]
    # 获取data 的行数
    index_num = data.shape[0]
    # 先初始化一个全为0 的中心,然后,后续替换里面的值
    center = np.zeros(shape=(k, columns_num))
    # 每次初始化一个聚类中心,需要循环初始化k次
    for i in range(k):
        #  随机在80行里面选一个下标
        # np.random.uniform() --->默认生成【0,1) 小数,可以更改最小值与最大值
        r = int(np.random.uniform(0, index_num))

        center[i, :] = data[r, :]

    return center


def distance(v1, v2):
    """
    计算点1 跟点2 的距离
    :param v1: 点1
    :param v2: 点2
    :return: 距离
    """

    dist = np.sqrt(np.sum(np.power((v1 - v2), 2)))

    return dist


def k_means_owns(data, k):
    """
    自实现聚类算法
    :param data: 所有的样本数据
    :param k: 聚类的类别数目
    :return: 聚类中
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值