使用GaussianNB选择KBest不是精确/一致的结果

时间:2017-02-12 22:11:29

标签: python machine-learning scikit-learn feature-extraction feature-selection

我想使用SelectKBest选择前K个功能并运行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

对于SAME数据。我不做拆分等。我只使用两个datanew_data的静态集。

为什么结果会有所不同?如何确保相同数据的准确度相同?

1 个答案:

答案 0 :(得分:0)

这是因为它们在数据或变量中是一些随机性。这取决于估算器或函数内部使用的随机数生成器,在您的情况下,mutual_info_classif将其传递到SelectKBest

查看random_state herethis answer

的使用情况

作为一种解决方法,您可以在代码上插入以下行。

np.random.seed(some_integer)

这会将numpy的种子设置为some_integer,据我所知,scikit estimators使用numpy的随机数生成器。 See this for more details