【问题标题】:__init__() got an unexpected keyword argument 'n_splits' ERROR__init__() 得到一个意外的关键字参数 'n_splits' 错误
【发布时间】:2017-09-12 00:21:06
【问题描述】:

我打算试试这个link中的代码:

我从引用StratifiedKFold(n_splits=60) 的行中收到错误消息。谁能告诉我如何解决这个错误?

代码如下:

import numpy as np
from scipy import interp
import matplotlib.pyplot as plt
from itertools import cycle

from sklearn import svm, datasets
from sklearn.metrics import roc_curve, auc
from sklearn.cross_validation import StratifiedKFold

iris = datasets.load_iris()
X = iris.data
y = iris.target
X, y = X[y != 2], y
X, y

cv = StratifiedKFold(n_splits=6)
classifier = svm.SVC(kernel='linear', probability=True,
                     random_state=random_state)

mean_tpr = 0.0
mean_fpr = np.linspace(0, 1, 100)

这是错误:

TypeError                                 Traceback (most recent call last)
<ipython-input-227-2af2773f4987> in <module>()
----> 1 sklearn.cross_validation.StratifiedKFold(n_splits=6)
      2 #cv = StratifiedKFold(n_splits=6,  shuffle=True, random_state=1)
      3 classifier = svm.SVC(kernel='linear', probability=True,
      4                      random_state=random_state)
      5 

TypeError: __init__() got an unexpected keyword argument 'n_splits'

【问题讨论】:

  • sklearn.cross_validation.StratifiedKFold 不是 sklearn.model_selection.StratifiedKFold 并且不采用相同的参数。
  • 在链接中他们使用了sklearn.model_selection.StratifiedKFold。但是您使用的是sklearn.cross_validation.StratifiedKFold。模块cross_validation 已被弃用。我敢肯定你一定已经收到了警告。
  • @Vivek 我使用 sklearn.cross_validation.StratifiedKFold 的原因是我在使用 sklearn.model_selection.StratifiedKFold 时出错。使用 sklearn.cross_validation.StratifiedKFold 时我没有收到任何警告
  • @Shelly 我已经回答了你的问题。但我注意到的另一件事是你只是打了就跑。即提出问题,如果没有解决就评论答案,然后什么都没有。您既不接受解决问题的答案,也不评论您的问题是否已通过特定答案解决。

标签: python scikit-learn cross-validation


【解决方案1】:

您在导入 sklearn.cross-validation 模块时没有收到任何警告。这意味着您安装的版本小于 0.18。

如果您的 scikit-learn 版本是 &lt; 0.18,则更改以下行: (取自StratifiedKFold documentation for version 0.17

#Notice the extra parameter y and change of name for n_splits to n_folds
cv = StratifiedKFold(y, n_folds=6)

#Also note that the cv is called directly in for loop
for train_index, test_index in cv:
   print("TRAIN:", train_index, "TEST:", test_index)
   X_train, X_test = X[train_index], X[test_index]
   y_train, y_test = y[train_index], y[test_index]

如果您的 scikit-learn 版本是 &gt;=0.18,那么只有您可以为 cv 使用 n_splits 参数: (取自StratifiedKFold current documentation,我想你指的是这个)

#Notice the extra parameter y is removed here
cv = StratifiedKFold(n_splits=6)

#Also note that the cv.split() is called here (opposed to cv in ver 0.17 above)
for train_index, test_index in cv.split(X, y):
   print("TRAIN:", train_index, "TEST:", test_index)
   X_train, X_test = X[train_index], X[test_index]
   y_train, y_test = y[train_index], y[test_index]

推荐

将您的 scikit-learn 更新到最新版本 0.18。因为您通过直接搜索找到的大多数文档都是这个版本的,这会让您感到困惑。

编辑:

我已经在这里回答了您的类似问题: - Issue with Cross Validation

所以下一次,请在问题本身中提及您使用的库版本,并记住访问它们的相关文档,而不是其他文档。

【讨论】:

    猜你喜欢
    • 2019-01-05
    • 1970-01-01
    • 2015-06-08
    • 2017-05-10
    • 1970-01-01
    • 2021-03-17
    • 2013-05-05
    • 2016-06-05
    • 2020-08-20
    相关资源
    最近更新 更多