0

Я хочу, чтобы выбрать верхние функции K с помощью SelectKBest и запустить GaussianNB:SelectKBest с GaussianNB не точными/последовательными результатами

selection = SelectKBest(mutual_info_classif, k=300) 

data_transformed = selection.fit_transform(data, labels) 
new_data_transformed = selection.transform(new_data) 

classifier = GaussianNB() 
classifier.fit(data_transformed, labels) 
y_predicted = classifier.predict(new_data) 
acc = accuracy_score(new_data_labels, y_predicted) 

Однако, я не получаю стабильные результаты по точности на одних и тех же данных. Точность была:

0.61063743402354853 
0.60678034916768164 
0.61733658140479086 
0.61652456354039786 
0.64778725131952908 
0.58384084449857898 

Для тех же данных. Я не разделяю и т. Д. Я просто использую два статических набора data и new_data.

Зачем нужны результаты? Как я могу убедиться, что получаю ту же точность для одних и тех же данных?

ответ

0

Это потому, что это некоторая случайность в данных или переменных. Это зависит от генератора случайных чисел , используемых внутренне оценками или функциями, в вашем случае это mutual_info_classif, которые вы передаете в SelectKBest.

Посмотрите на использование random_statehere и в this answer

В качестве временного решения можно вставить следующую строку в верхней части вашего кода.

np.random.seed(some_integer) 

Это установит семя Numpy к в some_integer и, насколько я знаю, scikit оценщики использует генератор случайных чисел Numpy в. See this for more details