Python 2.7 tensorflow SKCompat与cross_val_分数不兼容
我正在尝试使用一个tensorflow分类器和scikit learn中的一些工具,即Python 2.7 tensorflow SKCompat与cross_val_分数不兼容,python-2.7,tensorflow,scikit-learn,Python 2.7,Tensorflow,Scikit Learn,我正在尝试使用一个tensorflow分类器和scikit learn中的一些工具,即模型选择.cross\u val\u score。当我运行以下代码(改编自)时,我得到一个TypeError(请参阅下面的完整回溯) 从我所能看出的问题是,cross\u val\u score试图通过执行相当于estimator的操作来克隆估计器。由于某种原因,SKCompat.get_params返回{},类上的init方法需要一个参数(如示例代码所示),因此操作会中断 我做错什么了吗?或者这是tensor
模型选择.cross\u val\u score
。当我运行以下代码(改编自)时,我得到一个TypeError
(请参阅下面的完整回溯)
从我所能看出的问题是,cross\u val\u score
试图通过执行相当于estimator的操作来克隆估计器。由于某种原因,SKCompat.get_params
返回{}
,类上的init方法需要一个参数(如示例代码所示),因此操作会中断
我做错什么了吗?或者这是tensorflow的一个bug
失败的例子
回溯
回溯(最近一次呼叫最后一次):
文件“iris.py”,第49行,在
tf.app.run()
文件“/Users/Matt/.virtualenvs/numerai/lib/python2.7/site packages/tensorflow/python/platform/app.py”,第48行,运行中
_系统出口(主(_sys.argv[:1]+标志_passthrough))
文件“iris.py”,第44行,主
评分(准确度)
文件“/Users/Matt/.virtualenvs/numerai/lib/python2.7/site packages/sklearn/model\u selection/\u validation.py”,第140行,交叉值
对于列车,在cv_iter中进行试验)
文件“/Users/Matt/.virtualenvs/numerai/lib/python2.7/site packages/sklearn/externals/joblib/parallel.py”,第758行,在调用中__
而self.dispatch\u一批(迭代器):
文件“/Users/Matt/.virtualenvs/numerai/lib/python2.7/site packages/sklearn/externals/joblib/parallel.py”,第603行,一批发送
tasks=BatchedCalls(itertools.islice(迭代器,批大小))
文件“/Users/Matt/.virtualenvs/numerai/lib/python2.7/site packages/sklearn/externals/joblib/parallel.py”,第127行,在__
self.items=列表(迭代器\u切片)
文件“/Users/Matt/.virtualenvs/numerai/lib/python2.7/site packages/sklearn/model\u selection/\u validation.py”,第140行,在
对于列车,在cv_iter中进行试验)
文件“/Users/Matt/.virtualenvs/numerai/lib/python2.7/site packages/sklearn/base.py”,第70行,克隆
新建对象=klass(**新建对象参数)
TypeError:\uuuu init\uuuuuu()正好接受2个参数(给定1个)
版本
python:2.7.3
tensorflow:1.1.0
scikit learn:0.18.1此错误是因为cross_val_得分将在每次拟合之前克隆估计器,因此SKCompat的get_params()应返回正确的参数。但由于某些原因,它返回空参数,因此出现错误。@VivekKumar我认为你是对的。我的后续问题是:我是否错误地使用了该类,或者这是我应该向tensorflow提交的错误?我尝试过,但找不到使用scikit learn anywhere的SKCompat示例。因此,我无法对此发表评论。我认为你应该在他们的github页面上发布一个问题。如果不是一个bug,你会得到它的正确使用。
"""Example of DNNClassifier for Iris plant dataset."""
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from sklearn import metrics
from sklearn import model_selection
import tensorflow as tf
def main(unused_argv):
# Load dataset.
iris = tf.contrib.learn.datasets.load_dataset('iris')
# Build 3 layer DNN with 10, 20, 10 units respectively.
feature_columns = tf.contrib.learn.infer_real_valued_columns_from_input(
iris.data)
classifier = tf.contrib.learn.SKCompat(
tf.contrib.learn.DNNClassifier(
feature_columns=feature_columns,
hidden_units=[10, 20, 10],
n_classes=3
)
)
# Fit and predict.
scores = model_selection.cross_val_score(classifier, iris.data, iris.target,
scoring='accuracy')
print('Accuracy: {0:f}'.format(scores.mean()))
if __name__ == '__main__':
tf.app.run()
Traceback (most recent call last):
File "iris.py", line 49, in <module>
tf.app.run()
File "/Users/Matt/.virtualenvs/numerai/lib/python2.7/site-packages/tensorflow/python/platform/app.py", line 48, in run
_sys.exit(main(_sys.argv[:1] + flags_passthrough))
File "iris.py", line 44, in main
scoring='accuracy')
File "/Users/Matt/.virtualenvs/numerai/lib/python2.7/site-packages/sklearn/model_selection/_validation.py", line 140, in cross_val_score
for train, test in cv_iter)
File "/Users/Matt/.virtualenvs/numerai/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.py", line 758, in __call__
while self.dispatch_one_batch(iterator):
File "/Users/Matt/.virtualenvs/numerai/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.py", line 603, in dispatch_one_batch
tasks = BatchedCalls(itertools.islice(iterator, batch_size))
File "/Users/Matt/.virtualenvs/numerai/lib/python2.7/site-packages/sklearn/externals/joblib/parallel.py", line 127, in __init__
self.items = list(iterator_slice)
File "/Users/Matt/.virtualenvs/numerai/lib/python2.7/site-packages/sklearn/model_selection/_validation.py", line 140, in <genexpr>
for train, test in cv_iter)
File "/Users/Matt/.virtualenvs/numerai/lib/python2.7/site-packages/sklearn/base.py", line 70, in clone
new_object = klass(**new_object_params)
TypeError: __init__() takes exactly 2 arguments (1 given)