多標簽分類及多輸出分類


1、多標簽分類

有些情況,會想讓你的分類器給一個樣例輸出多個類別。比如思考一個人臉識別器,並識別出這個是誰。這就需要對於同一張圖片,首先識別出有幾個人,並給識別出的人貼上標簽。這就是多個二值標簽的分類系統被叫做多標簽分類系統。

現在,我們打算使用MNIST數據做一個是否為大數字(大於6)、是否為奇數的多標簽分類。

from sklearn.neighbors import KNeighborsClassifier
knn_clf = KNeighborsClassifier()
y_train_large = (y_train>=7)
y_train_odd = (y_train % 2 == 1)
y_multilabel = np.c_[y_train_large,y_train_odd]
knn_clf.fit(X_train,y_multilabel)

knn_clf.predict([some_digit])

 

 

 數字5不是大數(False)但是一個奇數(True)

有許多方法去評估一個多標簽分類器,和選擇正確的量度標准,這取決於你的項目。舉個例子,一個方法是對每個個體標簽去量度 F1 值(或者前面討論過的其他任意的二分類器的量度標准),然后計算平均值。下面的代碼計算全部標簽的平均 F1 值:

y_train_knn_pred = cross_val_predict(knn_clf,X_train,y_train,cv=3)
f1_score(y_train,y_train_knn_pred,average='macro')

 

 

 上面假設所有標簽有着同等的重要性,但可能不是這樣。如果想讓某個標簽具有更大的權重,一個簡單的做法就是給每一個標簽的權重等於他的支持度(比如,那個標簽的樣例的數目)。為了做到這點,可簡單的在上面代碼中設置average= “weighted”

2、多輸出分類

分類任務“多輸出-多類分類”(或者稱為多輸出分類)。它是多標簽分類的簡單泛化,在這里每一個標簽可以是多類別的(比如說,可以有多個可能值)

我們將建立一個系統,它可以去除圖片中的噪音。它將有一張混有噪音的圖片作為輸入,期待他能夠輸出一個干凈的數字圖片,用一個像素強度的數組表示,注意這個分類器的輸出是多標簽的(一個像素一個標簽)和每個標簽可以偶多個值(像素強度取值范圍從0到255)。所以他是一個多輸出分類系統

從MNIST的圖片創建訓練集和測試集開始,然后給圖片的像素強度添加噪聲。目標圖像是原始圖像

noise =np.random.randint(0,100,(len(X_train),784))
X_train_mod = X_train + noise
noise = np.random.randint(0,100,(len(X_test),784))
X_test_mod = X_test + noise
y_train_mod = X_train
y_test_mod = X_test
some_index = 5500
plt.subplot(121);plot_digit(X_test_mod[some_index])
plt.subplot(122);plot_digit(y_test_mod[some_index])
plt.show()

knn_clf.fit(X_train_mod, y_train_mod)
clean_digit = knn_clf.predict([X_test_mod[some_index]])
plot_digit(clean_digit)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM