半监督学习:综合利用有类标的数据和没有类标的数据,来生成合适的分类函数。它是一类可以自动地利用未标记的数据来提升学习性能的算法

1、生成式半监督学习

  优点:方法简单,容易实现。通常在有标记数据极少时,生成式半监督学习方法比其他方法性能更好

  缺点:假设的生成式模型必须与真实数据分布吻合。如果不吻合则可能效果很差。而如何给出与真实数据分布吻合的生成式模型,这就需要对问题领域的充分了解

2、图半监督学习

(1)标记传播算法:

  优点:概念清晰

  缺点:存储开销大,难以直接处理大规模数据;而且对于新的样本加入,需要对原图重构并进行标记传播

(2)迭代式标记传播算法:

  输入:有标记样本集Dl,未标记样本集Du,构图参数δ,折中参数α

  输出:未标记样本的预测结果y

  步骤:

    1)计算W

    2)基于W构造标记传播矩阵S

    3)根据公式初始化F<0>

    4)t=0

    5)迭代,迭代终止条件是F收敛至F*

      F<t+1>=αSF<t>+(1-α)Y

      t=t+1

    6)构造未标记样本的预测结果yi

    7)输出结果y

  LabelPropagation实验代码:

 1 import numpy as np
 2 import matplotlib.pyplot as plt
 3 from sklearn import metrics
 4 from sklearn import datasets
 5 from sklearn.semi_supervised import LabelPropagation
 6 
 7 def load_data():
 8     digits=datasets.load_digits()
 9     rng=np.random.RandomState(0)
10     index=np.arange(len(digits.data))
11     rng.shuffle(index)
12     X=digits.data[index]
13     Y=digits.target[index]
14     n_labeled_points=int(len(Y)/10)
15     unlabeled_index=np.arange(len(Y))[n_labeled_points:]
16 
17     return X,Y,unlabeled_index
18 
19 def test_LabelPropagation(*data):
20     X,Y,unlabeled_index=data
21     Y_train=np.copy(Y)
22     Y_train[unlabeled_index]=-1
23     cls=LabelPropagation(max_iter=100,kernel='rbf',gamma=0.1)
24     cls.fit(X,Y_train)
25     print("Accuracy:%f"%cls.score(X[unlabeled_index],Y[unlabeled_index]))
26 
27 X,Y,unlabeled_index=load_data()
28 test_LabelPropagation(X,Y,unlabeled_index)

View Code