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

2022-10-14  本文已影响0人  superkmi

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

一、 关于半监督学习

  • 从数据中获取标注的成本较大,且有些样本的标注不能通过自动化方式获取。
  • 无标注样本可能很容易获得。

二、标签传播算法

  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

上一篇下一篇

猜你喜欢

热点阅读