こんにちは,米国データサイエンティストのかめ(@usdatascientist)です.
DataScienceHubを立ち上げて早2年ちょい経ちますが,コンテンツ第一弾のCoding Challengeが課題100個を超え,提出されたコードはなんと3000件近くになりました!!
Coding Challengeも十分な課題量になってきたので,(ずっとやりたかった)新たなコンテンツを始めることにしました!
その名も
ML Scratch Challenge
です
MLはMachine Learningの略ですね.
目次
ML Scratch Challengeとは?
ML Scratch Challengeは,僕が運営しているオンラインコミュニティDataScienceHubのメンバー専用のコンテンツです
本コンテンツでは,機械学習の各アルゴリズムをスクラッチで実装していきます.
今やScikit-learnなどのライブラリを使って一行でモデルを構築できてしまう時代ですが,「アルゴリズムの中身はよくわからない」という人も多いのが現状です
「勉強したけど忘れてしまった」という人や,「アルゴリズムの中身を知る機会がない」という人も多いはず
機械学習のアルゴリズムをわからず使っていると,どこかのタイミングで必ずモデリングの精度に頭打ちをします.職場で恥ずかしい思いをしたり,ハイパーパラメータに何を入れたらいいかわからなかったり,無駄なチューニングをすることになったりします.
そもそもわからないままただ闇雲にモデリングをしていたらつまらないでしょう
そこで,本コンテンツを通して機械学習のアルゴリズムを実際に自分で実装することでアルゴリズムの中身を理解し習得することを目指します
参加方法
ML Scratch Challengeは,Coding Challengeと同様に基本的にGithubを用いて行われます.
以下,内容はほとんどCoding Challengeの「参加方法」に書かれているものと同じになりますが参加手順について解説します.
なお,「GitやGithubの操作が不安だ」と言う人は是非こちらの無料講座を読んでみてください.1日あれば読めると思います.無料なので是非!
また,日本で最も評価されているGitの動画講座を公開しているので,Git未経験の方は必ず先にこちらの受講をお願いします.
なお,今回のフローは一般的なOSSなどの開発にもかなり近いフローです.Githubは1人ではなかなか練習できないので,本当にいいチャンスなので騙されたと思って(?)これ通りやってみてください.初めての人は最初の1~2回は慣れなくて大変かもしれませんが,慣れると1~3分でこれらのステップを踏めるようになります.
↓はStep by stepに手順を説明しています.一見長く見えますが,慣れると楽ですし,今後チームで開発する際にも必ず活きるのでやってみてください!
1. DataScienceHubへ入会する.
↓のページから入会手続き(PayPal)をしてください.その後,Slackへの招待メールとGithubのOrganization(D-S-Hub)への招待メールが届きます.(PayPalのご登録のメールアドレスに届きます)
2.GithubのOrganization”D-S-Hub”への招待を許可する.
PayPalご登録後,以下のようなメールが送られてくるかと思います.(通常はご登録から送付まで2営業日いただいております)
もしまだGithubのアカウントをお持ちでない場合はこちらの記事を参考にサインアップしましょう!
3. Organization”DataScienceHub”に加入していることを確認する
自分のGithubのアカウントページにアクセスすると,「Organizations」にDataScieceHubのロゴが見えるのでそこをクリックします.
4. Repositoriesタブをクリックしてml-scratch-challengeリポをクリックする
5. D-S-Hub/ml-scratch-challengeをforkする.
forkすると,自分のアカウントにリポジトリのコピーを作ることができます.こうすることで,元のD-S-Hubのml-scratch-challengeリポを変更することなく,安全にコーディングをすることができます.
6. 自分のアカウントにforkされたml-scratch-challengeリポがあることを確認し,cloneする.
‘Code’ボタンをクリックし,Clone with HTTPSに表示されているURLをコピペし,Terminalを開いてcloneしたいフォルダに移動して
$git clone <コピーしたURL> を実行すればOK
2021年8月13日以降,httpsでの認証ができなくなるようです.その場合他の認証方法を使う必要があります.SSH設定の仕方を記事にしたのでこちらを参考にしてください.
cloneの仕方はこちらで詳しく解説してますので,合わせてご確認ください.また,必要に応じて $git config でローカルリポのユーザ設定をしておきましょう. $git config についてはこちらの記事もご確認ください.
例えば~/Desktopにリポジトリをcloneする場合は
1 2 3 4 |
$ cd ~/Desktop $ git clone <コピーしたURL> $ git config user.name '<username>' $ git config user.email '<email address>' |
のようにすればOKです.
1. 本家リモートリポ(D-S-Hub/ml-scratch-challenge)
2. 自分のリモートリポ(<username>/ml-scratch-challenge)
3. 自分のローカルリポ(ml-scratch-challenge)
7. 本家リモートリポをupstreamとして登録する
本家のリポ(D-S-Hub/ml-scratch-challenge)には課題が追加されるので,Forkした自分のリポを常に本家のリポの更新に合わせてアップデートする必要があります.
リモートリポの登録は,$git remote add <name> <リポのurl>で可能です.通常Fork元の本家のリポを’upstream’として登録しておくのが一般的なので以下のコマンドを実行すればOKです.
1 |
$ git remote add upstream https://github.com/D-S-Hub/ml-scratch-challenge.git |
すると,リモートリポとして’upstream’が作られます.リモートリポの一覧を表示するには $ git remote -v を実行しましょう.
1 2 3 4 5 |
$ git remote -v origin https://github.com/<username>/ml-scratch-challenge.git (fetch) origin https://github.com/<username>/ml-scratch-challenge.git (push) upstream https://github.com/D-S-Hub/ml-scratch-challenge.git (fetch) upstream https://github.com/D-S-Hub/ml-scratch-challenge.git (push) |
‘origin’にはforkした先の自分のリポジトリが,’upstream’にはfork元の本家のリポジトリが登録されているのがわかると思います.
8. 本家リポから(自分のローカルリポに)fetchしてmergeする(clone直後は不要)
本家リポ(D-S-Hub/ml-scratch-challenge)の更新に合わせて自分のリポ(ローカルリポとリモートリポ)も更新する必要があります. 本家リポの情報をfetchしてまずは自分のローカルリポにmergeしましょう!
基本的にはmasterブランチを使ってやります.以下のコマンドを実行すればOKです.
1 2 3 |
$ git checkout master $ git fetch upstream $ git merge upstream/master |
これでローカルリポが本家リポと同期されます.(なお,本作業はclone直後は不要です.すでに最新の情報になっているはずなので)
この時点ではまだリモートリポは更新されていないので,手順11.に書いているやり方で,適宜リモートリポにpushしていきましょう.
9. 課題別にmasterから新しいbranchを作成して,課題に従ってファイル作成とコーディングをする
例えば課題「1-1.gradient-descent」に挑戦する場合は,
1 |
$ git checkout -b gradient-descent |
のようにそれ用のブランチを作成してください.ブランチ名はなんでもOKです.ご自身でわかりやすい名前をつけましょう!
(基本的に課題毎にmasterからブランチを作成してください.)
10. 課題の README.md に従ってファイルを作成し,そのファイルにコーディングをする
例えば,「1-1.gradient-descent」では「gradient-descent.py」を作成するとなっています.課題によって指示があるのでそれにしたがってファイルを作成し,コーディングしましょう.
11. git add & commit & pushする
いわゆる普通のGitフローです.commitメッセージはなんでも構いません.この辺りのフローがあやしい人はこちらで一度Gitの復習をしましょう!
1 2 3 |
$ git add . $ git commit -m 'commit message' $ git push origin <branch_name> |
12. 自分のGithubのリポ’ml-scratch-challenge’にアクセスして,Pull Requestを作成する
[New pull request]をクリックすると,以下のページになるので,request元のブランチを確認します
13. Pull Request名をChallenge名(課題のフォルダ名)にして,コメントを記入してPull Requestを作成する.
(重要!!)Pull Request名には,必ずChallenge名(フォルダ名 例: 1-1.gradient-descent等)を指定してください.
なんでもいいのでコメントを書いていただけると嬉しいです!
Pull Requestをした後に,間違えて本家のmasterブランチにmergeしないようにお願いします.間違えてmergeした際にはslackの#ml-scratch-challengeにて@かめと@永山をメンションして教えてください.
14. (オプション)メンターからのコードレビューが欲しい人はSlackの#ml-scratch-challengeチャンネルに投稿する
PRを作成したら是非,SlackにPRのURLを投稿しましょう!特にコードレビュー やコメントを依頼する場合は@永山をメンションして投稿いただければと思います.
15 (オプション)コードレビュー を確認する
コードレビュー を終えたら,Slackの投稿に返信する形でその旨ご連絡します.
コードレビュー を確認できたら,Pull RequestをCloseしてください.コードレビュー 後時間が経っているPR(Pull Request)は運営チームのほうでCloseします.
Close後はSlackの投稿になにかコメントいただけると幸いです.
16. 2回目以降の手順
2回目以降は手順8.に戻って本家リポと同期させてからブランチを作成して別の課題に取り組みましょう!基本的にはmasterからブランチを作成して,各ブランチにそれぞれの課題のファイルを作成するイメージです.
作成した課題をどこか1つのブランチにまとめたい人は適当にブランチを作成して,そこに各課題のファイルをpushしていけばOKです.ただ,それらのファイルがPRに含まれないように注意してください.(PRに複数の課題のファイルが入ってしまうので)
間違えても大丈夫
間違えてもOKです.とにかくPR名に課題名をちゃんと書いてさえくれれば,ゴミファイルがあっても問題ありません.なお,コードレビュー は指定された課題のファイルにのみ行います.(ほかの課題ファイルがあってもそれについては見ませんのでご了承ください)
難しいと思った人は,是非今回の機会に練習しましょう! 一般的な開発の際のGithubのフローに近いので,いい練習になると思います.(一般的な開発現場では最後にmergeしますが,今回の場合はmergeはしません.)
わからないことがあったらDataScienceHub内で聞きましょう.そのためのコミュニティです!
他の人のコードをみてみよう!
他の人が書いたコードを読むことも,自分がコードを書くのと同様以上にスキルアップにつながります.
本家のリポ(D-S-Hub/ml-scratch-challenge)の’Pull requests’タブをクリックすれば,他の人が出したPRを見ることができます.(すでにCloseされたものも見てみてください)
課題名で検索すれば,興味のある課題に絞って一覧を出すこともできます.
課題につまづいたらみてみましょう
それでは,Happy machine learning!!