【发布时间】:2021-09-16 15:44:13
【问题描述】:
我想在我的 sklearn 管道中使用 UMAP,并且我想缓存该步骤以加快速度。但是,由于我有自定义 Transformer,the suggested method 不起作用。
示例代码:
from sklearn.preprocessing import FunctionTransformer
from tempfile import mkdtemp
from sklearn.pipeline import Pipeline
from umap import UMAP
from hdbscan import HDBSCAN
import seaborn as sns
iris = sns.load_dataset("iris")
X = iris.drop(columns='species')
y = iris.species
@FunctionTransformer
def transform_something(iris):
iris = iris.copy()
iris['sepal_sum'] = iris.sepal_length + iris.sepal_width
return iris
cachedir = mkdtemp()
pipe = Pipeline([
('transformer', transform_something),
('umap', UMAP()),
('hdb', HDBSCAN()),
],
memory=cachedir
)
pipe.fit_predict(X)
如果你运行这个,你会得到一个PicklingError,说它不能腌制自定义转换器。但我只需要缓存 UMAP 步骤。有什么建议可以让它发挥作用吗?
【问题讨论】:
-
在底层,sklearn 使用了 joblib。也许你可以直接使用这个库? joblib.readthedocs.io/en/latest/auto_examples/…
标签: python scikit-learn pickle