educoder 数据挖掘算法原理与实践:k-均值

数据挖掘算法原理与实践:数据预处理(第一关-第五关) 第1关:标准化 # -*- coding: utf-8 -*- from sklearn.preprocessing import scale,MaxAbsScaler,MinMaxScaler #实现数据预处理方法 def Preprocessing(x,y): ''' x(ndarray):处理 数据 y(str):y等于'z_score'使用z_score方法 y等于'minmax'使用MinMaxScaler方法 y等于'max 阅读详情

第1关:什么是质心

#encoding=utf8
import numpy as np

#计算样本间距离
def distance(x, y, p=2):
    '''
    input:x(ndarray):第一个样本的坐标
          y(ndarray):第二个样本的坐标
          p(int):等于1时为曼哈顿距离,等于2时为欧氏距离
    output:distance(float):x到y的距离      
    '''
    #********* Begin *********#    
    dis2 = np.sum(np.abs(x-y)**p)
    dis = np.power(dis2,1/p)
    return dis
    #********* End *********#
#计算质心
def cal_Cmass(data):
    '''
    input:data(ndarray):数据样本
    output:mass(ndarray):数据样本质心
    '''
    #********* Begin *********#
    Cmass = np.mean(data,axis=0)
    #********* End *********#
    return Cmass
#计算每个样本到质心的距离,并按照从小到大的顺序排列
def sorted_list(data,Cmass):
    '''
    input:data(ndarray):数据样本
          Cmass(ndarray):数据样本质心
    output:dis_list(list):排好序的样本到质心距离
    '''
    #********* Begin *********#
    dis_list = []
    for i in range(len(data)):
        dis_list.append(distance(Cmass,data[i][:]))
    dis_list = sorted(dis_list)
    #********* End *********#
    return dis_list

第2关:动手实现k-均值

#encoding=utf8
import numpy as np
# 计算一个样本与数据集中所有样本的欧氏距离的平方
def euclidean_distance(one_sample, X):
    '''
    input:
        one_sample(ndarray):单个样本
        X(ndarray):所有样本
    output:
        distances(ndarray):单个样本到所有样本的欧氏距离平方
    '''
    #*********Begin*********#
    one_sample = one_sample.reshape(1, -1)
    distances = np.power(np.tile(one_sample, (X.shape[0], 1)) - X, 2).sum(axis=1)
    #*********End*********#
    return distances
# 从所有样本中随机选取k个样本作为初始的聚类中心
def init_random_centroids(k,X):
    '''
    input:
        k(int):聚类簇的个数
        X(ndarray):所有样本
    output:
        centroids(ndarray):k个簇的聚类中心
    '''
    #*********Begin*********#
    n_samples, n_features = np.shape(X)
    centroids = np.zeros((k, n_features))
    for i in range(k):
        centroid = X[np.random.choice(range(n_samples))]
        centroids[i] = centroid
    #*********End*********#
    return centroids
# 返回距离该样本最近的一个中心索引
def _closest_centroid(sample, centroids):
    '''
    input:
        sample(ndarray):单个样本
        centroids(ndarray):k个簇的聚类中心
    output:
        closest_i(int):最近中心的索引
    '''
    #*********Begin*********#
    distances = euclidean_distance(sample, centroids)
    closest_i = np.argmin(distances)
    #*********End*********#
    return closest_i
# 将所有样本进行归类,归类规则就是将该样本归类到与其最近的中心
def create_clusters(k,centroids, X):
    '''
    input:
        k(int):聚类簇的个数
        centroids(ndarray):k个簇的聚类中心
        X(ndarray):所有样本
    output:
        clusters(list):列表中有k个元素,每个元素保存相同簇的样本的索引
    '''
    #*********Begin*********#
    clusters = [[] for _ in range(k)]
    for sample_i, sample in enumerate(X):
        centroid_i = _closest_centroid(sample, centroids)
        clusters[centroid_i].append(sample_i)
    #*********End*********#
    return clusters
# 对中心进行更新
def update_centroids(k,clusters, X):
    '''
    input:
        k(int):聚类簇的个数
        X(ndarray):所有样本
    output:
        centroids(ndarray):k个簇的聚类中心
    '''
    #*********Begin*********#
    n_features = np.shape(X)[1]
    centroids = np.zeros((k, n_features))
    for i, cluster in enumerate(clusters):
        centroid = np.mean(X[cluster], axis=0)
        centroids[i] = centroid
    #*********End*********#
    return centroids
