Semi-supervised Learning

本文介绍半监督学习中的两种方法:self-training与active learning。当标注数据稀缺时,这两种方法能够有效利用未标注数据提高模型准确性。self-training通过迭代地将模型最自信的预测结果加入到标注集中来增强模型;而active learning则选择模型最不确定的数据进行人工标注。

简单聊一下Semi-supervised Learning(SSL)分类时, 两个可用的方法: self-training与active learning.
当我们有标注的样本很少时, 训练的模型会不够准确. 这时我们可以尝试利用一下无标注的样本.

Self-training

  1. 用Labeled set训练模型.
  2. 用模型预测Unlabeled set.
    将预测结果中置信度最大的一个instance从Unlabeled set移动到Labeled set. 其label当然就是预测的这个结果.
  3. Goto 1 直到所有instance都移动到Labeled set中.

Active learning

  1. 用Labeled set训练模型.
  2. 用模型预测Unlabeled set.
    从预测结果中, 选取最不确信的一个(批), 拿来人工标注. 并移动到Labeled set中.
  3. Goto 1 直到所有instance都移动到Labeled set中.

其中第2步, 如何选择一批合适的instance来标注呢? 选最不确信(决策边界附近)的instance是一个方法. 同时也有很多其他方法, 比如训练多个模型, 选多个模型分歧最大的instance; 选取能使模型变化最大(或loss下降最多)的instance等. 详细总结可见Wikipedia.


参考资料:
Wikipedia: Active learning

半监督学习结合了少量有标签数据和大量无标签数据来进行模型训练,在预测变形关系方面可按以下方式进行: #### 数据准备 收集与变形关系相关的数据,将其分为有标签数据和无标签数据。有标签数据包含明确的变形关系信息,例如在材料科学中,有标签数据可能是已知材料在特定条件下的变形结果和对应条件;无标签数据则是缺乏明确变形关系标注的数据。 #### 选择半监督学习算法 - **自训练(Self - training)**:首先使用有标签数据训练一个初始模型,然后用该模型对无标签数据进行预测,将置信度高的预测结果作为伪标签添加到有标签数据集中,重新训练模型,不断迭代这个过程。例如在Python中可以使用Scikit - learn库结合自定义代码实现: ```python import numpy as np from sklearn.linear_model import LogisticRegression # 有标签数据 X_labeled = np.array([[1, 2], [2, 3], [3, 4]]) y_labeled = np.array([0, 1, 0]) # 无标签数据 X_unlabeled = np.array([[4, 5], [5, 6]]) # 初始模型训练 model = LogisticRegression() model.fit(X_labeled, y_labeled) # 自训练迭代 for _ in range(3): # 对无标签数据预测 probabilities = model.predict_proba(X_unlabeled) high_confidence_indices = np.max(probabilities, axis = 1) > 0.9 pseudo_labels = model.predict(X_unlabeled[high_confidence_indices]) # 添加伪标签到有标签数据 X_labeled = np.vstack((X_labeled, X_unlabeled[high_confidence_indices])) y_labeled = np.hstack((y_labeled, pseudo_labels)) # 重新训练模型 model.fit(X_labeled, y_labeled) ``` - **标签传播(Label Propagation)**:该算法基于图的思想,将数据点视为图中的节点,节点之间的边表示数据点之间的相似度。标签从有标签节点传播到无标签节点。在Scikit - learn中可以直接使用`LabelPropagation`类: ```python from sklearn.semi_supervised import LabelPropagation import numpy as np # 有标签数据 X_labeled = np.array([[1, 2], [2, 3], [3, 4]]) y_labeled = np.array([0, 1, 0]) # 无标签数据 X_unlabeled = np.array([[4, 5], [5, 6]]) y_unlabeled = np.full(len(X_unlabeled), -1) # 合并数据 X = np.vstack((X_labeled, X_unlabeled)) y = np.hstack((y_labeled, y_unlabeled)) # 标签传播模型训练 label_propagation = LabelPropagation() label_propagation.fit(X, y) # 预测变形关系 predictions = label_propagation.predict(X_unlabeled) ``` #### 模型评估与优化 使用交叉验证等方法对训练好的模型进行评估,根据评估结果调整模型的参数,如自训练中的置信度阈值、标签传播中的相似度度量方法等,以提高模型预测变形关系的准确性。 #### 预测变形关系 使用优化后的模型对新的数据进行预测,得到变形关系的预测结果。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值