Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
0
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

コード削減―Pipeline化とFunctionTransformer―

きっかけ

メルカリコンペ1位のコードに出てきたmake_pipelineとFunctionTransformerが良く分からなかったから。

まとめ

make_pipeline→[前処理+学習+推定]などのコードを1つの推定器に変換する。コード削減が可能。

FunctionTransformer→任意の関数をtransformer(変換器)に変換する。Pipelineの引数はtransformerである必要があるため。任意の関数の最低要件はfitとtransformが存在すること。

使用例

使用例①

下記例ではPCA()が行われた後に、SVCが実行されている。
前処理と分類を一連の動作で実行することができている。

下記例の参考サイト

qiita.rb
from sklearn.pipeline import Pipeline
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn import datasets

# サンプルデータの用意
iris = datasets.load_iris()
X, y = iris.data, iris.target

# pipelineの作成
estimators = [('reduce_dim', PCA()), ('clf', SVC())]
pipe = Pipeline(steps=estimators)

# 学習
pipe.fit(X, y)

# 予測
pipe.predict(X)

利用例② メルカリコンペコードの使用例

メルカリコンペ1位のコードの一部抜粋

qiita.rb
from sklearn.pipeline import make_pipeline, make_union, Pipeline
from sklearn.feature_extraction.text import TfidfVectorizer as Tfidf

def on_field(f: str, *vec) -> Pipeline:
    return make_pipeline(FunctionTransformer(itemgetter(f), validate=False), *vec)

 vectorizer = make_union(
        on_field('name', Tfidf(max_features=100000, token_pattern='\w+')),
        on_field('text', Tfidf(max_features=100000, token_pattern='\w+', ngram_range=(1, 2))),
        on_field(['shipping', 'item_condition_id'],
                 FunctionTransformer(to_records, validate=False), DictVectorizer()),
        n_jobs=4)

make_pipelineでitemgetterとTfidfのインスタンスをパイプライン化している。
FunctionTransformerでitemgetterをtransformerに変換して自前の変換器を作成している。
これにより、itemgetter(文字列の抽出)の重要な文字列の特定を一連の流れでこの後行えるようになっている。
itemgetterはこちら

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
0
Help us understand the problem. What are the problem?