# 将所有样本进行归类,其所在的类别的索引就是其类别标签
def get_cluster_labels(clusters, X):
    '''
    input:
        clusters(list):列表中有k个元素,每个元素保存相同簇的样本的索引
        X(ndarray):所有样本
    output:
        y_pred(ndarray):所有样本的类别标签
    '''
    #*********Begin*********#
    y_pred = np.zeros(np.shape(X)[0])
    for cluster_i, cluster in enumerate(clusters):
        for sample_i in cluster:
            y_pred[sample_i] = cluster_i
    #*********End*********#
    return y_pred
# 对整个数据集X进行Kmeans聚类,返回其聚类的标签
def predict(k,X,max_iterations,varepsilon):
    '''
    input:
        k(int):聚类簇的个数
        X(ndarray):所有样本
        max_iterations(int):最大训练轮数
        varepsilon(float):最小误差阈值
    output:
        y_pred(ndarray):所有样本的类别标签
    '''
    #*********Begin*********#
    # 从所有样本中随机选取k样本作为初始的聚类中心
    centroids = init_random_centroids(k,X)
    # 迭代,直到算法收敛(上一次的聚类中心和这一次的聚类中心几乎重合)或者达到最大迭代次数
    for _ in range(max_iterations):
        # 将所有进行归类,归类规则就是将该样本归类到与其最近的中心
        clusters = create_clusters(k,centroids, X)
        former_centroids = centroids
        # 计算新的聚类中心
        centroids = update_centroids(k,clusters, X)
        # 如果聚类中心几乎没有变化,说明算法已经收敛,退出迭代
        diff = centroids - former_centroids
        if diff.any() < varepsilon:
            break
    y_pred = get_cluster_labels(clusters, X)
    #*********End*********#
    return y_pred

数据挖掘 实验五、k-均值聚类算法 其中,所有属性已被规范化到 [0, 1]区间,每一行代表一个属性向量,第一列代表属性空间的横轴坐标,第二列代表属性空间的纵轴坐标。(2) 在训练样本集上用 VC++编程工具编写用于 k-均值聚类的程序,对任务 相关数据运行 k-均值聚类算法,调试实验。k-均值聚类算法是一种迭代算法,它甚至可以没有终止条件,而通过将数据分成K类,每个类可以方便区分,然后进行运算。该程序通过自动读取文件,获得初始质心,通过欧几里得计算实现3-均值聚类算法,当满足终止条件时获得目标结果。 阅读详情

相关推荐

头歌 6. Pandas合并数据集

头歌 6. Pandas合并数据集

翻斗恶霸的博客 1万+

数据挖掘算法原理与实践:k-均值

什么是质心 #encoding=utf8 import numpy as np #计算样本间距离 def distance(x, y, p=2): ''' input:x(ndarray):第一个样本的坐标 y(ndarray):第二个样本的坐标 p(int):等于1时为曼哈顿距离,等于2时为欧氏距离 output:distance(float):x到y的距离 ''' #********* Begin *******

weixin_44196785的博客 5090

