美文网首页
大师兄的数据分析学习笔记(三十):半监督学习

大师兄的数据分析学习笔记(三十):半监督学习

作者: superkmi | 来源:发表于2022-10-14 19:01 被阅读0次

    大师兄的数据分析学习笔记(二十九):关联
    大师兄的数据分析学习笔记(三十一):机器学习模型总结

    一、 关于半监督学习

    • 半监督学习指的是数据中部分有标注、部分无标注,且通常无标注的部分远大于有标注的部分,主要由以下原因产生:
    • 从数据中获取标注的成本较大,且有些样本的标注不能通过自动化方式获取。
    • 无标注样本可能很容易获得。
    • 半监督学习的目标,就是尝试用数据中有标注的部分,为无标注的部分打上标注。
    • 半监督学习的主要算法思路包括生成思路判别思路

    二、标签传播算法

    • 标签传播算法是典型的半监督学习算法,它的思路如下:
    1. 将没有标注的样本,和周围有标注的样本进行比较;
    2. 如果相似度高,就标注为临近的标注。
    3. 迭代以上的过程,优先标注离有标注样本比较近的无标注样本,然后将新被标过的样本考虑进来。
    • 标签传播算法的相似度有两种判别方法:

    1.rbf:rbf(exp(-\gamma|x-y|^2),\gamma>0),其中x-y代表数据之间的距离,距离越远,算法约接近0。
    2.knn:1[x'\in kNN(x)],在一个无标注数据周围找k个有标注数据,哪种标注多就用哪个赋值。

    三、代码实现

    >>>import numpy as np
    >>>from sklearn import datasets
    >>>from sklearn.semi_supervised import LabelPropagation
    >>>from sklearn.metrics import accuracy_score,recall_score,f1_score
    
    >>>iris = datasets.load_iris()
    >>>target = iris.target
    >>>labels = np.copy(target)
    >>>unlabeld_points = np.random.rand(len(target))<0.1
    >>>prime_labels = labels[unlabeld_points]
    >>>labels[unlabeld_points] = -1
    >>>print(f"unlabeled number:{list(labels).count(-1)}")
    
    >>>label_prop_model = LabelPropagation()
    >>>label_prop_model.fit(iris.data,labels)
    >>>Y_pred = label_prop_model.predict(iris.data)
    >>>Y_pred = Y_pred[unlabeld_points]
    
    >>>print(f"ACC:{accuracy_score(prime_labels,Y_pred)}")
    >>>print(f"REC:{recall_score(prime_labels,Y_pred,average='micro')}")
    >>>print(f"F-Score:{f1_score(prime_labels,Y_pred,average='micro')}")
    unlabeled number:13
    ACC:0.8461538461538461
    REC:0.8461538461538461
    F-Score:0.8461538461538461
    
    

    相关文章

      网友评论

          本文标题:大师兄的数据分析学习笔记(三十):半监督学习

          本文链接:https://www.haomeiwen.com/subject/shjyartx.html