Advertisement

半监督—标签传播算法

阅读量:

半监督学习:样本集部分有标注,部分无标注(常远大于有标注样本)

标签传播算法(LabelPropagation):物以类聚的思想,把没有标注的样本和有标注的样本进行比较,相似度高的标为同标注,会优先标注离有标注近的无标注样本,然后再进行传播。要求未标注样本的标注值是-1。

以Iris数据集(山鸢花)为例

复制代码
 import numpy as np

    
 from sklearn import datasets
    
 #引入datasets中提供的iris数据集,分data和target两部分
    
 iris=datasets.load_iris()
    
 print(iris)
    
 labels=np.copy(iris.target) #获取标注,修改标注时,保证原始数据不发生变化
    
 print(len(labels))
    
 random_unlabeled_points=np.random.rand(len(iris.target))#随机生成len(iris.target)个0~1的数
    
 random_unlabeled_points=random_unlabeled_points<0.3#小于0.3的返回1,大于等于0.3返回0
    
 #重置标签
    
 Y=labels[random_unlabeled_points]
    
 labels[random_unlabeled_points]=-1#把labels中对应于random_unlabeled_points是1的数换为-1
    
 print("Unlabeled Number:",list(labels).count(-1))
    
 print(labels)
    
 from sklearn.semi_supervised import LabelPropagation#从半监督学习中引入标签传播算法
    
 label_prop_model=LabelPropagation()
    
 label_prop_model.fit(iris.data,labels)
    
 Y_pred=label_prop_model.predict(iris.data)
    
 Y_pred=Y_pred[random_unlabeled_points] #原来被标注为-1的
    
 from sklearn.metrics import accuracy_score,recall_score,f1_score
    
 print("ACC:",accuracy_score(Y,Y_pred))
    
 print("REC:",recall_score(Y,Y_pred,average="micro"))
    
 #因为Y不是二分类变量,所以average不能选择默认的binary
    
 print("F-score:",f1_score(Y,Y_pred,average="micro"))

全部评论 (0)

还没有任何评论哟~