机器学习教程 之 半监督学习 Coreg 协同回归算法 (论文、算法、数据集、代码)

这篇博客介绍的是一篇用于半监督回归问题的方法:Semisupervised Regression with
Cotraining-Style Algorithms
。 这是周志华老师在2007年较早的一篇文章,其特点在于,大多数半监督的算法都是用于分类问题的,而Coreg则以相对较简单的方式实现了半监督的回归。

关于半监督学习

  1. 基于分歧的半监督学习方法
    机器学习教程 之 半监督学习 Tri-training方法 (论文、数据集、代码)
    机器学习教程 之 半监督学习 Co-training 协同训练 (论文、算法、数据集、代码)
    机器学习教程 之 半监督学习 Coreg 协同回归算法 (论文、算法、数据集、代码)
  2. 基于图的半监督学习方法
    DeepLearning | 图注意力网络Graph Attention Network(GAT)论文、模型、代码解析
    DeepLearning | 图卷积神经网络(GCN)解析(论文、算法、代码)
    DeepLearning | 图卷积网络基于拓扑结构的分类(T-GCN)
    机器学习教程 之 半监督学习 基于图正则项的半监督极限学习机

这些博客都提供了算法的讲解和python的代码复现,感兴趣的可以了解一下

一、Co-regression (Coreg) 模型

和 Cotraining 类似,Coreg采用的也是两个学习器相互给无标签数据打标签的方法。不同点在于Coreg针对的是回归问题。

相比于分类问题,该场景下回归问题的难点在于如何挑选置信度较高的伪标签?分类问题很简单,对于一个样本点,如果分类器输出类别的后验概率足够高,那么就可以认为这个预测是准确的,因而可以将该预测设置为无标签数据的伪标签 (详细见 Co-training)。但是对于回归问题而言,回归器是没有后验概率这一说法的,所以Core的主要贡献就在于给出了评估预测可靠程度的方法,从而为无标签数据提供伪标签。

Coreg使用了两个KNN回归器,这两个回归器的不同是通过设定不同的距离度量和近邻数量实现的。对一个回归器对一个无标签样本 x u x_{u} xu 预测的可靠程度的评估,是通过下面的指标来衡量的

在这里插入图片描述
上式中, Ω u \Omega_{u} Ωu 指的是 x u x_{u} xu 在有标签数据集 L L L 中的近邻样本集, h h h表示的是该KNN回归器, h ′ h^{'} h 表示的是将 x u x_{u} xu y u = h ( x u ) y_{u} =h(x_{u}) yu=h(xu) 加入到训练集以后更新得到的回归器。简单来说 δ x u \delta_{x_{u}} δxu 评估的是将该伪标签加入到训练集以后对近邻预测的影响, δ x u \delta_{x_{u}} δxu越大,表示加入该伪标签对于准确率提升的收益越大,那么该伪标签就越有可能是正确的

二、Coreg算法流程

在这里插入图片描述

三、模型python代码

在这里插入图片描述

有问题可以私信博主,点赞关注的一般都会回复,一起努力,谢谢支持。
微信搜索“老和山算法指南”获取下载链接与技术交流群

代码的开头,需要加上注释,这样代码才能正常运行。具体来说,需要在第一行前面加上 # 注释符号,来注释导入 pandas 和 numpy 库的语句。同时,还需要在第 4 行之前加上一个空格,以便让 Python 正确解析代码。此外,还需要将 CoReg 类和 Mean_Squared_Error 类的导入语句改为: from LAMDA_SSL.algorithm.regression.coreg import CoReg from LAMDA_SSL.evaluation.regressor.mean_squared_error import Mean_Squared_Error 这样代码就可以正常运行了。完整代码如下所示: ```python # 导入所需的库 import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn import preprocessing from LAMDA_SSL.algorithm.regression.coreg import CoReg from LAMDA_SSL.evaluation.regressor.mean_squared_error import Mean_Squared_Error # 设置 pandas 显示选项 pd.set_option('display.max_columns', None) # 所有列 pd.set_option('display.max_rows', None) # 所有行 # 读取数据 data = pd.read_excel('半监督数据.xlsx') X = data.drop(columns=['label']) # 特征矩阵 y = data['label'] # 标签列 # 划分数据集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, stratify=None, shuffle=True, random_state=0) # 划分带标签数据集 labeled_size = 0.3 n_labeled = int(labeled_size * len(X_train)) indices = np.arange(len(X_train)) unlabeled_indices = np.delete(indices, y_train.index[:n_labeled]) X_unlabeled = X_train.iloc[unlabeled_indices] y_unlabeled = y_train.iloc[unlabeled_indices] X_labeled = X_train.iloc[y_train.index[:n_labeled]] y_labeled = y_train.iloc[y_train.index[:n_labeled]] # 数据预处理 pre_transform = preprocessing.StandardScaler() pre_transform.fit(np.vstack([X_train, X_test])) X_train = pre_transform.transform(X_train) X_test = pre_transform.transform(X_test) # 构建和训练模型 model = CoReg() model.fit(X=X_train, y=y_labeled, test_datas=X_unlabeled) pred_y = model.predict(X=X_test) # 计算性能指标 performance = Mean_Squared_Error().scoring(y_test, pred_y) ```
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Liangjun_Feng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值