第3关 k-means算法流程 (educoder

python机器学习K-means educoder第3关 k-means算法流程

aaaaDea的博客 2774

数据挖掘十大算法--K-均值聚类算法

一、相异度计算 在正式讨论聚类前,我们要先弄清楚一个问题:怎样定量计算两个可比較元素间的相异度。用通俗的话说。相异度就是两个东西区别有多大。比如人类与章鱼的相异度明显大于人类与黑猩猩的相异度,这是能我们直观感受到的。可是,计算机没有这样的直观感受能力,我们必须对相异度在数学上进行定量定义。 ...

weixin_30802273的博客 863

实验十五 pandas数据处理

为了完成本关任务,你需要掌握:1.读取excel文件,2.筛选dataframe数据,3.将数据写入工作簿和工作表。本关任务:编写一个将GDP信息的excel文件筛选存储的小程序。本关任务:编写一个将银行信息的excel文件筛选存储的小程序。打开超市销售数据工作簿。超市销售数据如图所示。

Junds0的博客 8523

超市商场商品分类表格excel

商场的商品分类建议,自己搞到的~机会难得。赶紧下载

【实践】数据挖掘DM课程课业打卡实验4 聚类算法

【实践】数据挖掘DM课程课业打卡实验4 聚类算法 一、实验目的 二、实验内容 叮嘟!这里是小啊呜的学习课程资料整理。好记性不如烂笔头,今天也是努力进步的一天。一起加油进阶吧!

小啊呜的博客 619

将外部电磁近场数据导入 ANSYS HFSS

本博客介绍了如何将电磁近场数据导入 ANSYS HFSS。用户可能需要导入字段,无论是通过分析计算、测量、由其他工具生成还是从提供商处接收的字段,并将其用作实际激励来执行不同类型的分析。以下是导入过程的简要概述,视频链接中提供了完整的演示。为了定义简单基元近场源,HFSS 使用两种外部数据文件。首先,实际位置/字段数据以 .nfd 格式存储。其次,Ansys Near field Descriptor 文件(.and 文件)存储 .nfd 数据的一般几何信息和路径。

jkh920184196的博客 2323

《数据挖掘:理论与算法》学习笔记(二)—数据预处理(上)

数据预处理过程 数据清洗—>数据转换—>数据描述—>特征选择—>特征提取 为什么要进行数据预处理 原始的数据不利于直接进行数据挖掘,因为: 数据不完整 存在错误数据 数据存在重复信息 数据量过大 等等。。。 如何解决丢失的数据问题 进行选择性忽视 人工补全(比如重新收集、经验填充) 自动补全(利用数据的均值等) 等等。。。 离群点(Outlier) 如何对这些...

时光机的学习博客 1360

AT91SAM9260搭建LINUX操作系统

一、 编写目的 2 二、 系统搭建 2 1. 下载相关软件包 2 2. Bootstrap编译 3 3. U-BOOT编译 5 4. LINUX编译 7 5. 通过U-BOOT的TFTP命令从TFTP服务器下载系统镜像 9 6. 文件系统制作 10 7. 挂载NFS作为根文件系统 10 三、 总结 14 一、编写目的 本文档用于记录AT91SAM9260 LINUX学

lshiceman的专栏 7412

实用电路精讲系列---快速精密桥式放大器电路

快速精密桥式放大器通过惠斯通电桥转换物理量为差分信号,经仪表放大器精密放大,具有高共模抑制、低噪声和宽带宽特性。其核心包含:电桥传感器转换、仪表放大器信号调理(增益可调、温漂补偿)、输出级适配ADC。典型应用包括智能断路器监测、胎压检测、电池安全预警等10大领域,需注意传感器-放大器-ADC最短路径布局。实用电路采用LT1057S和LT1010构建,实现稳定供电、差分处理、功率放大和桥式驱动,满足高精度、快速响应需求。该技术在工业控制、医疗设备等领域具有重要价值。

weixin_40590799的博客 1414

聚类算法K-Means, K-Medoids, GMM, Spectral clustering,Ncut

聚类算法是ML中一个重要分支,一般采用unsupervised learning进行学习,本文根据常见聚类算法分类讲解K-Means, K-Medoids, GMM, Spectral clustering,Ncut五个算法在聚类中的应用。 Clustering Algorithms分类 1. Partitioning approach:  

a1429331875的专栏 1517

AD5940阻抗测量开发板实战:从源码获取到工程调试全解析

本文详细解析了AD5940阻抗测量开发板的实战应用,从源码获取到工程调试的全过程。AD5940作为ADI公司的高精度阻抗测量前端芯片,适用于生物阻抗分析、电化学传感器等领域。文章提供了开发环境搭建、工程配置、常见问题排查及进阶调试技巧,帮助开发者快速掌握AD5940开发板的使用方法。

weixin_30919429的博客 212

头歌Python实训——pandas数据处理

头歌Python实训——pandas数据处理

qq_64377245的博客 1万+

YOLOv8改进 | 注意力篇 | 一文带你改进GAM、CBAM、CA、ECA等通道注意力机制和多头注意力机制

官方论文地址:官方论文地址点击此处即可跳转官方代码地址:官方代码地址点击此处即可跳转GAM旨在通过设计一种机制,减少信息损失并放大全局维度互动特征,从而解决传统注意力机制在通道和空间两个维度上保留信息不足的问题。GAM采用了顺序的通道-空间注意力机制,并对子模块进行了重新设计。具体来说,通道注意力子模块使用3D排列来跨三个维度保留信息,并通过一个两层的MLP增强跨维度的通道-空间依赖性。

Snu77的博客 4万+

Dify 第 2 篇 Dify 插件离线安装

Dify是一个支持插件扩展的AI平台,其插件市场提供5种类型插件(模型、工具、Agent策略、扩展、插件包)。由于默认pip安装速度慢,可通过dify-plugin-repackaging工具将插件转换为离线包(使用阿里云镜像加速)。该工具提供两种方式:1)自备Python环境执行脚本;2)使用Docker环境(推荐)。脚本支持从Dify市场或GitHub下载插件,并重新打包为含依赖的离线包,便于通过"本地插件"方式快速安装。

