Mam mały korpus i chcę obliczyć dokładność naiwnego klasyfikatora Bayesa przy użyciu 10-krotnego sprawdzania poprawności krzyżowej, jak to zrobić.Jak używać sprawdzania krzyżowego k-krotnego w scikicie z klasyfikatorem naive bayes i NLTK
Odpowiedz
Dostępne opcje to ustawienie samodzielnie lub użycie czegoś podobnego do NLTK-Trainer od NLTK doesn't directly support cross-validation for machine learning algorithms.
Polecam prawdopodobnie użycie innego modułu, aby to zrobić, ale jeśli naprawdę chcesz napisać własny kod, możesz zrobić coś takiego.
Przypuśćmy chcesz 10-krotnie, to musiałby podzielić trening ustawić w 10
podzbiorów, pociągu na 9/10
, test na pozostałej 1/10
, i zrobić to dla każdej kombinacji podzbiorów (10
).
Zakładając, że zestaw szkoleniowy znajduje się w wykazie o nazwie training
, prosta droga do osiągnięcia tego celu byłoby,
num_folds = 10
subset_size = len(training)/num_folds
for i in range(num_folds):
testing_this_round = training[i*subset_size:][:subset_size]
training_this_round = training[:i*subset_size] + training[(i+1)*subset_size:]
# train using training_this_round
# evaluate against testing_this_round
# save accuracy
# find mean accuracy over all rounds
dziękuję Jared za odpowiedź, ale co mogę użyć biblioteki scikit cross_validation.KFold-uczyć się z naiwnym klasyfikatorem Bayes NLTK? – user2284345
Ten wydaje się lepszy niż cross_validation sklearn. –
Dlaczego uważasz, że to jest lepsze niż sklearn? – 12MonthsASlav
Używałem obu bibliotek i NLTK dla naivebayes sklearn do oceny krzyżowej w następujący sposób:
import nltk
from sklearn import cross_validation
training_set = nltk.classify.apply_features(extract_features, documents)
cv = cross_validation.KFold(len(training_set), n_folds=10, indices=True, shuffle=False, random_state=None, k=None)
for traincv, testcv in cv:
classifier = nltk.NaiveBayesClassifier.train(training_set[traincv[0]:traincv[len(traincv)-1]])
print 'accuracy:', nltk.classify.util.accuracy(classifier, training_set[testcv[0]:testcv[len(testcv)-1]])
i na koniec i oblicza średnią dokładność
zmodyfikował drugą odpowiedź:
cv = cross_validation.KFold(len(training_set), n_folds=10, shuffle=True, random_state=None)
Zainspirowany od Jared's answer, tutaj jest wersją pomocą generatora:
def k_fold_generator(X, y, k_fold):
subset_size = len(X)/k_fold # Cast to int if using Python 3
for k in range(k_fold):
X_train = X[:k * subset_size] + X[(k + 1) * subset_size:]
X_valid = X[k * subset_size:][:subset_size]
y_train = y[:k * subset_size] + y[(k + 1) * subset_size:]
y_valid = y[k * subset_size:][:subset_size]
yield X_train, y_train, X_valid, y_valid
jestem przy założeniu, że dane ustawienie X
ma punktów danych N (= 4 w przykładzie) i funkcje D (= 2 w przykładzie). Powiązane etykiety N są przechowywane w y
.
X = [[ 1, 2], [3, 4], [5, 6], [7, 8]]
y = [0, 0, 1, 1]
k_fold = 2
for X_train, y_train, X_valid, y_valid in k_fold_generator(X, y, k_fold):
# Train using X_train and y_train
# Evaluate using X_valid and y_valid
W rzeczywistości nie ma potrzeby wykonywania długich pętli, które są przewidziane w odpowiedzi najbardziej przeczącej. Również wybór klasyfikatora jest nieistotny (może to być dowolny klasyfikator).
Scikit zapewnia cross_val_score, który wykonuje wszystkie pętle pod maską.
- 1. n-gramy z klasyfikatorem Naive Bayes
- 2. Save Naive Bayes Trained Classifier w NLTK
- 3. Błąd Naive Bayes Classifier
- 4. Implementacja Gaussian Naive Bayes
- 5. Klasyfikacja wierszy Naive Bayes
- 6. Implementacja klasyfikatora naive-bayesa w języku NLTK
- 7. scikits learn i nltk: Naive Wynik klasyfikatora Bayesa bardzo różny
- 8. Uzyskaj raport klasyfikacji precyzujący precyzję klasy i odwołanie do wielomianowej Naive Bayes za pomocą 10-krotnego sprawdzania poprawności
- 9. Używanie rzadkich macierzy/uczenia się przez Internet w Naive Bayes (Python, scikit)
- 10. LibSVM: opcja -wi (wybór wagi) podczas sprawdzania krzyżowego i testowania
- 11. Jak wygenerować niestandardowy generator sprawdzania krzyżowego w nauce scikit?
- 12. Klasyfikacja tekstu w python - (oparte na zdaniu NLTK)
- 13. Który klasyfikator do wyboru w NLTK
- 14. Jak korzystać z łączenia krzyżowego w dostępie?
- 15. Próbujesz użyć MEGAM jako NLTK ClassifierBasedPOSTagger?
- 16. Empiryczne Bayes w R
- 17. Jak używać NLTK do generowania zdań z indukowanej gramatyki?
- 18. Jak używać unikatowego sprawdzania poprawności w laravel?
- 19. Jak używać sprawdzania formularza w Drupal 7
- 20. Grails dodająca zależność z "klasyfikatorem" nie działa
- 21. Testowanie klasyfikatora NLTK na określonym pliku
- 22. Jak używać funkcji książki (np. Concoordance) w NLTK?
- 23. Przykładowy kod analizy nastrojów dla języków azjatyckich - Python NLTK
- 24. Naive Bayesian i zero-frequency issue
- 25. niewłaściwy typ modelu dla błędu regresji w 10-krotnym sprawdzaniu poprawności dla Naive Bayes przy użyciu R
- 26. Jak używać sprawdzania poprawności Struts2 do sprawdzania warunkowego?
- 27. Jak używać Hamcrest do sprawdzania elementów mapy
- 28. Modyfikowanie zapytania łączenia krzyżowego
- 29. semantyczna parsowania z NLTK
- 30. NLTK Chunking i chodzenie w drzewku wyników
Nie ma potrzeby pętli, [scikit zapewnia funkcję pomocnika] (http://stackoverflow.com/a/38711253/1090562), który robi wszystko dla ciebie. –