2017-08-20 2 views
1

J'essaie d'utiliser NaiveBayesClassifier pour classer les temps passés dans certaines zones de la maison intelligente.Classement Nltk basé sur un seul paramètre

Mes données de formation ressemble à ceci:

[[{'time': '00:00'}, 'IN'], [{'time': '00:01'}, 'IN'], [{'time': '00:02'}, 'OUT'], [{'time': '00:03'}, 'OUT'], [{'time': '00:04'}, 'OUT'], [{'time': '00:05'}, 'OUT'], [{'time': '00:06'}, 'OUT'], ......, [{'time': '08:06'}, 'IN'], [{'time': '08:07'}, 'IN'], [{'time': '08:08'}, 'IN'], ... ] 

Voici mon code:

classifier = nltk.NaiveBayesClassifier.train(training_data) 

start_date = datetime.strptime('2010-11-19 00:00', '%Y-%m-%d %H:%M') 
end_date = datetime.strptime('2010-11-19 23:59', '%Y-%m-%d %H:%M') 

test_data = [] 
while start_date < end_date: 
    test_data.append(dict(time=start_date.strftime('%H:%M'))) 
    start_date += timedelta(0, 60) 

test = classifier.classify_many(test_data) 
print(test) 

Résultat ressemble à ceci:

['OUT', 'OUT', 'OUT', 'OUT', 'OUT', 'OUT', 'OUT', 'OUT', 'OUT',....] 

Je ne me 'IN' en conséquence. Quelqu'un peut-il voir quelque chose de mal avec mon classificateur?

+0

Combien d'observations avez-vous dans l'ensemble d'entraînement et quel est le pourcentage d'IN au total? – MedAli

+0

@MedAli 11,6% sont IN. 21626 observations au total, 2269 sont IN – bla0009

+1

Vous essayez de créer un classificateur dans un ensemble de données déséquilibré, NaiveBayesClassifier n'est pas le meilleur ajustement pour cela. Commencez par consulter ce tutoriel: http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/ – MedAli

Répondre

0

Comme Medali suggéré, le problème est dans mon jeu de données qui a seulement 11% de IN, donc je devais adapter mon jeu de données en fonction: http://machinelearningmastery.com/tactics-to-combat-imbalanced-classes-in-your-machine-learning-dataset/

je changé mon jeu de données, il est donc maintenant avoir seulement à base horaire données (si le capteur a été activé pendant une heure, il est ajouté sous la forme IN).

Ce n'est pas la solution parfaite, mais c'était assez bon pour mon cas.