GW2日目 [改定第3版]Apache Solr入門を一部読んだ
[改訂第3版]Apache Solr入門――オープンソース全文検索エンジン (Software Design plus)
- 作者: 打田智子,大須賀稔,大杉直也,西潟一生,西本順平,平賀一昭,株式会社ロンウイット,株式会社リクルートテクノロジーズ
- 出版社/メーカー: 技術評論社
- 発売日: 2017/04/27
- メディア: 大型本
- この商品を含むブログを見る
オープンソースの検索エンジン、Solrを勉強する為に読みました。 当面はSolrを運用する予定は特にないので1~4章、6章の一部、あと9章を読みました。
良かった点
- Solrの導入方法や挙動がわかりやすく解説されている
- githubにサンプルソースが容易されていて、スムーズに読み進められる。特に躓く点がなかった。
- 割と高度な検索エンジンの改善手法(LTRとか)をSolrに導入する方法についても言及されている。
もう少しな点
- Solrと他の検索エンジン(Elasticsearchとか)との比較があると良い。
後は、検索エンジンの改善に言及するのであればモニタリングについてももう少し言及してくれるとより親切になると感じました。この点はビッグデータ分析・活用のためのSQLレシピが素晴らしかったので、検索業務に携わる人は併せて読むと良いかと。
- 作者: 加嵜長門,田宮直人,丸山弘詩
- 出版社/メーカー: マイナビ出版
- 発売日: 2017/03/27
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
elixir/iex/mixでコマンド補完
最近趣味でElixir/Phoenixを勉強してます。
Phoenixをいじってく過程で mix phoenix.server
やら mix ecto.migrate
やらを入力する機会が多々あるのですが、
デフォルトではこれらのコマンドはタブ補完ができなくて地味にしんどいです。
タブ補完してくれる何かがないかと思ってぐぐったら案の定見つかりました。
GitHub - bjhaid/elixir_auto_complete: Bash Autocompletion for elixir, iex and mix
DLしてsourceするだけで使えます。 快適なElixir/Phoenixライフに一歩近づきました。
めでたしめでたし。
Leaf Classification
勉強の為久々にKaggleをやってます。
参加してるのはこちら。
https://www.kaggle.com/c/leaf-classification
試行錯誤の記録をこちらに書いていきます。
実際にはもう幾つかサブミットしてますが、主要なアップデートについてのみ書いていきます。
1回目
とりあえずRandomForestにぶっこんで学習させてみる。スコア0.9くらい。
2回目
RandomForestでパラメータをグリッドサーチさせてやってみる。スコアはむしろ下がった。
3回目
xgboostにぶっこんで見る。スコア0.7くらい。
4回目
xgboostを軽くパラメータチューニング。スコア0.54くらい。
5回目
caribrationしてみる。元々の予測値と、caribrate後の予測値の比率を幾つかのパターンで試してみた。結果、caribrate後の値をそのままsubmitするのが最もスコアが良かった。スコア0.48くらい。
特徴量の作り方
先日書いた↓の記事のちょっとした続編。
【Kaggle】Bike Sharing Demandを予測してみた - naohachi89’s diary
上記のコンペティションについて、参考になる記事があったのでゆるふわな感じで日本語でまとめてみる。記事はこちら。
A simple model for Kaggle Bike Sharing. – brandonharris.io
元データからシンプルな特徴量を作ってconditional inference treesで予測したら結構良い精度が出たよというお話。使う言語はR。以下、記事の大まかな流れ。
始めに、元データから天気や季節等の、自転車の貸し出しに大きく影響を与えそうな要素をそのまま特徴量とする。windspeedとかは自転車の貸し出し台数にそんな影響ないだろうということで無視する感じ。
次に、日付と時刻に関する情報を特徴量とすることを考える。日付と時刻は元データだと"2011-01-01 00:00:00"という形式なので、そのままだと使えない。そこで日付と時刻を分離させて、その上でそれぞれに関する特徴量を作っていく。
日付については、始めに各日付に対して関数を使ってその日付の曜日を割り出し、曜日ごとの貸し出し台数の平均を算出する。すると、どうやら日曜日の貸し出し台数が他の曜日と比べて少ないので、「日曜日か否か」を0/1で示す特徴量を追加する。
時刻については、元データで時刻が1時間刻みで記録されているので、これを0時~23時までの24種類の値を持つカテゴリカルな特徴量とする。次に、貸し出し台数は1日における時間帯(朝、昼、夜等)によって変わってくると考えられるので、1日を6時間ごとに4つのパートに区切って、これもカテゴリカルな特徴量とする。特徴量を作る話はこれでおしまい。
特徴量が出来たら、後はconditional inference treesを使って予測する。予測してみると、0.49523という結構良さげな結果が得られましたとさ。めでたしめでたし
feature engineeringはこれまできちんと勉強したことがなかったので、為になる記事だった。ちなみに、貸し出し台数に一番寄与する特徴量は時刻らしい。深夜3時に自転車を借りる人とかほとんどいないだろうし、そりゃそうだ。
【Kaggle】Bike Sharing Demandを予測してみた
修論が終わったので、今まで余り手が出せていなかった分野にぼちぼちチャレンジしようと思う。
ということで、とりあえずKaggleに投稿してみた。投稿したコンペティションはこちら。
Description - Bike Sharing Demand | Kaggle
自転車のシェアリングシステムで、一時間に何台の自転車が貸し出されるかを予測する問題。
与えられるデータには日時、季節、天候等が記載されていて、これらの特徴量から自転車の貸し出し台数を予測する。予測結果と真の値の誤差はRMSLEで算出され、評価される。
一先ず、処理がめんどくさい日時以外の特徴量とscikit-learnのSVRを使って予測してみる。結果は、スコアが1.45くらいで順位が大体1900位/2000人。道のりは険しい。ちなみに、予測台数を全て0にしたサンプルのサブミッションファイルだとスコアが4.5くらいだった。
次に、時間帯を特徴量として扱うように変更を加えた。時間帯を1時間ごとに区切ってカテゴリカルな特徴量として扱うようにした。この特徴量を加えて、同様にSVRで予測するとスコアが1.2くらいに改善された。これでもまだ1800位くらい。
SVRだと性能が余り良くなさそうだったので、scikit-learnに入っている他の手法を試してみた。すると、RandomForestRegressorでスコアが0.55程度まで改善された。大分良くなったのだけど、何でRandomForestだとここまで精度が改善されるのかは理解していないので勉強しないと...。
ちょっとした追記