大师兄的数据分析学习笔记(三十):半监督学习
2022-10-14 本文已影响0人
superkmi
大师兄的数据分析学习笔记(二十九):关联
大师兄的数据分析学习笔记(三十一):机器学习模型总结
一、 关于半监督学习
- 半监督学习指的是数据中部分有标注、部分无标注,且通常无标注的部分远大于有标注的部分,主要由以下原因产生:
- 从数据中获取标注的成本较大,且有些样本的标注不能通过自动化方式获取。
- 无标注样本可能很容易获得。
- 半监督学习的目标,就是尝试用数据中有标注的部分,为无标注的部分打上标注。
- 半监督学习的主要算法思路包括生成思路和判别思路。
二、标签传播算法
-
标签传播算法是典型的半监督学习算法,它的思路如下:
- 将没有标注的样本,和周围有标注的样本进行比较;
- 如果相似度高,就标注为临近的标注。
- 迭代以上的过程,优先标注离有标注样本比较近的无标注样本,然后将新被标过的样本考虑进来。
- 标签传播算法的相似度有两种判别方法:
1.rbf:,其中代表数据之间的距离,距离越远,算法约接近0。
2.knn:,在一个无标注数据周围找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