根据西瓜书的算法实现半监督kmeans聚类

import numpy as np
import pandas as pdclass kmean_half:def __init__(self, data, label):self.loaddata = dataself.label = labeldef data_load(self):# 数据划分为有标签数据和无标签数据label_data = self.loaddata[self.loaddata[self.label].isnull() == False]unlabel_data = self.loaddata[self.loaddata[self.label].isnull() == True]return label_data, unlabel_data# 初始化聚类中心def clu_center_ini(self, label_data):""":param label_data: 有标签数据:return:"""# 获取所有类别labels = label_data[self.label].unique()# 计算各聚类中心clu_center = []for lab in labels:df = label_data[label_data[self.label] == lab]df = df.drop(self.label, axis=1)df = np.array(df)clu_center.append(np.mean(df, axis=0))return clu_center, labels# 有标记样本划分到各簇中def label_sample_clu(self, data, labels: list):""":param data: 有标记样本数据:param labels: 类别列表(去重):return:"""label_id = data[self.label].valuesdata = data.drop(self.label, axis=1)data = np.array(data)sample_list = []for i in range(len(labels)):sample_list.append([])for i in range(len(data)):id = np.where(labels == label_id[i])sample_list[id[0][0]].append(data[i])return sample_list# 计算新的聚类中心def new_center(self, label_list):""":param label_list: 样本簇列表:return:"""label_list = np.array(label_list)for i in range(len(label_list)):label_list[i] = np.array(label_list[i])center = []for i in range(len(label_list)):a = np.mean(label_list[i], axis=0)center.append(a)return center# 计算两个向量之间的欧氏距离def sample_center_distance(self, x, y):return np.linalg.norm(x - y)# 样本簇更新def new_clu(self, new_center, data):sample_list = []for i in range(len(new_center)):sample_list.append([])df = data.drop(self.label, axis=1)df = np.array(df)for i in range(len(df)):tmp = []for j in range(len(new_center)):tmp.append(self.sample_center_distance(df[i], np.array(new_center[j])))id = np.where(tmp == min(tmp))sample_list[id[0][0]].append(df[i])return sample_listdef run(self, errors):# 加载数据label_data, unlabel_data = self.data_load()# 初始化聚类中心clu_center, labels = self.clu_center_ini(label_data)# 有标记样本划分到簇中label_sample_list = self.label_sample_clu(label_data, labels)# 无标记样本划分到簇中sample_list = self.new_clu(clu_center, unlabel_data)# 两种样本合并samplelist = []for i in range(len(labels)):samplelist.append(label_sample_list[i] + sample_list[i])# 计算新的聚类中心center = self.new_center(samplelist)# 计算新的聚类中心与旧聚类中心的距离e = self.sample_center_distance(np.array(center), np.array(clu_center))# 以下是常规kmeans聚类while e > errors:# 根据新的聚类中心重新划分样本sample_list = self.new_clu(center, unlabel_data)# 计算新的聚类中心new_center = self.new_center(sample_list)# 计算新的聚类中心与旧聚类中心的距离e = self.sample_center_distance(np.array(center), np.array(new_center))center = new_centerreturn sample_list, labels

