python – 继承自scikit-learn的LassoCV模型
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 继承自scikit-learn的LassoCV模型,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2673字,纯文字阅读大概需要4分钟。
内容图文
![python – 继承自scikit-learn的LassoCV模型](/upload/InfoBanner/zyjiaocheng/825/172b6e307fa742d99ec928036cdfea3e.jpg)
我尝试使用继承来扩展scikit-learn的RidgeCV模型:
from sklearn.linear_model import RidgeCV, LassoCV
class Extended(RidgeCV):
def __init__(self, *args, **kwargs):
super(Extended, self).__init__(*args, **kwargs)
def example(self):
print 'Foo'
x = [[1,0],[2,0],[3,0],[4,0], [30, 1]]
y = [2,4,6,8, 60]
model = Extended(alphas = [float(a)/1000.0 for a in range(1, 10000)])
model.fit(x,y)
print model.predict([[5,1]])
它运行得很好,但是当我尝试从LassoCV继承时,它产生了以下回溯:
Traceback (most recent call last):
File "C:/Python27/so.py", line 14, in <module>
model.fit(x,y)
File "C:\Python27\lib\site-packages\sklearn\linear_model\coordinate_descent.py", line 1098, in fit
path_params = self.get_params()
File "C:\Python27\lib\site-packages\sklearn\base.py", line 214, in get_params
for key in self._get_param_names():
File "C:\Python27\lib\site-packages\sklearn\base.py", line 195, in _get_param_names
% (cls, init_signature))
RuntimeError: scikit-learn estimators should always specify their parameters in the signature of their __init__ (no varargs). <class '__main__.Extended'> with constructor (<self>, *args, **kwargs) doesn't follow this convention.
有人可以解释如何解决这个问题吗?
解决方法:
你可能想制作scikit-learn兼容模型,进一步使用scikit-learn功能.如果你这样做 – 你需要先阅读:
http://scikit-learn.org/stable/developers/contributing.html#rolling-your-own-estimator
简而言之:scikit-learn有许多功能,如估算器克隆(clone()函数),元算法,如GridSearch,Pipeline,Cross validation.所有这些都必须能够获取估算器内部字段的值,并更改这些字段的值(例如,GridSearch必须在每次评估之前更改估算器内部的参数),例如SGDClassifier中的参数alpha.要更改某个参数的值,必须知道它的名称.要获取BaseEstimator类中每个分类器方法get_params中的所有字段的名称(隐式继承),需要在类的__init__方法中指定所有参数,因为很容易内省__init__方法的所有参数名称(查看BaseEstimator ,这是抛出此错误的类).
所以它只是希望你删除所有的varargs
*args, **kwargs
来自__init__签名.您必须在__init__ signature中列出模型的所有参数,并初始化对象的所有内部字段.
以下是SGDClassifier的__init__方法的示例,它继承自BaseSGDClassifier:
def __init__(self, loss="hinge", penalty='l2', alpha=0.0001, l1_ratio=0.15,
fit_intercept=True, n_iter=5, shuffle=True, verbose=0,
epsilon=DEFAULT_EPSILON, n_jobs=1, random_state=None,
learning_rate="optimal", eta0=0.0, power_t=0.5,
class_weight=None, warm_start=False, average=False):
super(SGDClassifier, self).__init__(
loss=loss, penalty=penalty, alpha=alpha, l1_ratio=l1_ratio,
fit_intercept=fit_intercept, n_iter=n_iter, shuffle=shuffle,
verbose=verbose, epsilon=epsilon, n_jobs=n_jobs,
random_state=random_state, learning_rate=learning_rate, eta0=eta0,
power_t=power_t, class_weight=class_weight, warm_start=warm_start, average=average)
内容总结
以上是互联网集市为您收集整理的python – 继承自scikit-learn的LassoCV模型全部内容,希望文章能够帮你解决python – 继承自scikit-learn的LassoCV模型所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。