エンジニアの副業は週1からでも可能?副業の例や探し方も解説
- ITエンジニア
- 副業
いま話題の機械学習。プログラミングやアプリ開発の経験者であれば、きっと誰もが「一度自分も触ってみたい」と思うのではないでしょうか?
しかし「PythonやR等の言語が機械学習で便利らしい」ということは知っていても、実際のところ何ができるのかはよく知らない人が多いでしょう。
この文章を書いている私自身もまた、
- 大学でプログラミングを学んだ(PERL、CGIとかWeblogの黎明期)
- ビジネスの現場ではコンサルがメイン。要件定義やPM中心だが、たまにコードも書く(PHPとVBAを少々)
- 機械学習の”実際のところ”について、興味はあるけど本格的に取り組めてはいない
という人間です。
今回はそんな私が一念発起し、機械学習の言語について調査を敢行。結果をまとめました。
機械学習といえばPythonやRがよく注目されますが、実はJava、C++、C、やろうと思えばPHPなどでも実行可能です。
大雑把な言い方ですが、プログラミング言語とはデータを処理する命令を機械に送り込むために書くものであって、言語の違いは「方言の違い」程度なのです。しかるべき命令内容が記述できれば、どの言語であっても同様の処理を実行できます。
PythonやRが機械学習で注目されるのは、その2つはそもそも機械学習をするエンジニアリングを想定して開発されてきたためです。同じ計算をさせるために、他の言語ではその計算の中身をゴリゴリとプログラミングする必要があるところ、Pythonではたった数行記述してライブラリを呼び出せば簡単に実行できるのです。つまりPythonやRには、機械学習に便利な部品がたくさん用意されているのです。
また活用方法や実装事例もPythonやRが多く情報発信されており、先人達の足跡を頼りにできます。そのため機械学習の言語としては、ますますPythonとRのユーザーが増えていく傾向にあるのです。(考えてみたら、ひと昔前のJavaやPHPもそうでしたね)
一方でPythonやRにも短所があります。大規模な商用アプリケーションを構築する場合は、パフォーマンス向上や処理の高速化が必須になりますが、PythonやRですでに組み上げられた部品を使う以上は、その性能以上の能力を発揮することはできないのです。実行速度を高速化したいのならば、C/C++やJuliaなどに優位性があるでしょう。
まずは機械学習がどんなものなのかを知りたい人にとっては、やはりPythonがおすすめです。
機械学習に関する情報やライブラリがたくさんある他、言語そのものも非常にシンプルなため、少ないコード量で簡単にプログラムを書けます。プログラミング初心者でも習得しやすいです。
可読性が高いのも大きな特徴。ビジネスの現場ではよく「野良エクセル」「野良マクロ」なんて言い方がされますが、設計書の残されていない他人が書いたコードを読むのはなかなか骨が折れます。変数の一覧や処理のフローを読み取るのも一苦労で、「ちょっと手直ししたい」というだけの作業が非常に面倒です。本質的にはPythonも同じではありますが、可読性が高い分、他言語よりも扱いやすいといえます。。
RはPythonと並んで機械学習に人気の言語であり、解説書等も多数出版されています。R言語はニュージーランド・オークランド大学のRoss IhakaとRobert Clifford Gentlemanにより作られました。
Pythonはパッケージに依存している一方で、Rはより多くのデータ分析がビルトインされており、基礎的な統計モデルを動かす場合はPythonよりもRの方が比較的少ないコードで動作可能。
例えば以下のとおり。
- csvデータをインポートする
⇒ Rだと1行で済むが、Pythonは2行必要- クラスタごとにデータをプロットする
⇒ Rだと3行、Pythonは5行
処理によってはPythonの方がシンプルに書けることもありますが、総じてRのほうがよりシンプルなようです。
一方でPythonには、「BeautifulSoup」といった非常に管理されたライブラリもあり、データベースへの保存やWebサーバーのデプロイ、また複雑なワークフローの実行などがRよりも単純にプログラミングできることも多いです。
具体的な分析の目的があって、ゴリゴリと統計をするならばR、WEBサービスと連動するアプリケーションを作りたいならPython、という使い分けになるでしょう。
Juliaは2009年に開発が始まり、2012年にオープンソースとして公開されたプログラミング言語です。
Juliaの特徴は処理速度に力を入れており、動的言語の中では屈指の速さを誇っています。C言語比ではさすがに劣るものの約1/2倍と健闘、Python比では約10倍以上の処理速度と言われており、驚くべきパフォーマンスを発揮しているといえます。
明確に機械学習や人工知能開発を意識して開発されているため、浮動小数点数計算、線型代数学、高速フーリエ変換、正規表現照合などのライブラリも完備。さらに「機械学習分野で選ばれる言語にする」という目標達成のために、機械学習ソフトウェアライブラリ「Flux」も提供しています。
今はまだ注目度は低いですが、その処理速度や独自性から需要が高まることが期待されます。
Octaveとは、主に数値解析を目的とした高レベルプログラミング言語です。
Octaveの最大の特徴としては「MATLAB(マトラボ)」との互換性が非常に高いことが挙げられます。MATLABとは、アメリカのMathWorks社が開発している数値解析ソフトウェアで、工学・理学・経済学を筆頭にさまざまな業界で100万人以上のユーザーがいます。なおMATLAB自体は商用ソフトであり、個人では負担しづらい価格で提供されていますが、Octaveは無料です。
Pythonと比較して数値計算に強いため、こちらも解析の用途が明確な場合や、スケールした際に上位互換機が欲しいというばあいには選択肢に上がるでしょう。
ここまで4つの言語を紹介してきましたが、実際にどの言語を使えば良いのでしょうか。
その答えは、「機械学習を通して何を実現したいか?」に尽きるでしょう。
思い切って単純化すると、以下のような感じになると思います。
というわけで、実際に私も機械学習に挑戦しました!
今回はPythonで学ぶ 基礎からの機械学習入門を参考に、自分のPCにプログラム実行環境を整えて、コードを書いてみました。例えばcsvデータの読み込みひとつでも、すっきり簡単。技術の進歩にびっくりしました。
少し前にPHPでデータ解析をしてみようと思い立ったことがあり、自作でプログラムを書いていたのですが、csvを読み込む部分を書くだけでもかなりの時間を要してしまったことも……。PHPでもライブラリや関数が用意されていますが、実際に使おうとすると思いどおりに動かない部分が多く、結局csvの読み込み部品は手作業で自作したのでした。(純粋に、私の技術不足かもしれませんが!)
またPythonはデータの読み込みだけでなく、その先の分析もあらかじめ部品が揃えてあり、とにかく動かしたら結果がでます。プログラミングの達人でなくても入門しやすいなと思いました。
一方で機械学習には、統計リテラシーが必要だなとも痛感しました。ただプログラムを組んで実行するのは、例えるなら「運転免許証を取らずに自動車を動かしているようなもの」です。やはり前提知識があってこそ的確にプログラムを動かせますし、結果を適切に解釈するためにも統計の知識は大切だと思いました。
……かといって、統計の勉強をしようと書籍や情報サイトを紐解いてみても、なかなかピンときづらい世界です。自身のビジネスの手元にあるデータをPythonで実際解析しながら、少しずつ機械学習の世界に入門していく。そんな学習の仕方が良いのではと思います。
途中に動作速度について言及しましたが、深層学習(ディープラーニング)などのGPUや並列計算機をブン回すような重い計算を必要とするような処理は、素人が書いたコードではJavaやC++でも遅すぎて使い物にならないそうです。
つまり機械学習の世界でビッグな仕事をするためには、「プログラミング言語の勉強」「統計の勉強」に加えて「計算高速化の勉強」が必要というわけですね……(笑)。
どこまで極めるかはさておき、初学者はまずは実際に触れて体験し、そこから徐々に学んでいくのが良いかなと思います。その道のプロを目指す人でなくても「どんなことが、どこまでできるか」を押さえておくのは何かと役立ちます。
あとはやる気と目的次第!Bon Voyage!
こちらもおすすめ!▼
機械学習にはどんな種類がある?「活用」と「誤解」が進む機械学習の世界
Workship MAGAZINE