Наивный-байесовский и мультиклассовый классификаторы возвращают целые числа. Команда данных говорит, что они должны быть вероятностями - PullRequest
0 голосов
/ 03 июня 2019

У меня есть набор данных со 100 столбцами, разделенными на наборы для обучения и тестирования, 40000 и 10000 строк соответственно. Моя задача состояла в том, чтобы обучить и протестировать два классификатора и сообщить о результатах, предоставив CSV-файлы с прогнозами для целевой переменной (0 или 1). Моя проблема в том, что мои модели возвращают целые числа, а директор отклонил мой ответ, сказав, что числа должны быть вероятностями, а не целыми числами.

Я очистил тренировочный и тестовый наборы, назвав тренировочный набор goodtrain и тестовый набор goodtest. Затем я запустил SelectKBest на goodtrain, чтобы взять 10 лучших функций, а затем использовал train_test_split для дальнейшего разделения goodtrain на подмножества поездов и тестов. Затем я обучил модель, используя наивный байесовский метод и мультиклассовую классификацию, и протестировал ее на подмножестве тестов. После того, как классификаторы были обучены, я использовал их наилучшим образом и сохранил результаты в виде файлов CSV.

# Naive Bayes, with and without 5-fold cross-validation

# Create a Naive Bayes object
gnb = GaussianNB()

# Train the classifer and form a predictive model
modelNB = gnb.fit(trainX, trainY.values.ravel())
predNB = modelNB.predict(testX)

# Test the model and report the accuracy score
print("Naive-Bayes accuracy: ", round(accuracy_score(testY, predNB, normalize=True)*100, 2), "\b%")

# With 5-fold cross-validation
scoreNBcv05 = cross_val_score(modelNB, trainX, trainY.values.ravel(), cv=5)
print("Cross-validated Naive Bayes accuracy, 5 folds: ", round(scoreNBcv05.mean()*100,2), "\b%")

Точность наивного Байеса: 79,92% Перекрестная проверка наивной байесовской точности, 5 крат: 79,52%

# Multi-classification model with logistic regression

# Create a LR object
lr = linear_model.LogisticRegression()

# Train the algorithm and form a predictive model
modelLR = lr.fit(trainX, trainY.values.ravel()) 
predLR = modelLR.predict(testX)

# Test the model and report accuracy score
print("Multi-classification with Logistic Regression accuracy: ", round(accuracy_score(testY, predLR, normalize=True)*100, 2), "\b%")

# 5 fold cross-validation:
scoreLRcv05 = cross_val_score(modelLR, trainX, trainY.values.ravel(), cv=5)
print("Cross-validated Multi-class with Logistic Regression accuracy, 5 folds: ", round(scoreLRcv05.mean()*100,2), "\b%")

Мульти-классификация с точностью логистической регрессии: 80,1% Перекрестная проверка мультикласса с точностью логистической регрессии, 5 крат: 79,59%

# Generate prediction for original test set using Naive Bayes

# Train the classifer and form a predictive model
modelNB = gnb.fit(trainX, trainY)
results1 = modelNB.predict(goodtest)

# Save the results as results1.csv
np.savetxt("results1.csv", results1, delimiter=",")
# Generate prediction for original test set using multi-class logistic regression

# Train the algorithm and form a predictive model
modelLR = lr.fit(trainX, trainY) 
results2 = modelLR.predict(goodtest)

# Save the results as results2.csv
np.savetxt("results2.csv", results2.astype(int), delimiter=",")

Я не получил ошибку, но модели предсказывали одиночные столбцы 0 и 1, которые, по словам принципала, были неверными. Я понимаю, что этот вопрос показывает отсутствие понимания того, как работают эти классификаторы, но я был бы признателен за понимание того, что я пропускаю.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...