2014-02-16 46 views
1

我應該如何最好地利用scikit學習以下監督分類問題(簡體),二進制特點:分類與限制

import numpy as np 
from sklearn.tree import DecisionTreeClassifier 

train_data = np.array([[0, 0, 1, 0], 
         [1, 0, 1, 1], 
         [0, 1, 1, 1]], dtype=bool) 
train_targets = np.array([0, 1, 2]) 

c = DecisionTreeClassifier() 
c.fit(train_data, train_targets) 

p = c.predict(np.array([1, 1, 1, 1], dtype=bool)) 
print(p) 
# -> [1] 

這工作正常。但是,現在假設我已知先驗信息,即特徵0的存在不包括第1類。這種附加信息是否可以很容易地包含在分類過程中?

目前,我只是做一些(問題特定和啓發式)後處理來調整結果類。我也許也可以根據特徵手動預處理並將數據集分成兩部分,並分別訓練兩個分類器(但是有K個這樣的特徵,這最終以2^K分割)。

回答

0

此類附加信息是否可以輕鬆納入分類過程?

特定於域的黑客留給用戶。要做到這一點,最簡單的方法是預測概率...

>>> prob = c.predict_proba(X) 

然後鑽取概率以獲得正確的課程。

>>> invalid = (prob[:, 1] == 1) & (X[:, 0] == 1) 
>>> prob[invalid, 1] = -np.inf 
>>> pred = c.classes_[np.argmax(prob, axis=1)] 

這是-np.inf而不是0所以1標籤不上來如領帶破與其他零概率類的結果。