Наивный байесовский классификатор дает 2 разных ответа для предположительно одного и того же размера выборки? - PullRequest
0 голосов
/ 06 декабря 2018

Я не уверен, в чем разница между этими двумя:

classifier = NaiveBayesClassifier.train(train_d)

d1 = (nltk.classify.accuracy(classifier,train_d[:500]))*100
d2 = (nltk.classify.accuracy(classifier,train_d[:600]))*100
d3 = (nltk.classify.accuracy(classifier,train_d[:700]))*100
d4 = (nltk.classify.accuracy(classifier,train_d[:800]))*100
d5 = (nltk.classify.accuracy(classifier,train_d[:900]))*100
d6 = (nltk.classify.accuracy(classifier,train_d[:1000]))*100
d7 = (nltk.classify.accuracy(classifier,train_d[:1100]))*100
d8 = (nltk.classify.accuracy(classifier,train_d[:1200]))*100
d9 = (nltk.classify.accuracy(classifier,train_d[:1300]))*100
d10 = (nltk.classify.accuracy(classifier,train_d[:1400]))*100
dvd_results = [d1,d2,d3,d4,d5,d6,d7,d8,d9,d10]

df1 = pd.DataFrame(list(zip(sample_sizes,dvd_results)),columns=["Sample Size","Accuracy"])
display(df1)

Что дает мне результаты:

 Sample Size    Accuracy
0   500     99.400000
1   600     99.500000
2   700     99.285714
3   800     99.000000
4   900     99.111111
5   1000    99.100000
6   1100    99.181818
7   1200    99.250000
8   1300    99.153846
9   1400    99.071429

По сравнению с тем, что я думал, было быто же самое:

classifier_d1 = NaiveBayesClassifier.train(train_d[:500])
classifier_d2 = NaiveBayesClassifier.train(train_d[:600])
classifier_d3 = NaiveBayesClassifier.train(train_d[:700])
classifier_d4 = NaiveBayesClassifier.train(train_d[:800])
classifier_d5 = NaiveBayesClassifier.train(train_d[:900])
classifier_d6 = NaiveBayesClassifier.train(train_d[:1000])
classifier_d7 = NaiveBayesClassifier.train(train_d[:1100])
classifier_d8 = NaiveBayesClassifier.train(train_d[:1200])
classifier_d9 = NaiveBayesClassifier.train(train_d[:1300])
classifier_d10 = NaiveBayesClassifier.train(train_d[:1400])
d1 = (nltk.classify.accuracy(classifier_d1,train_d))*100
d2 = (nltk.classify.accuracy(classifier_d2,train_d))*100
d3 = (nltk.classify.accuracy(classifier_d3,train_d))*100
d4 = (nltk.classify.accuracy(classifier_d4,train_d))*100
d5 = (nltk.classify.accuracy(classifier_d5,train_d))*100
d6 = (nltk.classify.accuracy(classifier_d6,train_d))*100
d7 = (nltk.classify.accuracy(classifier_d7,train_d))*100
d8 = (nltk.classify.accuracy(classifier_d8,train_d))*100
d9 = (nltk.classify.accuracy(classifier_d9,train_d))*100
d10 = (nltk.classify.accuracy(classifier_d10,train_d))*100
dvd_results = [d1,d2,d3,d4,d5,d6,d7,d8,d9,d10]

Что дает мне результаты:

Sample Size Accuracy
0   500     50.000000
1   600     50.000000
2   700     50.000000
3   800     60.142857
4   900     88.000000
5   1000    93.500000
6   1100    93.785714
7   1200    96.428571
8   1300    97.428571
9   1400    99.071429

Я, честно говоря, не вижу разницы между двумя кусками кода, так как они оба ужеобученный классификатором, и он просто получает точность там, где кажется, что все портится.Также, если бы кто-то мог указать мне причину, по которой моя точность была бы только 50% для выборок размером 700 и ниже!Отчасти из-за этого я собираюсь предположить, что 1-й блок является правильным способом сделать это, в то время как 2-й блок я только что испортил с классификатором.Увы, я не знаю, почему!

...