arq*_*ago 3 python scikit-learn
我在我的数据集上运行不同的机器学习模型。我正在使用 sklearn 管道尝试对数字特征进行不同的转换,以评估一种转换是否能提供更好的结果。我使用的基本结构很简单:
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestClassifier
from sklearn.preprocessing import StandardScalar
pipe = Pipeline(steps=[('stdscaler', StandardScaler()), ('clf', RandomForestClassifier())])
pipe.fit(X_train, y_train)
Run Code Online (Sandbox Code Playgroud)
我正在尝试一系列转换,但我还想测试不对数字特征集执行任何转换的场景(即按原样使用特征)。有没有办法将其包含在管道中?就像是:
pipe = Pipeline(steps=[('do nothing', do_nothing()), ('clf', RandomForestClassifier())])
Run Code Online (Sandbox Code Playgroud)
是的,你可以简单地做
pipe = Pipeline(steps=[('clf', RandomForestClassifier())])
Run Code Online (Sandbox Code Playgroud)
另外,如果您有一些您几乎一直想要的自定义基础转换,并且它还具有某些超参数或添加的功能,您也可以执行类似的操作(有点蹩脚的示例,但仅用于想法..)
from sklearn.base import TransformerMixin
class Transform(TransformerMixin):
def __init__(self, **kwargs):
print(kwargs)
self.hyperparam = kwargs
def fit(self, X, y=None):
return self
def transform(self, X):
if self.hyperparam["square"]:
X = [x**2 for x in X]
# elif "other_transform" in self.hyperparam:
# pass_val = self.hyperparam['other_transform']
# X = other_transform(X, pass_val)
return X # default to no transform if no hyperparameter is provided as argument of Transform()
pass_pipe = Pipeline(steps=[('do nothing', Transform()),
('clf', RandomForestClassifier())])
square_pipe = Pipeline(steps=[('square', Transform(square=True)),
('clf', RandomForestClassifier())])
Run Code Online (Sandbox Code Playgroud)
上述是一种互斥的转换方式,即一个或另一个。相反,如果您有一堆转换并且想要按特定顺序应用它们,那么实现回调可能是正确的方法。看看这种事情是如何在 sklearn、pytorch 或 fastai 等流行库中实现的。
| 归档时间: |
|
| 查看次数: |
1552 次 |
| 最近记录: |