【发布时间】:2018-11-20 09:57:11
【问题描述】:
尝试使用朴素贝叶斯时出错。
from sklearn.naive_bayes import GaussianNB
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/sjwhitworth/golearn/master/examples/datasets/tennis.csv')
X_train = pd.get_dummies(df[['outlook', 'temp', 'humidity', 'windy']])
y_train = df['play']
gNB = GaussianNB()
gNB.fit(X_train, y_train)
ndf=pd.DataFrame({'outlook':['sunny'], 'temp':['hot'], 'humidity':['normal'], 'windy':[False]})
X_test=pd.get_dummies(ndf[['outlook', 'temp', 'humidity', 'windy']])
gNB.predict(X_test)
ValueError: 操作数不能与形状一起广播 (1,4) (9,)
在这种情况下使用 get_dummies 方法是个好主意吗?
【问题讨论】:
-
没有。
get_dummies只会将那些列作为当时数据中存在的不同值。大多数情况与训练数据不同。所以在这种情况下使用LabelEncoder + OneHotEncoder。或者,如果您可以使用来自 github 的 scikit 开发版本,请使用 CategoricalEncoder。请看my answer here -
否则,如果您想使用
get_dummies(),请在拆分为训练测试之前对整个数据使用它。但这在现实生活中或部署在生产环境中是不可能的(可行的)。
标签: machine-learning scikit-learn naivebayes