【发布时间】:2013-12-18 06:54:37
【问题描述】:
我想通过交叉验证检查一种新方法的预测误差。 我想知道我是否可以将我的方法传递给 sklearn 的交叉验证函数,以防万一。
我想要sklearn.cross_validation(cv=10).mymethod之类的东西。
我还需要知道如何定义mymethod 是否应该是一个函数以及哪个输入元素和哪个输出
例如,我们可以将mymethod 视为最小二乘估计器的实现(当然不是 sklearn 中的)。
我找到了这个教程link,但对我来说不是很清楚。
在documentation 他们使用
>>> import numpy as np
>>> from sklearn import cross_validation
>>> from sklearn import datasets
>>> from sklearn import svm
>>> iris = datasets.load_iris()
>>> iris.data.shape, iris.target.shape
((150, 4), (150,))
>>> clf = svm.SVC(kernel='linear', C=1)
>>> scores = cross_validation.cross_val_score(
... clf, iris.data, iris.target, cv=5)
...
>>> scores
但问题是他们使用的估计器 clf 是通过 sklearn 中内置的函数获得的。我应该如何定义自己的估算器以便将其传递给cross_validation.cross_val_score 函数?
例如,假设一个简单的估计器使用线性模型 $y=x\beta$,其中 beta 估计为 X[1,:]+alpha,其中 alpha 是一个参数。我应该如何完成代码?
class my_estimator():
def fit(X,y):
beta=X[1,:]+alpha #where can I pass alpha to the function?
return beta
def scorer(estimator, X, y) #what should the scorer function compute?
return ?????
使用以下代码,我收到了一个错误:
class my_estimator():
def fit(X, y, **kwargs):
#alpha = kwargs['alpha']
beta=X[1,:]#+alpha
return beta
>>> cv=cross_validation.cross_val_score(my_estimator,x,y,scoring="mean_squared_error")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\cross_validation.py", line 1152, in cross_val_score
for train, test in cv)
File "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\externals\joblib\parallel.py", line 516, in __call__
for function, args, kwargs in iterable:
File "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\cross_validation.py", line 1152, in <genexpr>
for train, test in cv)
File "C:\Python27\lib\site-packages\scikit_learn-0.14.1-py2.7-win32.egg\sklearn\base.py", line 43, in clone
% (repr(estimator), type(estimator)))
TypeError: Cannot clone object '<class __main__.my_estimator at 0x05ACACA8>' (type <type 'classobj'>): it does not seem to be a scikit-learn estimator a it does not implement a 'get_params' methods.
>>>
【问题讨论】:
-
这是一篇详细的博客文章,其中包含与交叉验证集成的自定义估算器示例ploomber.io/posts/sklearn-custom
标签: python scikit-learn