甘蓝的专栏 1264

pandas数据处理闯关

pandas数据处理

m0_55212193的博客 3282

基于NB-IoT的智慧路灯监控系统(NB-IoT专栏—实战篇1:项目简介)

基于NB-IoT技术的城市道路智慧路灯监控系统,在每个照明节点上安装一个集成了NB-IoT模组的单灯控制器,单灯控制器再经运营商的网络,与路灯控制平台实现双向通信,路灯控制平台直接对每个灯进行控制,包括开关灯控制、光照检测、自动调节明暗、电耗分析等操作。

不脱发的程序猿 5万+

机器学习第二关——k-means算法流程

k-means算法流程: #encoding=utf8 import numpy as np # 计算一个样本与数据集中所有样本的欧氏距离的平方 def euclidean_distance(one_sample, X): one_sample = one_sample.reshape(1, -1) distances = np.power(np.tile(one_sample, (X.shape[0], 1)) - X, 2).sum(axis=1) return distan

cheny的博客 2642

Open3D 球旋转算法(BPA)三维建模【2026最新版】

球旋转算法,博客长期更新,本文最新更新时间为:2026年4月11日。

点云侠的博客 37万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

python脚本解释器

关于脚本第一行的 #!/usr/bin/python 的解释,相信很多不熟悉 Linux 系统的同学需要普及这个知识,脚本语言的第一行,只对 Linux/Unix 用户适用,用来指定本脚本用什么解释器来执行。 有这句的,加上执行权限后,可以直接用 ./ 执行,不然会出错,因为找不到 python 解释器。 #!/usr/bin/python 是告诉操作系统执行这个脚本的时候,调用 /usr/bin...

六月的尾巴 751

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java-IO

IO概述: 字节流: 一切皆为字节 字节输出流:OutputStream

qq_39768411的博客 261

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

pandas-task1

Pandas对象 import pandas as pd import numpy as np ‘’’ #series是带索引的一维数组 data=pd.Series([10,20,30,40,50]) print(data.values,data.index) print(data[1]) #值输出对应索引的值,1是指索引,不是第2个值。 print(data[1:4]) #输出索引和对应的值。...

刘垚鑫的博客 257

头歌实践平台(python数据结构)(1-6)

任务描述本关任务:编写代码实现栈的基本操作。相关知识为了完成本关任务,你需要掌握:栈抽象数据类型;Python 中 List 的操作方法。栈抽象数据类型抽象数据类型“栈”是一个有次序的数据集。 在栈中,数据项的加入和移除都仅发生在同一端,这一端被称为栈顶,相对地,把另一端称为栈底。距离栈底越近的数据项, 留在栈中的时间就越长,而最新加入栈的数据项会被最先移除。这种次序通常称为“后进先出”( LIFO ):Last in First out。下图是一个栈的抽象模型:转存失败重新上传取消图1 栈模型抽象数据类型

qq_62640789的博客 1万+

Python简单入门到精通

Python简单入门到精通 朋友推荐,可以自己去动动手 这里我也查了一些资料,整理了一下,感兴趣或者没目标可以看看 其余的都是bilibili上面的可以查到的,手动bilibili-Python Python基础篇——初体验 Python初体验——Hello World 输出Hello Python #coding=utf-8 #请在此处添加代码完成输出“Hello Python”,注意要区分大小写! ###### Begin ###### print("Hello Python") ###### En

循环的命运的博客 5076
上一篇: educoder 机器学习 --- 绪论
下一篇: educoder 数据挖掘算法原理与实践:决策树
木右加木
博客等级 码龄7年 300粉丝 121原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值