Facebook
機械学習は現在のIT業界で最も注目されている技術の一つです。そして、SEやプログラマーとして仕事をしている社会人やソフトウェア開発を専攻している学生であれば、「機械学習を実装するならどの言語か?」と考えた時に「Python」を思い浮かべる人は多いのではないでしょうか。では、なぜ機械学習ならPythonなのか、その理由について考えてみましょう。

目次

1.まずは機械学習の基本的な概念を理解

機械学習とは、システムが与えられたサンプルデータを利用して有益な情報を作り出していく仕組みのことです。コンピューターは人間の力を借りることなく自ら学習・成長し状況に応じて最適な判断をしていくことができるようになります。機械学習をビジネスで利用すれば、時間やお金の節約ができたり、人間が行わなければならない仕事を減らしたりすることができます。

1.そもそも機械学習って?(教師あり学習・教師なし学習・強化学習)

機械学習にはいくつか種類があります。まず、「教師あり学習」「教師なし学習」「強化学習」の3つを理解しましょう。この3つの機械学習は、それぞれに特徴があり優劣はありません。それぞれ分析をする目的が違うので、実際に機械学習の機能を実装する場合はそれぞれの特徴を理解し、どのタイプを選択するか判断する必要があります。

今回は「教師あり学習」、「教師なし学習」、「強化学習」を初心者の方にも理解できるように説明してみたいと思います。それぞれのタイプを「仕組み」、「目的」、「具体例」に分けて説明しています。「具体例」では、できるだけわかりやすくなるように実際の食品メーカーのビジネスでそれぞれのタイプの機械学習が採用された場合、どのような使われ方をするのかを例を挙げて解説します。

【機械学習の仕組み】

1. 教師あり学習
■仕組み
システムに、「問題」とその「答え」を一つのデータとして膨大な量を分析させます。システムはそのデータをもとに、新しい問題が与えられたとき、その答えが何なのか判定します。

■目的
「与えられたデータの答えが何なのか判断できるようになること」になります。

■具体例
「教師あり学習」は、自動販売機で利用されることがあります。この自動販売機は、タッチパネル式で人が前に立つと一部の商品に「おすすめ」と表示されます。これは自動販売機にカメラが付いていて、前に立っている人の性別や年齢を判断し、何がおすすめなのか表示しています。この「自動販売機の前に立っている人の性別や年齢を判断する」という機能に「教師あり学習」が使われています。この自動販売機には膨大な数の人の顔画像とその人の性別と年齢がデータとして与えられています。そして、人が前に立った時に、その与えられたデータからその人の性別と年齢を推測しています。

2. 教師なし学習
■仕組み
膨大な量のデータをシステムに与えます。システムはそのデータを分析し、特徴ごとに分類します。

■目的
「データを特徴ごとに分類すること」になります。

■具体例
「教師なし学習」は新規ユーザーへの宣伝のために利用されることがあります。たとえば、ネットショップでは、アカウントを作成する際ユーザーに年齢、性別、職業などお客様の情報を入力させ、その上で購買情報をデータとして蓄積しています。そして、蓄積したデータからどのような特徴を持つユーザーはどのような商品を買うか分類し、新規のユーザーがアカウントに自身の情報を入力した際、同じような特徴を持つユーザーの購買情報から新規ユーザーの購買傾向を推測し広告などで宣伝します。この「ユーザーの特徴ごとにどのような商品を購入する傾向があるか分類」する機能に「教師なし学習」が使われています。

3. 強化学習
■仕組み
システムが与えられるデータをもとにPDCAサイクルを回していくイメージです。システムがある方法を試しその結果をデータとして蓄積します。過去のデータからより良い結果が得られた方法を採用していきます。

■目的
システムが自分自身を改善していくこと、になります。

■具体例
「強化学習」は既存ユーザーへの宣伝のために利用されることがあります。たとえば、ネットショップでユーザーがサイト内で画面遷移することに自社製品の広告を表示する機能を付けたとします。この時に、その広告がクリックされればそれはユーザーが好きな商品、クリックされなければ好きではない商品、というデータを作りだし、その情報を蓄積してきます。そして、そのデータをもとにユーザーが好きな商品を広告で表示していけるようになります。「広告がクリックされるかどうかを判断材料にユーザーが好きな商品を導きだしていく」という機能に「強化学習」が使われています。

2.なぜ今機械学習が注目を浴びているのか

機械学習が注目されている最大の理由は、ビジネスで大きな成果をあげているためと考えられます。たとえば、「facebook」や「youtube」など多くのwebサービスで採用される「パーソナライズ化」という仕組みは、機能の実装に機械学習を利用しています。閲覧履歴や検索ワードからユーザーの嗜好を想定し、各ユーザーに適切なコンテンツを提供できます。

