为什么BernoulliNB分类器对所有数据集返回相同的值?

我尝试使用BernoulliNB来预测鸢尾花数据集。但训练后的模型对所有测试数据集返回一个随机值作为预测。我使用决策树对相同的数据集进行了尝试,训练后的模型对测试数据集的预测准确率很高。

import pandas as pnimport sklearn as skfrom sklearn.model_selection import train_test_split as lkdef labelmod(x):    if(x =='Iris-versicolor'):        return 0    elif(x =='Iris-setosa'):        return 1    elif(x =='Iris-virginica'):        return 3    else:        returndef celldif(x):    return x.apply(labelmod)ok = pn.read_csv(r"C:\Users\s420105\Desktop\iris.csv",header = None)data=ok.dropna()labels = data.ix[:,4:]labels=labels.apply(celldif)data=data.ix[:,0:3]train_data,test_data,train_label,test_label=lk(data,labels,test_size=0.3)from sklearn.naive_bayes import BernoulliNB classifier = BernoulliNB().fit(train_data,train_label.values.ravel())result= classifier.predict(test_data)result

结果返回array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], dtype=int64) 作为输出

测试和训练标签都没有问题。对于决策树,我传递了不包括values.ravel()的train_label


回答:

你需要做的只是在使用BernoulliNB之前对数据进行缩放。我使用的是scikit-learn中的鸢尾花数据集,因为我没有你的CSV文件。但这不是ravel()的问题,而是数据缩放的问题。

import pandas as pnimport sklearn as skfrom sklearn.model_selection import train_test_split as lkfrom sklearn import datasetsfrom sklearn.naive_bayes import BernoulliNBfrom sklearn.preprocessing import StandardScalerdata = datasets.load_iris().datalabels = datasets.load_iris().targetdata = StandardScaler().fit_transform(data)train_data,test_data,train_label,test_label=lk(data,labels,test_size=0.3)classifier = BernoulliNB().fit(train_data,train_label)result= classifier.predict(test_data)print(result)

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注