聚类集成方法python实现(基于相似度、基于重标记法)

2023-05-16

一、写此篇的背景

有个同学给我两篇论文
《基于聚类集成的特征选择方法研究_李玥》
《基于基聚类器对齐的聚类集成方法研究_杨康》
基于相似度的方法跟他讲了一遍他自己复现好了,但是他觉得他的数据集有几万条,时间和空间复杂度太高,就让我帮他实现一下重标记法

二、基于重标记法聚类集成的原理与实现

原理参见这篇写的很好的博文《学习笔记2-聚类集成方法》
这里实现的的是其中的7.4.2硬标记对应法

import numpy as np
from copy import deepcopy
import pandas as pd

# 假设聚成3类
K = 3
# 样本量为7条
sample_nums = 7
model1 = np.array([1,1,2,2,3,3,1])
# 方便后面用下标去等价类别,这里让类别也从0开始,后面操作同义
model1 -= 1

model2 = np.array([2,2,3,3,1,1,2]) - 1
model3 = np.array([1,1,2,2,2,3,3]) - 1
model4 = np.array([2,3,3,2,2,1,1]) - 1

model_to_do_list = [model2, model3, model4]     # 作为原数据

model_done_list = deepcopy(model_to_do_list)    # 作为改动数据,这里使用deepcopy深层复制一份,防止干扰原数据

# 创建一个种类数*种类数的矩阵O_mat
O_mat = np.zeros((K, K))
model_i = model1    	# 这里定死model_i就是model1

for model_idx in range(len(model_to_do_list)):
    # model_to_do_list[model_idx]就是model_j原模型数据
    # 在原模型数据上遍历,用于记录model_i的 第i_cls类 与model_j的第j_cls类的共同样本数
    # 对于模型i的种类遍历
    for i_cls in range(K):   # 注意range是 [) 左闭右开
        # 对于模型j的种类遍历
        for j_cls in range(K):
            # 取模型i属于第i_cls类的样本下标的集合,flatten将数据打平(可以不打平看看是什么结果)
            model1_set = set(np.argwhere(model_i==i_cls).flatten()) # {0,1}
            # 取模型i属于第i_cls类的样本下标的集合
            model2_set = set(np.argwhere(model_to_do_list[model_idx]==j_cls).flatten()) # {1}
            # 对集合取交集则为共同样本,取长度则为共同样本数
            O_mat[i_cls][j_cls] = len(model1_set & model2_set)      # 交集{1}, 长度为1

    print(f"初始O_mat = \n{O_mat}")

    # 当O_mat不是∅空集时,一直循环进行重标记
    while (O_mat == np.zeros((K, K))).sum() != K*K:
        # 获取O_mat中最大的值的坐标
        u, v = np.unravel_index(np.argmax(O_mat), O_mat.shape)

        print(f"O_mat = \n{O_mat}\n, 现在的argmax坐标为(u,v)=({u},{v})")

        # 将模型j的第j_cls类(即v)改为第i_cls类(即u)
        #   先从原模型数据中得到要修改的索引
        to_modify_idx = np.argwhere(model_to_do_list[model_idx]==v)
        #   修改改动模型数据的对应索引
        model_done_list[model_idx][to_modify_idx] = u

        # 第u行和第v列都删除,不用再找了,记为0即可
        O_mat[u] = 0
        O_mat[:, v] = 0

# 转为pandas的dataframe
bagging_mat = pd.DataFrame(data=np.array([model1, *model_done_list]))
# 取每列的众数作为投票结果
classify_group = bagging_mat.mode().values[0]

print(classify_group)

参考:
Numpy中返回下标操作函数

TODO:留个坑,有时间把基于相似度的实现掉

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

