分类有限制

时间:2014-02-16 18:22:54

标签: scikit-learn

我应该如何最好地使用scikit-learn来获得以下带有二元功能的监督分类问题(简化):

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分裂)。

1 个答案:

答案 0 :(得分: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标签不会因为打破平局与其他零概率类而出现。