Kaggleで使えるFeather形式を利用した特徴量管理法この広告は、90日以上更新していないブログに表示しています。Pythonみなさま、Kaggle楽しんでいますでしょうか。Challengeに参加しています。前回のKaggle記事ではpandasのテクニックについてまとめました。多くのアクセスをいただき、人生初のホッテントリ入りまで経験してたいそう嬉しかったです。ありがとうございました!amalog.hateblo.jpさて。ある程度データのサイズが大きくなり、さまざまな特徴量を取捨選択するようになると特徴量のシリアライズ(保存)が欠かせません。そこで、今回は僕が行っている特徴量管理方法を紹介したいと思います。Detectionコンペの1位、flowlightさんのリポジトリを参考にしています。主要なポイントをまとめると以下のとおりです。特徴量の読み込みまとめFeather形式でのシリアライズFeatherは読み込みが非常に高速であることが特長の形式です。C++で実装されており、RとPythonのラッパーが提供されています。feather-formatでインストールすることが可能です。feather-formatをインストールしておけば、pandasのデータフレームに対してdf.to_feather(filepath)とすることによってFeather形式でのシリアライズが可能です。読み込みの場合はpd.read_feather(filepath)です。このFeather形式を利用し、特徴量を意味のあるカタマリごとに分割して保存することを目指します。同じようなコードを何度も書くことはメンテナンスの都合上、望ましくありません。特徴量の作成の場合、適切なファイル名をつけ、適切なフォルダに保存する、といったところを何度も書くことになります。KaggleのKernelで公開されているコードのように1つのファイルに大量に特徴量の定義を書いていると、特徴量同士の依存関係が複雑になってきます。そこで、以下のような基底クラスを継承して特徴量を作成することを考えます。self.test.to_feather(str(self.test_path))timer()これは処理時間を簡単に計測するための関数です。コンテキストマネージャとして作られているため、with文で利用することができます。Featureクラス特徴量の基底クラス(抽象クラス)です。このクラスを継承してcreate_featuresメソッドを実装すれば利用可能になります。自身のクラス名から自動でファイル名を生成し、saveメソッドで保存まで行うことができます。create_featuresメソッドの中でself.trainとself.testに書き込んだ内容が保存されます。利用例は以下のようになります。1FamilySize().run().save()このように書くことで、FamilySize_train.ftrとFamilySize_test.ftrが作成されます。特徴量を実装したらワンコマンドで実行できることが望ましいです。計算されている特徴量は再度計算したくありません。そこで、以下のような関数を作成しました。f.run().save()get_arguments()コマンドライン引数を解析する関数です。-fのように、-fをつけると上書きモードになります。get_features()Featureを継承したクラスをインスタンス化して返すイテレータです。generate_features()namespaceを渡すと、そこに含まれる特徴量が既に保存済かどうか確認して、存在しない場合は計算します。overwriteがTrueならすべての特徴量を計算し直します。例によってKaggleのTitanicで特徴量を作ってみます。先程のクラスや関数をbase.pyに実装し、特徴量を以下のようにtitanic.pyに実装したとします。args.force)実行結果は以下のようになり、features内にFamilySize_train.ftrとFamilySize_test.ftrが保存されます。s特徴量の読み込み出力した特徴量は以下のようにして読み込むことができます。load_datasets(feats)まとめ特徴量をFeather形式でブロックごとに管理するコマンドラインツールとしてまとめ、取り回しを楽にする方法について解説しました。Kaggleではスクリプトを書き散らかすと特徴量管理が崩壊してしまうため、これくらいの頑張り具合でちょうどよいのではないかと思っています。実装はGitHubのコンペ用ライブラリ(作成中)に置いてあります。github.com間違い・改善点などありましたらコメントやTwitterなどでフィードバックをいただけると幸いです。ちなみに明日(7/7)は僕の誕生日です。Amazon欲しいものリストを貼っておきますので、こちらも合わせてよろしくおねがいします。Recommendationコンペに参加し...2019-01-10決定木は本当に変換に依存しないのか?決定木をベースとしたモデル(RandomForestやXGBoost、LightGBM...2018-12-20コピペで使える。2018の20日目の記事です。»プロフィールえじといいます。渋谷でデータサイエンティストとして働いています。Masterになりました。