大師兄的數(shù)據(jù)分析學(xué)習(xí)筆記(二十九):關(guān)聯(lián)
大師兄的數(shù)據(jù)分析學(xué)習(xí)筆記(三十一):機(jī)器學(xué)習(xí)模型總結(jié)
一舱沧、 關(guān)于半監(jiān)督學(xué)習(xí)
- 半監(jiān)督學(xué)習(xí)指的是數(shù)據(jù)中部分有標(biāo)注稚字、部分無標(biāo)注,且通常無標(biāo)注的部分遠(yuǎn)大于有標(biāo)注的部分驾诈,主要由以下原因產(chǎn)生:
- 從數(shù)據(jù)中獲取標(biāo)注的成本較大帮孔,且有些樣本的標(biāo)注不能通過自動化方式獲取祭务。
- 無標(biāo)注樣本可能很容易獲得中狂。
- 半監(jiān)督學(xué)習(xí)的目標(biāo),就是嘗試用數(shù)據(jù)中有標(biāo)注的部分,為無標(biāo)注的部分打上標(biāo)注有送。
- 半監(jiān)督學(xué)習(xí)的主要算法思路包括生成思路和判別思路淌喻。
二、標(biāo)簽傳播算法
-
標(biāo)簽傳播算法是典型的半監(jiān)督學(xué)習(xí)算法雀摘,它的思路如下:
- 將沒有標(biāo)注的樣本裸删,和周圍有標(biāo)注的樣本進(jìn)行比較;
- 如果相似度高,就標(biāo)注為臨近的標(biāo)注阵赠。
- 迭代以上的過程涯塔,優(yōu)先標(biāo)注離有標(biāo)注樣本比較近的無標(biāo)注樣本,然后將新被標(biāo)過的樣本考慮進(jìn)來清蚀。
- 標(biāo)簽傳播算法的相似度有兩種判別方法:
1.rbf:
匕荸,其中
代表數(shù)據(jù)之間的距離,距離越遠(yuǎn)枷邪,算法約接近0榛搔。
2.knn:,在一個無標(biāo)注數(shù)據(jù)周圍找k個有標(biāo)注數(shù)據(jù)东揣,哪種標(biāo)注多就用哪個賦值践惑。
三、代碼實(shí)現(xiàn)
>>>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