在尝试使用朴素贝叶斯时遇到错误。
from sklearn.naive_bayes import GaussianNBimport pandas as pddf = 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 GaussianNBimport pandas as pddf = 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.columnsfor 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)