如何将测试列与火车数据匹配?

How to match test columns with train data?

尝试使用朴素贝叶斯时出错。

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: operands could not be broadcast together with shapes (1,4) (9,)

在这种情况下使用 get_dummies 方法是个好主意吗?

显然这不是 vivek 指出的一个好的做法,但如果你想这样做的话,这里是代码:

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']])

dict1 = {}
X_test.columns
for i in X_train.columns:
  if i in X_test.columns:
    dict1.update({i:[1]})
  else:
    dict1.update({i:[0]})
X_test_new = pd.DataFrame(data = dict1)


gNB.predict(X_test_new)