【超上級者向け】最前線で活躍を目指すデータサイエンティスト向けライブラリの活用方法
最先端の技術を使うようなデータサイエンティストとして活躍したい方向けのニッチな記事になっています。
勿論そうでない方も多いと思いますので、参考程度に読んで頂ければ幸いです。
新しいライブラリを試すときの手順
新しいライブラリを確認する際、私は以下の順番で試す事が多いです。
- どんな場面で有用なライブラリなのかを確認しておく
- ライブラリをとりあえず試してみる(公式ドキュメントのクイックスタート、チュートリアルだけやってみる)
- アルゴリズムをなんとなく理解してみる
- 公式ドキュメントを詳しく読んで見る
- アルゴリズムとライブラリのソースコード(もしくは公式ドキュメント)を比較しながら、理解を進めてみる
ここでは4番、5番に焦点を当てます。
基本的にはライブラリの公式ドキュメントに目を通すようにしましょう
出来ればライブラリを使用する際は公式のドキュメント(英語版)に目を通しましょう。
最近のライブラリの公式ドキュメントはソースコードから生成されている事が多く、最も正確な情報になっています。
公式ドキュメントといえど、日本語版は有志の方が翻訳して作成している事が多く、古い情報が多々あります。
(勿論ハードルが高いと思う方は日本語ドキュメントでも良いと思いますが)
またQiitaやZennは非常に分かりやすい情報が多いですが、同じ理由でコードが動かない事は多々あります。
特に機械学習の場合、コードはそのまま動くのに、結果がうまくいかない場合があります。
(例1: ドキュメントを読んでおかないと、コードは動くけど結果がうまくいかない例)
例えば、昔のTensorFlowのConv関数の引数が(input, filters, strides,...)だったのに対して、最近のTensorFlowでは(input, strides, filters, ..)となり、引数の位置が入れ替わっている事で動作はするが、やりたい事とは違う動作を引き起こす事がありました。
実際の機械学習ライブラリのソースコードは、本に乗っている基本的なアルゴリズムよりも意外と複雑になっているケースが多いです。
特に機械学習だと内部で何をしているか分からずに使うと、想定している事とは全く違う事をしているケースも出てきます。また公式ドキュメントやStackoverflowを見ても解決出来ない場合は、直接ライブラリのコードまで読みに行く事が多いです。
(例2: ドキュメントを読んでおかないと、きちんとした比較が出来ない例)
例えば、RのあるライブラリのRandomForestではRandomForestと言いながら、デフォルトで特徴量のヒストグラム化を行っております。本来はLightGBMなどの勾配ブースティングに使用されているアルゴリズム一部なので、純粋なランダムフォレストとの比較になりづらいケースがあります。
2番のとりあえず動かしてみたの段階だと間違った分析をしている事は多々あります。これに気づかぬまま最終意思決定を行ったり、数ヶ月かけて分析を行うと、非常に大きな時間の無駄になります。
また別のケースだと公式ドキュメントを読んでおくと、自前で作っているような関数が標準で実装されているケースが多々あるので時間が許せば、4番まで進めておく事をおすすめしています。
ライブラリのソースコードリーディング
ライブラリに詰まったときに検索しても出てこなかった場合は、大体GithubのIssueという箇所を見に行く事が多いかと思います。
ただそれでも解決できなければ、自分で直接Github上でライブラリのソースコードを追っていく必要があります。
ここまで行うと、大体のライブラリのエラーの原因が突き止められるようになります。
これは大規模開発を行う際には非常に重要なスキルになります。
大規模ライブラリへのプルリクエストのすすめ
個人的には上記に加えて、以下を追加するとさらに実践的な技術が身につくと思います。
- 自分でプルリクエストを出してみる
出来れば大きめのライブラリにプルリクを出してみるのも良い経験になります。
メリットとしては
- 公開されているものは議論された上で設計された綺麗な設計を学ぶ事が出来る
(TensorFlowは凄く汚いので例外あり.....) - 世界中のレベルの高いメンターがコードのレビューを無料でしてくれる
- 大きいライブラリの運営方法やコーディングのお作法がわかる
- 一人プロジェクトでしかGitを使っていない方は、Gitの使い方をもう少し詳しく知ることが出来る
- 大きめのライブラリでコントリビュータをした経験は、技術者の興味を引きやすい(特にGAFAのような外資面接)
よくある最も簡単なコントリビュートは「見つけた誤字を修正してプルリクを出す」です。笑
これをやるだけでもGitとプルリクエストの流れやお作法を知る事が出来るので、凄く良い機会になると思います。
まとめ
- ドキュメントは目を通しておきましょう。
- エラーなどで詰まった場合は、GithubのIssue、もしくはソースコードまで読みにいきましょう。
- ライブラリをよく理解せずに使うと、数ヶ月無駄にした上に分析結果が間違っていた、なんてことにもなります...笑
今回は上級者向けの記事でしたが、「ターミナルってなに?」、「分析はしたことがないがデータサイエンティストに興味がある」、というレベルの方から依頼をよく受けております。どんなレベルの方からでも私がお教え出来ることを出来る限り沢山お教えしていますので、データサイエンティスト、エンジニアリング、にご興味があれば一度プランを覗いて頂ければ幸いです。