为什么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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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