半监督kmeans聚类相关推荐

  1. 西瓜书+实战+吴恩达机器学习(十六)半监督学习(半监督SVM、半监督k-means、协同训练算法)

    文章目录 0. 前言 1. 半监督SVM 2. 半监督k-means 2.1. 约束k-means 2.2. 约束种子k-means 3. 协同训练算法 如果这篇文章对你有一点小小的帮助,请给个关注, ...

  2. 【图像分割】基于萤火虫优化的半监督谱聚类彩色图像分割方法(Matlab代码实现)

    目录 0 概述 1 萤火虫算法 1.1 思想来源 1.2 数学模型 1.2.1 萤火虫相对荧光亮度 1.2.2 萤火虫吸引度 1.2.3 位置更新 1.3 算法步骤 2 基于萤火虫优化的半监督谱聚类彩 ...

  3. 4.K-MEANS聚类算法

    4.K-MEANS聚类算法 4.1.概述 4.2.算法核心思想 4.3.K-Means原理初探 4.4.传统K-Means算法流程 4.5.K-Means初始化优化K-Means++ 4.7.大样本优 ...

  4. 聚类 监督聚类 k-means聚类

    大师兄的数据分析学习笔记(二十五):聚类(一) - 简书 (jianshu.com) 一.监督学习和无监督学习 分类和回归都属于监督学习,监督学习的特点是有标注. 所谓标注也就是数据的特征,不管是分类 ...

  5. 图像分类最新技术综述论文: 21种半监督、自监督和无监督学习方法一较高低

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :专知 AI博士笔记系列推荐 ...

  6. 用于半监督高光谱异常检测的Frequency‐to‐spectrum mapping GAN

    基于深度学习的高光谱异常检测算法根据标签的可用性可以大致分为三类:监督学习.半监督学习和无监督学习. 监督学习异常检测方法.数据预处理后,有监督异常检测方法先用训练集数据进行模型训练,再运用验证集进行 ...

  7. 主动学习与半监督算法结合在支付宝风控的应用

    以下内容均来自互联网,系笔者汇总并总结 2018蚂蚁金服ATEC大赛 1 .赛题任务描述 在金融行业中,风控系统与黑产的攻防几乎是无时不刻的存在着,风控系统中用来实时识别风险的机器学习模型需要在黑产攻 ...

  8. 全面解析 Kmeans 聚类算法(Python)

    作者 | 泳鱼 来源 | 算法进阶 一.聚类简介 Clustering (聚类)是常见的unsupervised learning (无监督学习)方法,简单地说就是把相似的数据样本分到一组(簇),聚类 ...

  9. k-means聚类算法从入门到精通

    k-means算法是非监督聚类最常用的一种方法,因其算法简单和很好的适用于大样本数据,广泛应用于不同领域,本文详细总结了k-means聚类算法原理 . 目录 1. k-means聚类算法原理 2. k ...

最新文章

  1. MCU小tips(提高效率)
  2. ITextHtml2canvas js截图 绘制 导出PDF
  3. 【Linux 内核】进程管理 - 进程优先级 ② ( prio 调度优先级 | static_prio 静态优先级 | normal_prio 正常优先级 | rt_priority 实时优先级 )
  4. grads 相关系数_教程合集 | Grads数据处理基础
  5. 【遥感数字图像处理】实验:Erdas 软件的认识与使用
  6. 内容分发网络(CDN) 是什么
  7. DB,Cache和Redis应用场景分析
  8. java安装pydev找不到_为什么安装成功也重启了,但是在window-preferences里找不到PyDev...
  9. ArcSegment对象
  10. mysql安装包配置方式_mysql安装包方式安装及配置(Windows)
  11. matlab信号探测,信号检测与估matlab仿真报告.doc
  12. Android WebView 跳转第三方App
  13. Android Design与Holo Theme详解
  14. mysql加载audit失败_MySQL5.5 安装mcafee mysql-audit插件 不成功
  15. 解决电脑蓝牙耳机默认音量过大的问题
  16. php自动化营销推广引流源码,PHP自动化售货发卡网源码
  17. Markdown设置图片大小
  18. 用计算机软件绘制思维导图和手绘思维导图,原来手绘思维导图的好处这么多,你还在用软件画导图吗?...
  19. 2020 dns排名_2020年最快的dns是多少_动漫台
  20. linux vim 命令无效,Linux vim 命令 command not found vim 命令详解 vim 命令未找到 vim 命令安装 - CommandNotFound ⚡️ 坑否...

热门文章

  1. linux下批处理命令详解,Linux top命令批处理模式讲解
  2. 获取当月第一天第一秒,最后一天最后一秒
  3. java 正则校验姓名_Java常用的正则校验
  4. 橘子学ES16之分词三大组件以及如何自己实现自己的分词器
  5. 京淘项目模块分析:用户登;三级列表展现
  6. 出口商贸易融资工具:出口单据质押贷款
  7. python中的转义字符有哪些_Python中的转义字符
  8. Python中的strftime函数
  9. strptime和strftime函数
  10. java计算机毕业设计网上书城系统源码+系统+数据库+lw文档+mybatis+运行部署