Я делаю некоторую работу по классификации пола для класса. Я использовал SVMLight с приличными результатами, но я хотел также попробовать некоторые байесовские методы на своих данных. Мой набор данных состоит из текстовых данных, и я сделал сокращение функций, чтобы сократить пространство функций до более разумного размера для некоторых байесовских методов. Все экземпляры запускаются через tf-idf, а затем нормализуются (через мой собственный код).
Я взял набор инструментов sklearn, потому что его было легко интегрировать с моей текущей кодовой базой, но результаты, которые я получаю от GaussianNB, относятся к одному классу (-1 в данном случае), и все прогнозируемые вероятности равны [nan].
Я вставил соответствующий код; Я не знаю, достаточно ли этого для продолжения, но я надеюсь, что я просто упускаю из виду что-то очевидное при использовании sklearn api. У меня есть пара разных наборов функций, которые я пробовал использовать, также с теми же результатами. То же самое с использованием обучающего набора и перекрестной проверки. Есть предположения? Может быть, мое пространство функций слишком мало для того, чтобы это работало? У меня 300 с лишним экземпляров, большинство из которых имеют несколько сотен ненулевых функций.
class GNBLearner(BaseLearner):
def __init__(self, featureCount):
self.gnb = GaussianNB()
self.featureCount = featureCount
def train(self, instances, params):
X = np.zeros( (len(instances), self.featureCount) )
Y = [0]*len(instances)
for i, inst in enumerate(instances):
for idx,val in inst.data:
X[i,idx-1] = val
Y[i] = inst.c
self.gnb.fit(X, Y)
def test(self, instances, params):
X = np.zeros( (len(instances), self.featureCount) )
for i, inst in enumerate(instances):
for idx,val in inst.data:
X[i,idx-1] = val
return self.gnb.predict(X)
def conf_mtx(self, res, test_set):
conf = [[0,0],[0,0]]
for r, x in xzip(res, test_set):
print "pred: %d, act: %d" % (r, x.c)
conf[(x.c+1)/2][(r+1)/2] += 1
return conf
GaussianNB
подходит? Являются ли ваши характеристики (примерно) гауссианами, то есть нормально распределенными? - person Fred Foo   schedule 26.04.2013