学習ログ 26-09-11 R言語と機械学習

Yasuto TAKENAKA

今日はR言語と機械学習の周辺を見てたのでこの近辺をまとめてメモっておきます。結論から言うと筋の良いプログラミングをするならオススメできるね。参入障壁の高さが初心者殺しなんですが、学ぶという意味ではオンラインのソースが英語ですが充実しています。

🖊️ Rと機械学習

R言語をみるとIDEがRStudioが標準になってて、他言語とは違った独特の世界を作ってると感じる。だけと、今はLanguage Serverが使えるために各種エディタへの対応で補完なども使えますからね。ただ、情報が少なく、経験がないと解決が難しいと感じる。それが敷居の高さでしょうね。JupyterでもRは動くので、そこまでできると気楽なお遊びができるかな。Jupyterでも動かしてるけど、現在の環境では基本は nvim / zed + radian をWSL/Ubuntuで動かしてる形ですね。

vscodeを使う人もいるでしょうけど、IDEみたいなこと余り好きじゃないんですよね。zedでもチョット使いづらいと感じるところがあって、一番扱いやすいのはnvimで扱うときですね。nvimは操作体系の関係で日本語IMEとの相性が最悪ってことくらい。それ以外にzedでも日本語を使うときとアルファベットで済ませるときで切り替えが必要なのでそれすら脳に直結してるっていうのを遮断するコストは感じます。

R言語は良い学習リソースがオンラインで揃ってるのが特徴

余談が過ぎましたが、機械学習まで最新のやり方で学ぼうとすると実はオンラインのリソースが充実してるんですね。ただし、Rはどちらかと言うとアカデミズムなところがあるので日本語ソースは少ないですけどね。環境としてはライブラリは、tidyverse流のやりかたでtidymodelsというのが主流のようですね。

それぞれ学ぶのに良いソースは:

  • 📖 R for Data Science (2e) こちらはオライリーから翻訳された本も売られてますが、tidyverseの主要開発者による本でもあり、オンラインで公開がされている。おまけに、本の演習問題の解答集までもあるんですよね。かなり教育的配慮を感じます。
  • 📖 Tidy Modeling with R こちらがtidymodelsの主要開発者による利用の仕方が書かれたものです。洋書はオライリーからも売られてるけど、日本語版は出てないですね。
  • 📖 An Introduction to Statistical Learning こちらも定評ある統計と機械学習の教科書ですからね。Python版もあるんですが、そちらはLibraryの仕様変更で一部動かないってことはあるのですが、Rの方については問題はなさそうです。

これだけ適切に書き方を示している公式ブックがあるんですね。R言語でのお作法を学べるのと基本的な機械学習の考え方が揃ってるって点が教育的な配慮をすごく感じますね。Tidy Modeling with Rは Ver 4.10からRの公式になった|>流のパイプラインでは余り書かれてないようですけど、若干年代の問題があるのかなと感じます。2010年代からよく使われ始めた%>%のパイプラインは|>すこし違うところはあるんですけど、変更は容易です。頭への負担はさほどでもないです。

R言語で機械学習を学ぶ意義

プログラミングはいろんな流派があってC++やJava的な手続き型やそちらのOOPの流れの考えで書かれることも多いんですが、根本的な概念の理解にはノイズが入りやすくなるんですよね。ワークフローなど副作用やバグを混入させない組み立て方を理解すると思うと、R言語は手続き型の問題点とは対象的に関数型言語を意識してます。源流がLisp系だってこともあるんですが、実は筋が良くなると感じますよ。

Tidy Modeling with Rをすこし読んでみても、機械学習用のコードの理路整然としてるから理解するための余計なノイズが少ない印象を持ちます。 「こういう風にアルゴリズムの組み立てをするんだな」 というのが理解しやすいってことです。実はPythonで主流のScikit-learnもPiplineがあるし、Pandasから取って替わられると思われるPolarsはメソッドチェーンを使う考えなんで、Rで機械学習を学ぶ流れと親和性がいいんですよね。頑丈なシステムを意識した組み方をする場合は副作用をかなり注意知るために手続き言語のやり方より有利なんですよね。副作用をさせないプログラミングは並列処理に有利なので、高速化にも効いてきますよ。

R言語の弱点をみてみる

ここまでたどり着くのが敷居が高いのがRの弱点ですね。WSL/UbuntuでR言語をインストールしてみたけど、ライブラリがソースからのコンパイルが多い。Ubuntu OSにインストールしてるパッケージの不足を見抜かないと解決しないこと多いんですよね。だから、全くの素人が手を出しにくいんですよね。Pythonのほうがかなり敷居が低いです。ただし、Pythonの学習ソースは玉石混淆です。いまは対話型AIの時代になってますから、わからないときにアレコレ相談していれば解決できる場合は多い。すべて解決できるかと言うと経験がないと厳しいところはあるんですがね。OSにインストールしてるライブラリが不足すると、ダイナミックリンクがないというのが起こるんだけど、それを見抜くのが面倒なんですね。c++やfortranのコンパイルエラーを読む事が必要なんで。周りに誰も使える人がいない場合は対話型AIにそれを丸投げして相談してみればいいですよ。

R言語と機械学習の未来

Rについてはライブラリの大半がC++のネイティブコードですが、それがRustに変わりだしたらより堅く安定で高速なものにとって変わっていくでしょうね。たぶん5年単位の時間がかかると思うんですけどね。その頃になったらRustネイティブの深層学習ライブラリをRで使いやすくなるでしょうからね。よりプロフェッショナルな利用は安心と安定な設計からRになっていくんじゃないかと思う。要するにシステム言語がC++からRustに変わりつつある流れと同じことです。先読みするとR言語を取り組むのはよいと思いますよ。