Мультиклассовая классификация и вероятностный прогноз - PullRequest
0 голосов
/ 02 мая 2018
import pandas as pd
import numpy
from sklearn import cross_validation
from sklearn.naive_bayes import GaussianNB

fi = "df.csv"
# Open the file for reading and read in data
file_handler = open(fi, "r")
data = pd.read_csv(file_handler, sep=",")
file_handler.close()

# split the data into training and test data
train, test = cross_validation.train_test_split(data,test_size=0.6, random_state=0)
# initialise Gaussian Naive Bayes
naive_b = GaussianNB()


train_features = train.ix[:,0:127]
train_label = train.iloc[:,127]

test_features = test.ix[:,0:127]
test_label = test.iloc[:,127]

naive_b.fit(train_features, train_label)
test_data = pd.concat([test_features, test_label], axis=1)
test_data["p_malw"] = naive_b.predict_proba(test_features)

print "test_data\n",test_data["p_malw"]
print "Accuracy:", naive_b.score(test_features,test_label)

Я написал этот код, чтобы принимать входные данные из файла CSV со 128 столбцами, где 127 столбцов являются объектами, а 128-й столбец является меткой класса.

Я хочу предсказать вероятность того, что выборка принадлежит каждому классу (существует 5 классов (1-5)), распечатать ее для матрицы и определить класс выборки на основе прогноза. Предсказание_пробы () не дает желаемого результата. Пожалуйста, предложите необходимые изменения.

1 Ответ

0 голосов
/ 02 мая 2018

GaussianNB.predict_proba возвращает вероятности выборок для каждого класса в модели. В вашем случае он должен вернуть результат с пятью столбцами с тем же числом строк, что и в ваших тестовых данных. Вы можете проверить, какой столбец соответствует какому классу, используя naive_b.classes_. Таким образом, не ясно, почему вы говорите, что это не желаемый результат. Возможно, ваша проблема связана с тем, что вы назначаете вывод предиката вероятности столбцу фрейма данных. Попробуйте:

pred_prob = naive_b.predict_proba(test_features)

вместо

test_data["p_malw"] = naive_b.predict_proba(test_features)

и проверьте его форму, используя pred_prob.shape. Второе измерение должно быть 5.

Если вы хотите использовать прогнозируемую метку для каждой выборки, вы можете использовать метод прогнозирования с последующей матрицей путаницы, чтобы увидеть, сколько меток было предсказано правильно.

from sklearn.metrics import confusion_matrix

naive_B.fit(train_features, train_label)

pred_label = naive_B.predict(test_features)

confusion_m = confusion_matrix(test_label, pred_label)
confusion_m

Вот несколько полезных чтений.

sklearn GaussianNB - http://scikit -learn.org / stable / modules / generate / sklearn.naive_bayes.GaussianNB.html # sklearn.naive_bayes.GaussianNB.predict_proba

sklearn confusion_matrix - http://scikit -learn.org / stable / modules / generate / sklearn.metrics.confusion_matrix.html

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