聚类集成方法python实现(基于相似度、基于重标记法) 的相关文章

  • Linux 基础概念

    文章目录 POSIX动态库和静态库ioctl MCU架构RISC与CISCx86 ARM MIPS架构 U bootBootloader 两种模式主机和板子的传输方式启动顺序bootloader两个阶段U Boot 移植 分区Linux s
  • rosdep update遇到ERROR: error loading sources list: The read operation timed out问题

    链接 xff1a https blog csdn net DDonggggg article details 115798335
  • C++ HTTP实现

    文章目录 一 HTTP基础知识1 什么是Http协议 xff1a 2 常见HTTP头3 HTTP请求头概述 xff08 HttpServletRequest xff09 4 URL格式详解 xff1a 二 WinHttp入门及实战1 介绍2
  • ros+ Optitrack控制bebop2无人机

    准备工作 xff1a Motive的安装及使用 xff1a https blog csdn net weixin 41536025 article details 89913961 ros订阅 OptiTrack 的消息通过vrpn cli
  • stm32中typedef的用法

    C语言允许用户使用 typedef 关键字来定义自己习惯的数据类型名称 xff0c 来替代系统默认的基本类型名称 数组类型名称 指针类型名称与用户自定义的结构型名称 共用型名称 枚举型名称等 一旦用户在程序中定义了自己的数据类型名称 xff
  • Python系列 49 内置模块:subprocess

    subprocess简介 subprocess模块最早在Python2 4中引入 xff0c 它会生成一个子进程 xff0c 该子进程可以执行shell命令 xff0c 并且会监听系统的标准输入管道 标准输出管道 标准错误管道 xff0c
  • python使用serial模块,通过串口控制云台(基于PELCO-D协议)

    一 需求描述 通过python实现对云台的控制 xff0c 使用到的相关模块 xff1a 1 pyserial xff0c 串口模块 xff0c 用于连接串口 xff0c 并通过串口发送指令 2 bytes xff0c 内置模块 xff0c
  • TP-LINK路由器如何设置上网

    1 登陆 xff0c 网址192 168 1 1 xff0c 登陆 xff0c 一般在路由器背后 xff0c 没有或者忘记就重置 2 设置导向 3 输入拨号 xff08 以太网 xff09 的账号密码 4 设置wifi账号密码 xff0c
  • (1+x)^(1/x)的导数

  • 电脑待机久了没有声音,需要重启才行

    这种原因一般是唤醒电脑后 xff0c 声卡驱动没有跟着苏醒导致 xff1b 方法一 xff1a 重启电脑 xff0c 简单粗暴 xff1b 方法二 xff1a 在设备器里面重启声音设备 xff0c 先禁用 xff0c 再重新 xff1b 也
  • Pycharm 中安装pywin32报错

    1 在pycharm的寻找并安装插件pywin32时报错 xff1b 大致意思是安装失败 xff0c 建议的解决方案 xff1a 尝试从系统终端运行此命令 确保使用正确的 pip 版本 xff0c 该版本已为位于如下地址 xff1a F p
  • win10下关闭笔记本自带键盘以及解锁

    win10下关闭笔记本自带键盘 管理员运行cmd sc config i8042prt start 61 disabled 重启 解除自带键盘锁定 1 sc config i8042prt start 61 auto xff0c 重启 xf
  • chatra无法注册

    chatra用QQ邮箱注册显示邮箱无法访问 xff0c 不知道是不是邮箱设置了还是这个网站不支持 xff1b 用163邮箱注册就成功了
  • 打开回收站提示“回收站已损坏是否清空该驱动器上的回收站“解决方法

    我们一般需要删除的文件或者文件夹都是删除在电脑系统中的回收站中的 xff0c 但是最近有一个网友在打开Win10系统的回收站的时候 xff0c 忽然弹出了提示 D xff1a 上的回收站已损坏 是否清空该驱动上的回收站 xff0c 一般遇到
  • C++之迭代器(Iterator)篇

    迭代器 xff08 Iterator xff09 的介绍 背景 xff1a 指针可以用来遍历存储空间连续的数据结构 xff0c 但是对于存储空间费连续的 xff0c 就需要寻找一个行为类似指针的类 xff0c 来对非数组的数据结构进行遍历
  • Sublime Text运行C和C++程序

    Sublime Text 是一款当下非常流行的文本编辑器 xff0c 其功能强大 xff08 提供有众多的插件 xff09 界面简洁 还支持跨平台使用 xff08 包括 Mac OS X Linux 和 Windows xff09 在程序员
  • c++ string find(), rfind(), find_first_of(),find_last_of()

    find rfind 函数原型 xff1a span class token keyword int span span class token function find span span class token punctuation
  • 1233. 删除子文件夹

    难度 xff1a 中等 你是一位系统管理员 xff0c 手里有一份文件夹列表 folder xff0c 你的任务是要删除该列表中的所有 子文件夹 xff0c 并以 任意顺序 返回剩下的文件夹 如果文件夹 folder i 位于另一个文件夹
  • 【ROS入门篇·一】ROS文件系统 & catkin编译系统

    快速链接 xff1a ROS入门篇 ROS学习简介 一 ROS工作空间创建 amp 编译 1 xff09 创建工作空间 mkdir p catkin ws src cd catkin ws src 2 xff09 创建功能包 catkin
  • 【ROS入门篇·五】launch文件使用 & 向节点传递参数

    快速链接 xff1a ROS入门篇 ROS学习简介 一 launch文件使用 1 1 launch文件简介 launch文件能够同时启动一个ROS Master和多个Node launch文件的标签 lt launch gt lt 根标签

