На основе моих исследований, что влияет на такую разницу в точности:
- Эффекты предварительной обработки данных и обработки пропущенных значений. (В моем наборе данных нет пропущенных значений)
- GaussianNB использует параметр сглаживания. Они назвали его «эпсилон». (Я унаследовал класс GaussianNB и изменил метод таким образом, чтобы он не использовал параметр сглаживания)
- Выбросы могут изменить мою дисперсию и среднее значение.
Scikit-learn использует логарифмическую вероятность вместо обычной вероятности. (Моя реализация также использует логарифмическую вероятность)
< pre class="lang-py Prettyprint-override">
Код: Выделить всё
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
my_custom_model = MyCustomNaiveBayes()
my_custom_model.fit(X_train, y_train)
my_custom_model_y_hat = my_custom_model.predict(X_test)
print(f"accuracy score of my_custom model is: {accuracy_score(y_test, my_custom_model_y_hat)}")
sklearn_nb = GaussianNB()
sklearn_nb.fit(X_train, y_train)
sklearn_y_hat = sklearn_nb.predict(X_test)
print(f"accuracy score of sklearn_nb model is: {accuracy_score(y_test, sklearn_y_hat)}")
modified_sklearn_nb = ModifiedGaussianNB()
modified_sklearn_nb.fit(X_train, y_train)
modified_sklearn_nb_y_hat = sklearn_nb.predict(X_test)
print(f"accuracy score of sklearn_nb model is: {accuracy_score(y_test, modified_sklearn_nb_y_hat)}")
Код: Выделить всё
accuracy score of my_custom model is: 0.7980456026058632
accuracy score of sklearn_nb model is: 0.8208469055374593
accuracy score of sklearn_nb model is: 0.8208469055374593
Я отключил переменную эпсилон , однако это не помогло.
Я отключил метод взвешенного среднего и дисперсии, однако эффекта это не дало.
Подробнее здесь: https://stackoverflow.com/questions/784 ... me-score-c