sklearn 使用軟標籤進行多標籤、多分類訓練的一種實現方法

目標場景

Multilabel classifcation in sklearn with soft (fuzzy) labels。
在sklearn中,使用軟標籤(one-hot標籤:(1,0,0),軟標籤:(0.8,0.2,0))進行多標籤分類問題。

解決方案

神經網絡的訓練方式(例如使用交叉熵作爲損失函數時)是直接支持使用軟標籤訓練的。
對於sklearn中的部分基礎機器學習分類模型,無法直接支持軟標籤訓練。
一個解決方案是,轉化爲迴歸問題解決,結合sklearn中MultiOutputRegressor 類。

樣例代碼

import numpy as np
from sklearn.ensemble import RandomForestRegressor
from sklearn.multioutput import MultiOutputRegressor
# 100 個樣本 , 50個特徵 , 5個標籤
X_train = np.random.random((100,50))
y_train = np.random.random((100,5))

max_depth = 30
regr_multirf = MultiOutputRegressor(RandomForestRegressor(n_estimators=100,
                                                          max_depth=max_depth,
                                                          random_state=0))
regr_multirf.fit(X_train, y_train)
# 10個測試樣本
X_test = np.random.random((10,50))
X_test_predict=regr_multirf.predict(X_test)

說明

測試環境:sklearn 0.22.2 python 3.6
這種方案只是目前測試的一個可能方案,有不妥之處或者有其他解決方案歡迎指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章