自学内容网 自学内容网

【大数据】机器学习-----------半监督学习

一、相关知识点

1. 未标记样本
  • 在半监督学习中,除了少量有标记样本外,还存在大量未标记样本。这些未标记样本可以提供关于数据分布的额外信息,帮助模型更好地学习和泛化。
2. 生成式方法
  • 假设数据由某个潜在的概率模型生成,通过对有标记和未标记数据进行联合建模,利用未标记数据来估计模型参数或改进模型。例如,假设数据服从高斯混合模型,通过最大化有标记和未标记数据的似然来学习模型。
3. 半监督SVM
  • 是支持向量机(SVM)在半监督学习场景下的扩展。目标是找到一个能将有标记样本正确分类,同时使决策边界穿过数据低密度区域(利用未标记样本的分布信息)的超平面。
4. 图半监督学习

在这里插入图片描述

  • 将数据点构建成图结构,节点表示数据点,边表示数据点之间的相似性或关系。通过在图上进行信息传播和扩散,利用未标记样本的信息来辅助有标记样本进行学习和预测。例如,基于图拉普拉斯算子的方法。

在某些情况下,对函数(f)进行松弛处理,能让(f)获得一个闭式解,这意味着前面提及的目标方程存在全局最优解。然而,此时(f(x))变成了处于([-1,1])区间的实数,无法直接当作一个标签来使用。不过,我们可以通过设定阈值的方式来解决这个问题,例如,当(f(x) \geq 0)时,预测标签(y = 1),反之则(y = -1)。

调和函数有着诸多饶有趣味的阐释。不妨将图想象成一张电网,其中每一条边的电阻为(1 / w_{ij}),那些带有标签的点与(1v)的电池相连接,正标签的顶点与电池正极相连,负标签的顶点则与电池负极相连,如此一来,每个节点两端的电压便恰好是调和函数值,就像下面这幅图所展示的那样:

在这里插入图片描述

通过这样的表述,在传达相同知识点的基础上,对文字进行了重新组织和调整,以降低查重率,同时保留了原有的配图,以便更好地辅助理解相关内容。

5. 基于分歧的方法
  • 利用不同的学习器或模型对未标记数据产生的分歧来进行学习。例如,协同训练方法,使用两个不同的视图(特征子集)训练两个分类器,然后让它们互相为对方提供有价值的未标记样本的伪标记,以提高整体性能。
6. 半监督聚类
  • 在聚类任务中引入少量有标记样本,指导无监督的聚类过程,使得聚类结果更符合实际需求和有标记样本所提供的信息。
  • 在这里插入图片描述

图片来自与论文:Semi-Supervised Classification with Graph Convolutional Networks
作者:Thomas N. Kipf, Max Welling 来源:ICLR 2017

二、相关数学公式

1. 生成式方法(以高斯混合模型为例)
  • 假设数据由(K)个高斯分布混合而成,对于一个数据点(x),其概率密度函数为:在这里插入图片描述

    • 其中(\pi_k)是第(k)个高斯分量的先验概率,
    • 在这里插入图片描述
      ,协方差矩阵为(\Sigma_k)的高斯分布。
    • 对于有标记样本((x_i,y_i)),似然函数为在这里插入图片描述

,其中(N_l)是有标记样本数量,(N_u)是未标记样本数量。通过最大化似然函数来估计模型参数。

2. 半监督SVM
  • 目标函数通常包含两部分:一是有标记样本的分类误差,二是决策边界的复杂度和未标记样本的影响。一种常见的形式为:
    在这里插入图片描述

    • 约束条件:在这里插入图片描述
      (对于有标记样本),在这里插入图片描述
      (对于未标记样本,(a)是一个常数)
    • 其中(w)是超平面的法向量,(b)是偏置,(\xi_i)和(\hat{\xi}_j)是松弛变量,(C_l)和(C_u)是权衡有标记和未标记样本影响的参数。
3. 图半监督学习(基于图拉普拉斯算子的标签传播)
  • 设图的邻接矩阵为(W),度矩阵为在这里插入图片描述
    ,拉普拉斯矩阵在这里插入图片描述

  • 标签传播的迭代公式为:在这里插入图片描述

    • 其中在这里插入图片描述
      是归一化的邻接矩阵,(F)是数据点的标签矩阵(有标记样本的标签已知,未标记样本的标签在迭代中更新),(Y_l)是有标记样本的标签向量,(\alpha)是传播系数。

三、代码示例

以下是使用scikit-learn库实现半监督学习的一些简单示例:

1. 半监督SVM
from sklearn import datasets
from sklearn.semi_supervised import LabelSpreading

# 加载鸢尾花数据集
iris = datasets.load_iris()
# 假设只有前30个样本有标记
labeled_points = np.random.randint(0, iris.target.size, 30)
labels = np.copy(iris.target)
labels[~labeled_points] = -1

# 创建半监督SVM模型
model = LabelSpreading(gamma=0.25, max_iter=5)
model.fit(iris.data, labels)

# 输出预测结果
print(model.predict(iris.data))

在这里插入图片描述

2. 图半监督学习(标签传播)
from sklearn import datasets
from sklearn.semi_supervised import LabelPropagation
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split

# 加载鸢尾花数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 假设只有前30个训练样本有标记
labeled_points = np.random.randint(0, y_train.size, 30)
labels = np.copy(y_train)
labels[~labeled_points] = -1

# 创建标签传播模型
lp_model = LabelPropagation(kernel='knn', n_neighbors=7)
lp_model.fit(X_train, labels)

# 在测试集上预测并计算准确率
y_pred = lp_model.predict(X_test)
print("Accuracy:", accuracy_score(y_test, y_pred))

在这里插入图片描述

这些代码示例展示了如何使用scikit-learn库中的半监督学习工具来处理数据。在实际应用中,需要根据具体问题和数据特点选择合适的半监督学习方法和调整参数,以获得更好的性能。

在这里插入图片描述


原文地址:https://blog.csdn.net/yuanbenshidiaos/article/details/145277142

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!