Day 49 Kaggleコンペ初submit
出場コンペ決めるまで
- SIGNATEで調子に乗って、Kaggle初コンペ出場. → まず良さげなコンペを探すのに一苦労😭
最終的に君にきめた!: https://www.kaggle.com/competitions/feedback-prize-english-language-learning/overview
Kaggler大先輩様の奮闘を見るべく、kaggle wikiのリンクを全部見る.
- https://kaggler-ja-wiki.herokuapp.com/%E3%81%AA%E3%82%93%E3%81%A7%E3%82%82kaggle%E9%96%A2%E9%80%A3%E3%83%AA%E3%83%B3%E3%82%AF
赤裸々に「最初はMost votesのほぼコピペだった」とかいう先輩もいて驚き. なるほど、誰でも最初はbegginerなのだ.
Kaggle日記を自分も始める. ツイッターは、時間を溶かしそうなので現状手を付けず.
思ったよりも時間をかけてしまい、キカガクの講義進められず😭
丁寧なデータ確認、ドメイン知識の獲得、世界のKaggler様のNote/Discussionを読むこと、がメダル獲得の近道そう. 焦ってやってもあんまし意味ない🙄
奮闘記録
Feedback Prize - English Language Learning
https://www.kaggle.com/competitions/feedback-prize-english-language-learning/overview
コンペの概要を確認.
データの概要をおさえるため、「begin」でnote検索し、易しそうなEDA結果を確認.
- FB1, 2で似たような問題があった模様で、そのときにtab, spaceを除く前処理をしたらスコアが上がったとの情報?
- スコアが高いcodeでも、前処理を行っているcodeがない. 前処理にも鍵がありそう.
- すくなくとも/n, /tくらいは除いたほうがいいか
Vote数の多いCodeをざっと確認
- Debarta-v3-baseを使用. ハイパーパラメータチューニングはしていない.
- https://www.kaggle.com/code/yasufuminakama/fb3-deberta-v3-base-baseline-train
- https://www.kaggle.com/code/yasufuminakama/fb3-deberta-v3-base-baseline-inference
- 再現実験を行うも、submissionでerror. Timeoutじゃないエラーなので分からず.
- それぞれのスコアをLightGBMで試す猛者
- Debartaのbase, largeでそれぞれでスコア出して、アンサンブル (submit完了!)
- https://www.kaggle.com/code/cdeotte/rapids-svr-cv-0-450-lb-0-44x
- とりあえず初submitはこれで. (800位/1480位中)
- 今回、LB scoreが0.01違うだけで順位がガラリと変わる!逆に、ちょっとしたチューニングで、銅メダルの可能性は十分にある. → 過学習が心配だけど、やっていくしかない.
- Debarta-v3-baseを使用. ハイパーパラメータチューニングはしていない.
現状のアイデア
- Debarta以外の複数のTransformersでも試してみて、アンサンブルにかけるか
- LightGBMの結果も思いきってDebartaと一緒にアンサンブルにかけるか.
- Debartaで出した最終的なスコアを、XGBでスタッキングする?
前処理関係のアイデアがほしいが、note読んでてもあまり効果的なものが見つからない. 生データみても、普通のテキストでしかないので、言語処理関係を再度見直すか.
必要なこと
- 自然言語処理の基礎学習
- スタッキングの練習 (基礎から)
- Discussion読んでみる
- Debarta-v3-baseのref読んでみる.
Day 48 SIGNATE、Kaggleコンペを始めました
データサイエンティスト分野で知らない人はいないであろう、データ分析コンペです.
ここ数日ブログ更新できていませんでしたが、寝る間も惜しんで分析進めた結果、SIGNATEでは金メダル2つ圏内取得 (クラスUP!).
Kaggleも念願の初submitに至りました.
Kaggleは本当に時間が取られますが、自分で手を動かして分析を進めると非常に勉強になります.
これまで精神論的な話しかできていませんでしたが、そこらへんの記録を残したいと思います.
2022/10/14の記録
SIGNATEのSOTAチャレンジに出場.
Kaggleよりかはとっつきやすいテーマだったため、1日で2個挑戦. なんと2つとも上位入賞.
①【第27回_Beginner限定コンペ】債務不履行リスクの低減 🥇
- コンペ系初挑戦. とっつきやすいテーマ. SIGNATE begginer → intermediateへ昇格チャンスなので、これを逃さない.
- 前処理を施し、とりまXGBoostぶちこみ. 決定木なので標準化とか欠損値処理は行わない. → 高いスコアでず....
- 調べてみると、目的変数が不均衡. Under samplingで対応できそうかも.
- 実際Under sampling、XGBoost(ハイパーパラメータチューニング済)で、うまくいった!祝!🥇金メダル🥇! 昇格しました.
- 本当はアンサンブルとかスタッキングとか試してみたかった. まだしたことがないので...
- まだ改善の余地はあるが、ランクを上げることを優先し、一旦これにてclose.
② SIGNATE Student Cup 2021秋:オペレーション最適化に向けたシェアサイクルの利用予測 🥇
- 前職の経験を活かし、これは単純な移動平均モデルでいいのでは?と試行し、なんとうまくいく. SARIMAモデルとかも案外馬鹿にできない.
- というか、このような「需要」予測って、影響するパラメタが多すぎて、かえって単純な移動平均モデルがうまくいくのかもしれん.
- 案外、pandasでの処理に苦戦. まだまだpythonの腕が足りん.
- 結果: 祝!金メダル🥇圏内!
- URL: https://signate.jp/competitions/567/leaderboard
次やりたいSIGNATE SOTAチャレンジ
- 「SIGNATE Student Cup 2021春:楽曲のジャンル推定チャレンジ!!」をやりたい. これも、テーブルデータからのclass分類なので、基本問題.
- ざっとデータを眺めてみたが、外部データも必要なさそうなので、案外すぐにできそう.
- これで金メダルとれば、SIGNATEのクラスはAdvancedくらいには上がるか.
現状のGit、キカガク進捗
Github
キカガク
Day 47 精神論は嫌いだが、
本日の学習プランと結果
内容 | 結果 | 備考 |
---|---|---|
キカガク: 画像認識 fine tuning | X | |
キカガク: 時系列解析 | X | |
キカガク: 自然言語処理 | X |
追加で行ったこと
- Web Scrapingの基礎/応用
- Flask
- リーダブルコード講習
Github
記録
「やり始める」こと自体は気合でやるしかないという結論に至った.
精神論が嫌いだ.
「そんなものは気合でなんとかしろ」というのは、あまりに抽象的な指示であり、再現性もない.
ただ、どうしても気合 (正確に言えばメンタル面)で乗り越えるしかないな、と思うシーンがある.
「なにかを始める」ときだ.
独学で勉強を進める以上、教師がいるわけでもなく、周りの目が厳しいわけでもない.
どうしても怠けてしまい、後回しにしてしまうのが人間だ.
("その人"が悪いのではなく、人間というのは本能的にそうらしい)
よく書籍等で見かける対策が「とにかく始めること」であるが、「始める」ことさえも億劫なときがある.
それを乗り越えるには、最後はやはり"気持ち"の面でしかないのだ.
1行でいいから、コードを書こう.
10秒でいいから、ドキュメントを読もう.
これらの「スターター」は、最後は結局「目標を達成したい」という強い気持ちでしか発動しえない.
システム化することも1つの手ではある. 筋トレだったら、ベッドの上にダンベルを置いておいて、寝る前にかならずやるようにする、とか.
ただ、それも結局は「ダンベルをベッドからおろせば」寝ることはできるわけだし、究極の手段ではない(思い出すための手段でしかない).
色々とシステム化も試したが、究極のところは「気持ち」の問題になるのだ.
そのためには、「是が非でも目標を達成したい」という強い気持ちが必要になるのだ.
どうやって気持ちを整えるのか?
固い言葉で言えば「自己マネジメント」と呼んでもいいだろう.
「自分はメンタルが強い!モチベーションをずっと維持できる!」と思っていても、モチベーションが下がってしまうタイミングはどうしてもあると思う.
(現に、自分はそうだった)
自分を過信せず、まずは「そのように、強い気持ちを持っていてもモチベが下がってしまうのも自分の一面である」と認め、そのような自分と、うまく付き合う方法を確立しよう.
勉強というのは、短距離走ではなく、マラソンのような、長い長い持久走なのだ.
自分との付き合い方
自分の取扱説明書といったところか. 面倒なやつだなあ.
下記はあくまで私の場合の例.
- ちょっと疲れたとき: 15分寝る. ← なんだかんだ一番効果的. 目を休ませる.
- 笑いたいとき/息抜きしたいとき: 芸人のYoutubeをみる
- 気合を入れたいとき: 受験生版TFをみる (宮大工の回とか)
- 感傷にひたりたいとき: 好きな曲を聞く、アニメを見る.
- 家の中が飽きたとき: 散歩する
明日の計画
振り返りメニュー
向き合ったら○をつける。
課題克服メニュー | クリア | 理由 |
---|---|---|
1. 優先順位を設定する | - | |
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする | C | 「まずははじめてみる」 |
3. 振り返る | O | このブログ |
4. 継続する | O | このブログ |
5. 気づき・考えたこと・思ったことをまとめる | O | このブログ |
6. 嘘をつかない・見栄を張らない | O | |
7. 収支の把握 | O | |
8. 没頭する | O |
Day 46 GPU
本日の学習プランと結果
内容 | 結果 | 備考 |
---|---|---|
キカガク: 画像認識 入門 | C | GPU利用制限にひっかかった. |
SIGNATE 練習問題 1問 |
追加で行ったこと
Github
記録
GCPはうまく使わないとすぐにGPU制限に引っかかる
ついにGPU利用制限にかかってしまった.
朝から重いCNNをガンガン回してしまったためだろう...10GB近くするGPUを無料でガンガン回せる時点で、相当にすごいのだが、学習を進めていく際には少々やっかいだ.
GCPでたまに使える「Tesla T4」は、市場価格40万近く.
GCP Proの月額が100コンピュートあたり1000円なので、そう考えるとよほどの専門職でない限り、GCP Proに入会するほうがよほどお得そうだ.
ちなみに、GCPで用意されていないライブラリを毎回pip install
するのが大変に面倒くさい.
と思ったときに、下記のようなサイトを見つけた.
https://qiita.com/ezoalbus/items/d42d47685b592816054d
https://ggcs.io/2020/06/22/google-colab-pip-install/
なるほど、Google driveにパッケージ自体を保存しておくのか.
この方法であれば、notebookを開くたびにインストールする手間はなくなる. しかし、新しいnotebookで毎回連携→driveに保存しなければいけないのも、面倒だなあ...
GPU利用制限の間に何をするか?
GPU使わなくて済むことをしよう (当たり前).
数学だったり、WEB系の知識習得だったり.
明日の計画
内容 | 分量 | 結果 |
---|---|---|
キカガク: 画像認識 fine tuning | ||
キカガク: 時系列解析 | ||
キカガク: 自然言語処理 |
振り返りメニュー
向き合ったら○をつける。
課題克服メニュー | クリア | 理由 |
---|---|---|
1. 優先順位を設定する | - | |
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする | C | もう少しスピード感がほしい |
3. 振り返る | O | このブログ |
4. 継続する | O | このブログ |
5. 気づき・考えたこと・思ったことをまとめる | O | このブログ |
6. 嘘をつかない・見栄を張らない | O | |
7. 収支の把握 | O | |
8. 没頭する | O |
Day 45 まずは確認/調査しながら写してみる
本日の学習プランと結果
内容 | 分量 | 結果 |
---|---|---|
キカガク: OptunaによるNN構造探索 完了 | O | |
キカガク: 画像認識 入門 | C |
追加で行ったこと
- ベイズ最適化に関する初期調査.
- SIGNATE 練習問題
Github
記録
ベイズ最適化
Qiitaの記事はホンマかいな?と思うことも結構書いてある. こういうのは「ベイズ最適化 良書」とググッて、本を読んだほうがいい.
図書館で下記本を借りてくる.
- ガウス過程と機械学習(機械学習プロフェッショナルシリーズ)
- 実験計画法 方法編 基盤的方法から応答曲面法,タグチメソッド,最適計画まで
- ハイパーパラメータをどのように最適化していくか.
- 初期調査をネットで進めると、直交法はもはや使われない?応答曲面に関する日本語の文献を見ておきたい.
Google ColabからGithubのprivate repositoryにcommitする方法
Qiitaに投稿予定.
Documentsの読み方/身につけ方
Documentはざっと読むだけでも面白い. 「この書き方は~~までに廃止予定」とか、結構criticalなことも書いてあるので、面倒くさがらずに適宜読むこと.
(そのためにも基本的な英語くらいは学んでおこう)
- 読み方: Sampleよりも上に概要が書いてあるので、ざっと読む.
- 身につけ方: Sampleコードを、わからないところはざっと調べながら写す.
- コピペはもってのほか. 個人的には、多少時間かかってもコードをうつことが理解定着に繋がると考える.
明日の計画
内容 | 分量 | 結果 |
---|---|---|
キカガク: 画像認識 入門 | ||
SIGNATE 練習問題 1問 |
振り返りメニュー
向き合ったら○をつける。
課題克服メニュー | クリア | 理由 |
---|---|---|
1. 優先順位を設定する | - | |
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする | C | もう少しスピード感がほしい |
3. 振り返る | O | このブログ |
4. 継続する | O | このブログ |
5. 気づき・考えたこと・思ったことをまとめる | O | このブログ |
6. 嘘をつかない・見栄を張らない | O | |
7. 収支の把握 | O | |
8. 没頭する | O |
Day 44 NN構築できるようになった / Batch Normalizationについて
本日の学習プランと結果
内容 | 分量 | 結果 |
---|---|---|
キカガク: 機械学習の基礎3 完了 | O | |
キカガク: Streamlitの基礎 完了 | O | |
キカガク: ディープラーニングの基礎1 完了 | O | |
キカガク: ディープラーニングの基礎2 完了 | O |
Github
ひとこと
PyTorchを使用してニューラルネットワークをついに自分で構築できるようになった.
(そして、これまで理解できていなかったコードの意味についても、きちんと理解できるようになった)
次はOptunaによるNN構造そのものの探索にチャレンジする.
Kaggleにも挑戦していくが、DLが必ずしも最適とは限らない.
XGBoostのようなアンサンブル学習も改めておさえつつ、機械学習の基本からさらにステップアップしていきたい.
Batch Normalizationについて
キカガクで、ここの説明は非常に浅かったため、自分で色々と調査した.
- ミニバッチ1の学習が終わり、ミニバッチ2の入力が始まったとき. ミニバッチ2とミニバッチ1のデータ分布があまりに違うと、全く違うパラメータで更新されてしまう. さらにミニバッチ3がミニバッチ2と全く違う分布だったら...学習が大変非効率になる. (内部共変量シフト)
- この問題を解決するために、各ミニバッチごとに平均と標準偏差をもとめ、下記のようにx^へ各変数ごとに変換して、入力するデータ分布をある程度一定にしようとするのがbatch normalization.
- α、βは学習するパラメータで、ここで非線形性を確保する. 平均β、標準偏差αとなるように変換を行う. 元データから平均を算出するのではなく、βと宣言するため、平均値の計算が不要となり、学習効率が上がる.
下記、参考となるサイト. 内容が怪しいサイトも中にはあるため、要注意.
効果
- 初期値への依存性が低くなった
- 正則化の役割を持つためDropoutを使用しなくてもよい
- 学習が早い
- 学習係数を大きくしても発散しない
明日の計画
内容 | 分量 | 結果 |
---|---|---|
キカガク: OptunaによるNN構造探索 完了 | ||
キカガク: 画像認識 入門 |
振り返りメニュー
向き合ったら○をつける。
課題克服メニュー | クリア | 理由 |
---|---|---|
1. 優先順位を設定する | - | |
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする | C | ちょっと悩んだら、手を止める前に調べて実装する流れにしている. |
3. 振り返る | O | このブログ |
4. 継続する | O | このブログ |
5. 気づき・考えたこと・思ったことをまとめる | O | このブログ |
6. 嘘をつかない・見栄を張らない | O | |
7. 収支の把握 | O | |
8. 没頭する | O |
Day 43 最初は浅く広く.
本日の学習プランと結果
内容 | 分量 | 結果 |
---|---|---|
キカガク: 機械学習の基礎1 完了 | O |
追加で、機械学習の基礎2も完了. 章末問題は特に問題なし.
前々から繰り返しやっていることなので、すでにある知識を復習/さらに深掘りしている.
現在基礎3.
Github
ひとこと
機械学習の領域は、一朝一夕ではとても身につけられないくらい、深淵な世界である.
どんな教科書/サイトでも最初の方に記載されている「重回帰分析」は、とっつきやすい内容ではあるが、
その内容を本当に理解するためには、線形代数の知識/応用が必要だし、
統計についても分かっておかなくてはいけない.
そう、どんなに「分かっている」つもりでも、全くまだまだスタートラインにすら立っていない状況である可能性さえもあるのだ.
学習をはじめて数ヶ月近くになる (最初は線形代数の復習からだった)が、
何度も何度も手を動かして、それでやっと分かってきたこともあれば、
まだ分からないこと、知らないこともたくさんある.
焦ってはいけない.
人生は (勉強の)旅である.
一生向き合いたいと思っているからこそ、今楽しく勉強を進められているし、そんなに焦りもない.
この人生を、この分野にかけたい. そして、これまで積んできた経験もかけ合わせて、Only Oneの存在になる.
ちなみに
Udemyを活用していたが、さすがはキカガク.
どのUdemyの動画よりも解説が体系的でわかりやすい.
11月から個人ミーティングも始まるが、非常に楽しみである. それまでに一通りはやっておきたい.
明日の計画
内容 | 分量 | 結果 |
---|---|---|
キカガク: 機械学習の基礎3 完了 | ||
キカガク: Streamlitの基礎 完了 |
振り返りメニュー
向き合ったら○をつける。
課題克服メニュー | クリア | 理由 |
---|---|---|
1. 優先順位を設定する | - | |
2. 考えすぎずに手を動かす・気付いたことはすぐにメモする | C | ちょっと悩んだら、手を止める前に調べて実装する流れにしている. |
3. 振り返る | O | このブログ |
4. 継続する | O | このブログ |
5. 気づき・考えたこと・思ったことをまとめる | O | このブログ |
6. 嘘をつかない・見栄を張らない | O | |
7. 収支の把握 | O | |
8. 没頭する | O | 寝食を忘れることがある. というか、お腹が空いても眠くてもやりたい. |