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

[大师兄的数据分析学习笔记(二十九):关联](https://www.jianshu.com/p/8474408c7276) [大师兄的数据分析学习笔记(三十一):机器学习模型总结](https://www.jianshu.com/p/2c491add6a49) ##一、 关于半监督学习 - **半监督学习**指的是数据中部分有标注、部分无标注,且通常无标注的部分远大于有标注的部分,主要由以下原因产生: > - 从数据中获取标注的成本较大,且有些样本的标注不能通过自动化方式获取。 > - 无标注样本可能很容易获得。 - **半监督学习**的目标,就是尝试用数据中有标注的部分,为无标注的部分打上标注。 - **半监督学习**的主要算法思路包括**生成思路**和**判别思路**。 ##二、标签传播算法 - **标签传播算法**是典型的**半监督学习**算法,它的思路如下: ![](https://upload-images.jianshu.io/upload_images/19742364-38c8fcdbef2538a7.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) > 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 ```

你可能感兴趣的:(大师兄的数据分析学习笔记(三十):半监督学习)