TypeError: __init__() got multiple values for argument 'shuffle'
阿新 • • 發佈:2018-11-19
以下銀行卡詐騙專案中的一段程式碼:
from sklearn.cross_validation import KFold def printing_Kfold_scores(x_train_data,y_train_data): fold =KFold(len(y_train_data),5,shuffle=False) for iteration, indices in enumerate(fold,start=1): lr = LogisticRegression(C = c_param,penalty = 'l1') lr.fit(x_train_data.iloc[indices[0],:],y_train_data.iloc[indices[0],:].values.ravel()) y_pred_undersample =lr.predict(x_train_data.iloc[indices[1],:].values) recall_acc =recall_score(y_train_data.iloc[indices[1],:].values,y_pred_undersample) recall_accs.append(recall_acc)
以上這段程式碼本身是沒有問題的,但由於庫版本的原因,有的人在執行這段程式碼後,出現以下錯誤:
ModuleNotFoundError: No module named 'sklearn.cross_validation'
為此他將from sklearn.cross_validation import KFold改為from sklearn.model_selection import KFold,再執行卻發現有了新的問題:
TypeError: __init__() got multiple values for argument 'shuffle'
這是為什麼呢?其實這是匯入 KFold的方式不同引起的。如果你這樣做:from sklearn.cross_validation import KFold,那麼:
KFold(n,5,shuffle=False) # n為總數,需要傳入三個引數
但如果你這樣做:from sklearn.model_selection import KFold,那麼:
fold = KFold(5,shuffle=False) # 無需傳入n
正確程式碼如下:
from sklearn.model_selection import KFold def printing_Kfold_scores(x_train_data,y_train_data): fold = KFold(5,shuffle=False) recall_accs = [] for iteration, indices in enumerate(fold.split(x_train_data)): lr = LogisticRegression(C = c_param, penalty = 'l1') lr.fit(x_train_data.iloc[indices[0],:],y_train_data.iloc[indices[0],:].values.ravel()) y_pred_undersample = lr.predict(x_train_data.iloc[indices[1],:].values) recall_acc = recall_score(y_train_data.iloc[indices[1],:].values,y_pred_undersample) recall_accs.append(recall_acc)