2017-04-03 207 views
0

我想使用留下一個交叉驗證。但我得到以下錯誤:問題與交叉驗證

AttributeError       Traceback (most recent call last) 
<ipython-input-19-f15f1e522706> in <module>() 
     3 loo = LeaveOneOut(num_of_examples) 
     4 #loo.get_n_splits(X_train_std) 
----> 5 for train, test in loo.split(X_train_std): 
     6  print("%s %s" % (train, test)) 

AttributeError的:「LeaveOneOut」對象有沒有屬性「分裂」

具體代碼如下:

from sklearn.cross_validation import train_test_split 
X_train, X_test, y_train, y_test = 
train_test_split(X, y, test_size=0.3, random_state=0) 

from sklearn.preprocessing import StandardScaler 
sc = StandardScaler() 
sc.fit(X_train) 
X_train_std = sc.transform(X_train) 
X_test_std = sc.transform(X_test) 

from sklearn.cross_validation import LeaveOneOut 
num_of_examples = len(X_train_std) 
loo = LeaveOneOut(num_of_examples) 
for train, test in loo.split(X_train_std): 
print("%s %s" % (train, test)) 
+0

從DOC(http://scikit-learn.org/stable/modules/generated/sklearn.model_selec tion.LeaveOneOut.html)它看起來像你需要首先使用'loo.get_n_splits(X_train)'分割你的設置' – Julien

+0

請包括完整的錯誤信息。 – DyZ

+0

這是不可讀的。請編輯您的原始問題並在其中包含完整的錯誤消息。 – DyZ

回答

0

我認爲你正在使用scikit-0.18以下的版本,也許可以參考0.18版的一些教程。

在0.18以前的版本中,LeaveOneOut()的構造函數有一個必需的參數n,在上面的代碼中沒有提供。因此錯誤。你可以參考到其提及的documentation of LeaveOneOut for version 0.17 here說:

Parameters: n : int Total number of elements in dataset.

解決方案:

  • 更新scikit學習到版本0.18
  • 初始化LeaveOneOut如下:

    loo = LeaveOneOut(size of X_train_std)

編輯

如果您使用的是scikit版本> = 0.18:

from sklearn.model_selection import LeaveOneOut 
for train_index, test_index in loo.split(X): 
    print("%s %s" % (train_index, test_index)) 
    X_train, X_test = X[train_index], X[test_index] 
    y_train, y_test = y[train_index], y[test_index] 

否則,對於版本< 0.18使用重複這樣的(注意,這裏loo.split()不使用, loo直接使用):

from sklearn.cross_validation import LeaveOneOut 
loo = LeaveOneOut(num_of_examples) 
for train_index, test_index in loo: 
    print("%s %s" % (train_index, test_index)) 
    X_train, X_test = X[train_index], X[test_index] 
    y_train, y_test = y[train_index], y[test_index] 
+0

我已經做了必要的更改以消除以前的錯誤,但我確實有另一個錯誤,我不知道如何解決它。我已經修改了我的初始代碼 – Shelly

+0

@Shelly你正在使用什麼版本的scikit ?.我編輯了答案以反映這些變化。 –

+0

Kumer如果我使用這個:from sklearn.model_selection import LeaveOneOut我會得到這個錯誤:ImportError:沒有名爲'sklearn.model_selection'的模塊引用我的scikit版本不超過0.18。並在我的初始代碼中的錯誤不是因爲使用「from sklearn.cross_validation import LeaveOneOut」 – Shelly