随机推荐

  • 【ROS小车仿真·一】rviz中显示urdf模型

    快速链接 xff1a ROS小车仿真 从零实现gezebo小车仿真 一 urdf简介 URDF Unified Robot Description Format 统一机器人描述格式 xff0c URDF是使用XML格式描述机器人的文件 参考
  • 2.为什么要内存对齐?

    一 什么是内存对齐 xff08 Memory alignment xff09 xff0c 也叫字节对齐 在计算机中 xff0c 内存是按 字节 byte 1byte 61 8bit 划分的 xff0c 而cpu在读取内存数据时 xff0c
  • 问题笔记:STM32串口数据位与校验位

    问题 xff1a STM32移植freemodbus 后测试时 xff0c 只能使用无校验 xff0c 设置奇偶校验时无法与上位机通讯解决方法 如果串口助手使用串口配置为 xff1a 数据位8 停止位1 有奇偶校验 STM32需设置为 xf
  • 虚拟机使用pc摄像头

    1 win 43 r打开运行 2 在运行中键入services msc回车 xff0c 打开服务 3 右边下拉找到VMware Authorization Service 4 双击打开属性 xff0c 启动类型 gt 自动 xff0c 点击
  • sudo: 无法执行 ./configure: 没有那个文件或目录

    先说下环境 xff0c centos7 xff0c 编译srt时遇到的 看看是否存在这个文件 xff0c 如果存在 ll 查看是否是可执行的 xff0c 如果不可执行 sudo chmod span class token operator
  • 【Unity】为什么要用栈?

    今天看到一个UI界面使用了栈 xff0c 养成了写的习惯 xff0c 但是没有明白后面的道理 xff0c 自己查了很多资料 xff0c 发现很多人都在说后进先出 xff0c 但是也没有比较好的例子和解释 xff0c 直到遇见了这样的一个说法
  • printf打印long long类型数据

    用微妙做单位的话 xff0c 时间戳是16位数字 xff0c 应该用64位整形存储 xff0c long long 如果用printf打印的话 xff0c d默认是int类型 xff0c 打印long long int格式是 lld 打印l
  • h264和h265编码所需要的处理器性能

    h265压缩比为1 200 xff0c h264压缩比为1 100 xff0c 压缩一帧h265理论上比压缩一帧h264多10ms的时间 以下数据均来自实测 在Intel Core i7 6700 CPU 64 3 40GHz 4核8线程中
  • webrtc(native C++) + srs 拉流客户端

    webrtc编译h264使用openh264 解码使用ffmpeg解码 对于vp8 vp9解码也是使用ffmpeg 其实openh264库可以支持解码功能 这点不同于x264 但webrtc选择的是ffmpeg 可能是为了统一吧 首先在编译
  • openssl生成server.crt和server.key

    你可以使用 openssl 命令行工具来生成自签名的 SSL 证书和密钥 以下是步骤 xff1a 打开终端 输入以下命令 xff0c 生成私钥 xff08 server key xff09 xff1a openssl genrsa span
  • srs one2one,one2many通话环境搭建

    一 简介 二 go环境配置 三 srs编译配置 四 信令服务器编译 4 1 signaling8 4 2 web服务器 五 测试 六 附录 官 档参考地址 xff1a https github com ossrs srs wiki v4 C
  • srs 直播连麦环境搭建

    一 简介 二 修改conf rtc conf 三 两个客户端加入房间 四 合流 4 1分别拉流尝试 4 2合流推流 4 3拉取合流 一 简介 直播连麦是指在one2one或one2many进行音视频通话 xff0c 此时把他们的音视频流合在
  • DM-VIO安装与运行各类数据集

    1 论文地址 xff1a https vision in tum de media research vslam dm vio dm vio pdf https vision in tum de media research vslam d
  • sklearn风格的keras接口KerasClassifier、KerasRegressor

    span class token keyword from span tensorflow span class token punctuation span keras span class token punctuation span
  • python与java通信——使用socket模块

    前几天遇到个问题需要用python和java通信 xff0c 网上这种帖子很多 xff0c 比如runtime方法 xff0c py4j方法等 但是runtime方法似乎只能向python传参 xff0c 不能接受python传回 xff1
  • 简单移动平均SMA和指数移动平均EMA

    一 简单移动平均SMA 最近有一个平滑的需求 xff1a 设置平滑期数h xff08 奇数 xff09 xff0c 每期点平滑方法是 xff1a 取该期前后共m期 xff08 含本期 xff09 点的平均值 如果前或后没有足够的点则不用平滑
  • postman基础教程

    目录 一 postman安装说明 1 下载与安装 2 界面导航说明 3 发送第一个请求 二 postman基础功能 1 常见类型的接口请求 1 1 查询参数的接口请求 1 2 表单类型的接口请求 1 3 上传文件的表单请求 1 4 json
  • pandas使用分位数筛选满足条件的行

    分位数计算原理参见 python pandas 分位数 下面直接使用pandas的quantile方法 1 给个例子 span class token keyword import span pandas span class token
  • pandas str.endswith筛选结尾字符串为一个范围内的行

    span class token keyword import span numpy span class token keyword as span np span class token keyword import span pand
  • 聚类集成方法python实现(基于相似度、基于重标记法)

    一 写此篇的背景 有个同学给我两篇论文 基于聚类集成的特征选择方法研究 李玥 基于基聚类器对齐的聚类集成方法研究 杨康 xff0c 基于相似度的方法跟他讲了一遍他自己复现好了 xff0c 但是他觉得他的数据集有几万条 xff0c 时间和空间