Я занимаюсь определением гендерной классификации для класса. Я использую SVMLight с достойными результатами, но я тоже хотел попробовать некоторые байесовские методы для своих данных. Мой набор данных состоит из текстовых данных, и я сделал сокращение функций, чтобы уменьшить пространство функций до более разумного размера для некоторых байесовских методов. Все экземпляры запускаются через tf-idf, а затем нормализуются (через мой собственный код).sklearn GaussianNB - плохие результаты, [nan] вероятности
Я схватил инструментарий sklearn, потому что он легко интегрировался с моей текущей кодовой базой, но результаты, которые я получаю от GaussianNB, представляют собой один класс (в данном случае -1), а предсказанные вероятности - все [ нан].
Я вставил некоторый соответствующий код; Я не знаю, достаточно ли этого, чтобы продолжать, но я надеюсь, что я просто упускаю из виду что-то очевидное в использовании 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' подходит? Являются ли ваши функции (грубо говоря) гауссианцами, то есть нормально распределены? –
Хороший вопрос. На самом деле я не уверен, какое влияние имеет tf-idf и нормализация на дистрибутив, но это, вполне возможно, не гауссово. Я честно просто схватил это из инструментария, потому что он обрабатывает непрерывные функции, поэтому он может быть плохим выбором для данных. Я все еще не уверен, объясняет ли это результаты, которые я получаю или нет. – flatline
Я пропустил тот факт, что они являются векторами tf-idf. Я подниму ответ. –