[半监督学习] Semisupervised Regression with Cotraining-Style Algorithms
2022/1/9 23:07:10
本文主要是介绍[半监督学习] Semisupervised Regression with Cotraining-Style Algorithms,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
本文提出一种协同训练型半监督回归算法 COREG. 该算法使用两个回归器, 每个回归器为另一个回归器标记未标记的数据, 其中标记未标记示例的置信度通过该示例标记邻域上的均方误差减少量来估计.
定义 L = { ( x 1 , y 1 ) , … , ( x ∣ L ∣ , y ∣ L ∣ ) } \mathbf{L} = \{(x_1,y_1),\dots,(x_{\vert \mathbf{L}\vert},y_{\vert \mathbf{L}\vert})\} L={(x1,y1),…,(x∣L∣,y∣L∣)} 为标记的示例集合, 其中 x i x_i xi 为由 d d d 属性描述的第 i i i 个示例, y i y_i yi 为数值标签,即期望的实际输出, ∣ L ∣ \vert \mathbf{L} \vert ∣L∣ 为带标签的示例个数. 另外定义 U \mathbf{U} U 为未标记数据集, ∣ U ∣ \vert \mathbf{U} \vert ∣U∣ 为未标记示例的数量.
COREG 既不假设有两个视图, 也不假设使用不同的学习算法. 因此必须从其他渠道寻求回归器的多样性. 在这里, 使用回归器 h 1 h_1 h1 和 h 2 h_2 h2, 都采用 k k k-NN 算法. 这两个 k k k-NN 回归器可以是不同的, 通过用不同的距离度量或不同的 k k k 值来实例化. 在学习过程中, 每个回归器都为另一个回归器标记未标记示例. 使用 k k k-NN 回归器是出于以下考虑: 首先, k k k-NN 算法是一种惰性学习方法, 不需要单独的训练阶段. 其次, 为了选择合适的未标记示例进行标记, 应估计标记置信度. 由于局部平滑的流形假设在回归问题中亦成立, 在 COREG 中, 置信度估计使用了训练示例的邻近属性, 可以很容易地与 k k k-NN 回归器耦合.
为了选择合适的未标记示例进行标记, 应估计标记置信度, 以便可以识别出最自信的标记示例. 与主动学习不同, 在主动学习中, 选定的未标记示例将被传递给专家以询问其真实标签. 因此, 通常会选择学习器最不信任的未标记示例, 因为它对改进学习器最有价值. 而在半监督学习中, 由于没有可以依赖的专家, 因此通常选择学习器最有信心的未标记示例进行标记.
然而, 相比于分类问题,回归问题的难点在于如何挑选置信度较高的伪标签. 估计分类中的标签置信度相对简单, 例如, 朴素贝叶斯分类器返回最大后验概率. 如果分类器输出类别的后验概率足够高, 就可以将该预测设置为无标签数据的伪标签. 但是对于回归问题而言, 没有这样的后验概率可以使用. 回归中可能的预测是无限的. 因此, COREG 的一个关键是估计标注置信度的机制.
置信度标记
最有信心标记的示例应该是使回归器与标记的样本集最一致的示例. the most confidently labeled example should be the one that makes the regressor most consistent with the labeled example set.
- 首先计算标记样本集上回归器的均方误差 M S E b e f o r e MSE_{before} MSEbefore.
- 然后利用 ( x u , y ^ u ) (x_u, \hat{y}_u) (xu,y^u) 计算回归器的均方误差 M S E a f t e r MSE_{after} MSEafter, 其中, x u x_u xu 为未标记的示例, y ^ u \hat{y}_u y^u 为原始回归器生成的标签.
- 计算 Δ u = M S E b e f o r e − M S E a f t e r \Delta_u = MSE_{before} - MSE_{after} Δu=MSEbefore−MSEafter. 注意: Δ u \Delta_u Δu 的数量与未标记示例的个数保持一致.
- 最后, 与 Δ u \Delta_u Δu 最大正相关的 ( x u , y ^ u ) (x_u, \hat{y}_u) (xu,y^u) 可以被视为最自信的标记示例.
由于在每次迭代中, 对整个标记示例集重复计算 k k k-NN 回归器的 MSE 非常耗时, 这时, 对于每个 x u x_u xu, COREG 标记其 k k k 个最近的标记示例, 并使用它们计算 MSE.
令
Ω
u
\Omega_u
Ωu 为
x
u
x_u
xu 在
L
\mathbf{L}
L 里的带标记的
k
k
k 最近邻示例集合. 然后, 通过最大化
δ
x
u
\delta_{x_u}
δxu 来确定标记最可靠的示例
x
‾
\overline{x}
x.
δ
x
u
=
∑
x
i
∈
Ω
u
(
(
y
i
−
h
(
x
i
)
)
2
−
(
y
i
−
h
′
(
x
i
)
)
2
)
\delta_{x_u} = \sum_{x_i \in \Omega_u}((y_i-h(\mathbf{x}_i))^2-(y_i-h'(\mathbf{x}_i))^2)
δxu=xi∈Ωu∑((yi−h(xi))2−(yi−h′(xi))2)
其中 h h h 是原始回归器, h ′ h' h′ 表示利用 ( x u , y ^ u ) (x_u, \hat{y}_u) (xu,y^u), y ^ = h ( x u ) \hat{y}=h(x_u) y^=h(xu) 改进后的回归器.
COREG 算法
函数
k
N
N
(
L
j
,
k
j
,
D
j
)
kNN(L_j, k_j, D_j)
kNN(Lj,kj,Dj) 在标记的示例集
L
j
L_j
Lj上返回一个
k
k
k-NN 回归器, 其
k
k
k 值为
k
j
k_j
kj, 距离度量为
D
j
D_j
Dj. 当达到最大学习迭代次数
T
T
T 时, 或者没有能够减少标记样本集上任何回归器的 MSE 的未标记样本时, 学习过程停止. 根据最初的 Co-training 算法思想, 使用一个小于
U
U
U 的未标记样本池
U
′
U'
U′. 需要注意的是, 在每次迭代中, 由
h
1
h_1
h1 选择的未标记示例将不会由
h
2
h_2
h2 选择, 这是一种额外的机制, 用于鼓励回归器的多样性. 因此, 即使
h
1
h_1
h1 和
h
2
h_2
h2 相似, 它们为彼此标记的示例也将不同.
COREG代码地址
在每次迭代中, COREG 的计算成本主要用于识别示例的邻居. 由于可以预先计算和存储每个已标记训练示例的相邻已标记示例, 实际上, 只需要识别未标记示例的邻居, 然后更新已标记训练示例的邻居. 此外, 许多未标记示例的已识别邻居可以在迭代中重用. 因此, COREG 的计算成本几乎与使用 k k k-NN 回归器预测未标记示例的计算成本相当.
需要注意的是, 在使用两个 k k k-NN 回归器选择和标记未标记的示例后, 可以使用其他类型的回归器而不仅仅是 k k k-NN 回归器进行预测. 例如, 假设我们使用线性回归, 在使用两个 k k k-NN 回归器对未标记样本进行选择和标记后, 我们得到了两个已扩充标记的训练集. 在每个训练集上, 我们可以训练一个线性回归器, 然后, 对这两个线性回归的预测进行平均, 作为最终预测.
分析
分析 COREG 的学习过程是否可以使用未标记的示例来改进回归估计.
在 COREG 的每次学习迭代中, 对于每个未标记的示例
x
u
x_u
xu, 其
k
k
k 最近邻的标记示例被放入集合
Ω
u
\Omega_u
Ωu. 如前所述, 新标记的示例应使回归器与标记的数据集更加一致. 因此, 可以使用下面式子来评估
x
u
x_u
xu 是否有用:
Δ
u
=
1
∣
L
∣
∑
x
i
∈
L
(
y
i
−
h
(
x
i
)
)
2
−
1
∣
L
∣
∑
x
i
∈
L
(
y
i
−
h
′
(
x
i
)
)
2
\Delta_u=\frac{1}{\vert L\vert} \sum_{x_i \in L} (y_i-h(x_i))^2-\frac{1}{\vert L\vert} \sum_{x_i \in L} (y_i-h'(x_i))^2
Δu=∣L∣1xi∈L∑(yi−h(xi))2−∣L∣1xi∈L∑(yi−h′(xi))2
其中
h
h
h 是原始回归器,
h
′
h'
h′ 表示利用
(
x
u
,
y
^
u
)
(x_u, \hat{y}_u)
(xu,y^u) 改进后的回归器. 如果
Δ
u
\Delta_u
Δu 的值为正, 则利用
(
x
u
,
y
^
u
)
(x_u, \hat{y}_u)
(xu,y^u) 是有益的. 在 COREG 算法中, 选择最大化
δ
u
\delta_u
δu 值的未标记示例进行标记. 因此, 问题是根据最大化
δ
u
\delta_u
δu 值选择的未标记示例是否可以使得
Δ
u
\Delta_u
Δu 的值为正.
首先, 假设
(
x
u
,
y
^
u
)
(x_u, \hat{y}_u)
(xu,y^u) 是
Ω
u
\Omega_u
Ωu 中某些示例的
k
k
k 近邻之一, 而不是
L
L
L 中任何其他示例的
k
k
k近邻之一. 在这种情况下, 显然利用
(
x
u
,
y
^
u
)
(x_u, \hat{y}_u)
(xu,y^u) 只会改变
Ω
u
\Omega_u
Ωu 中的回归估计. 因此, 上面的式子变为:
Δ
u
=
1
k
∑
x
i
∈
L
(
y
i
−
h
(
x
i
)
)
2
−
1
k
∑
x
i
∈
L
(
y
i
−
h
′
(
x
i
)
)
2
\Delta_u=\frac{1}{k} \sum_{x_i \in L} (y_i-h(x_i))^2-\frac{1}{k} \sum_{x_i \in L} (y_i-h'(x_i))^2
Δu=k1xi∈L∑(yi−h(xi))2−k1xi∈L∑(yi−h′(xi))2
…
这篇关于[半监督学习] Semisupervised Regression with Cotraining-Style Algorithms的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-24MongoDB资料:新手入门完全指南
- 2024-12-20go-zero 框架的 RPC 服务 启动start和停止 底层是怎么实现的?-icode9专业技术文章分享
- 2024-12-19Go-Zero 框架的 RPC 服务启动和停止的基本机制和过程是怎么实现的?-icode9专业技术文章分享
- 2024-12-18怎么在golang中使用gRPC测试mock数据?-icode9专业技术文章分享
- 2024-12-15掌握PageRank算法核心!你离Google优化高手只差一步!
- 2024-12-15GORM 中的标签 gorm:"index"是什么?-icode9专业技术文章分享
- 2024-12-11怎么在 Go 语言中获取 Open vSwitch (OVS) 的桥接信息(Bridge)?-icode9专业技术文章分享
- 2024-12-11怎么用Go 语言的库来与 Open vSwitch 进行交互?-icode9专业技术文章分享
- 2024-12-11怎么在 go-zero 项目中发送阿里云短信?-icode9专业技术文章分享
- 2024-12-11怎么使用阿里云 Go SDK (alibaba-cloud-sdk-go) 发送短信?-icode9专业技术文章分享