また、「Growbots」は営業でターゲットとする顧客のリストを手に入れることができるシステムで、これには機械学習が採用されています。営業関連のデータを分析し、低予算で最適な営業活動ができるようになります。さらに、機械学習は会社で社員教育などにも利用されるLMS(Learning Management System)でも採用されています。従業員の学習データを分析し、仕事のキャッチアップのための資料作成を効率的に行ったりすることができます。
このように、機械学習はビジネスにおいて様々な目的で利用されおり、今後もその需要が伸びることが予想されるので、注目が集まっています。

2.機械学習にはなぜPythonが選択されるのか?



上記のグラフはIndeed社の「Job Postings Graph」で,、これはpythonが機械学習関連の案件で最も採用されていることを示すものです。「Python」、「Java」、「R」、「C/C++」、「JavaScript」、「scala」、「Julia」の言語ごとに、「machine learning」または「data science」というワードとセットになっている仕事がどれぐらいあるのか示したものになります。ではなぜ機械学習の実装にはPythonが採用されることが多いのでしょうか?

1.機械学習に使えるPython以外の言語一覧

機械学習の仕組みはPython以外の言語でも実装できます。ここでは「Java」、「R」、「C/C++」、「JavaScript」、「scala」、「Julia」で機械学習を実装する場合の特徴に関してまとめています。

■Java
TIOBE社の調査結果でJavaは現在(2018年6月時点)で最も人気のある言語です(https://www.tiobe.com/tiobe-index/)。そのため、機械学習のライブラリも豊富にあります。人気がある言語なので技術者も数多くおりプロジェクトでも採用されやすく、機械学習の機能も実装しやすくなります。

■R
機械学習用の関数があらかじめ数多く用意されており、実装が非常に楽です。「機械学習を実装するならどの言語が良いか」という議論で、常にPythonと比較されています。ソースコードはPythonと比べるとやや関数型のイメージです(Pythonはオブジェクト指向の言語です)。

■C/C++
機械学習には「Dlib」や「Caffe」などのライブラリが用意されています。コンパイル言語のため、Pythonと比べると難しいと感じる人が多いですが、実行速度はPythonより上です。また、Javaほどではありませんが人気があり昔からあるので技術者は多く、システム開発に採用しやすい言語です。

■Javascript
Javascriptも機械学習用のライブラリやフレームワークはかなり存在します。ただし、クライアントサイドのスクリプトのため、機械学習の実装で使用する場合は注意が必要です。セキュリティの観点からJavascriptでは扱いにくいデータ(個人情報を含むデータなど)が存在し、その場合は採用する言語として不適切になります。

■scala
コンパイル言語のため、Pythonと比べると実行速度は出ます。また、機械学習のライブラリと技術者が豊富なJavaを呼び出せることも魅力です。そして、Javaと比べるとソースコードを短く書けることもあるので、その点も長所になります。

■Julia
科学計算、並列処理、分散コンピューティングを目的として開発されていて速度に重点が置かれています。開発思想は機械学習に適していると言えます。気になる点としては、まだ歴史が浅く、今回紹介している他の言語と比べるとあまり普及していないということです(上記で紹介したTIOBE社のランキングで、Juliaは2018年6月時点では43位でした)。

2.Pythonが他言語に比べ相性が良い理由

Pythonが機械学習の機能を実装する上で採用される理由はいくつかあります。まずはライブラリが豊富にある、ということです。科学演算のための「NumPy」や、もともとはGoogleのAI開発を行っている組織の研究者・エンジニアによって開発され現在はオープンソースになっている「TensorFlow」というフレームワークがあります。

また、Pythonはインタプリンタ言語であるということも、機械学習の実装においては大きなメリットになっています。インタプリンタ言語とはコンパイル言語(JavaやC言語など)とは異なり、実行時に命令を一つずつコンパイルしながら実行します(コンパイル言語は最初にすべてのソースをコンパイルします)。機械学習の機能はトライアンドエラーを繰り返しながら開発していくため、インタプリンタ言語はコンパイル言語と比べ試行錯誤がしやすく生産性の向上が期待できます。さらに、「単純なコードで実装できる」ということもPythonが機械学習の実装で採用されやすい理由の一つになっています。Pythonの開発思想(https://www.python.org/dev/peps/pep-0020/)を見ると、

・Explicit is better than implicit.(暗示的よりも明示的に)
・Simple is better than complex.(複合するよりもシンプルに)
・Flat is better than nested.(階層構造よりもフラットに)


などの言葉があり、シンプルなソースコードで書けるように開発されています。
これらの特徴があるためPythonは機械学習の機能で採用されやすいようです。

3.まとめ

今回はPythonが機械学習で採用されやすい理由を説明しました。その特徴からPythonは機械学習を利用する機能を実装しやいので、これからもシステム開発における主要なプログラミング言語として注目されていくでしょう。