TECH
公開日:

Pythonを活用した機械学習の基礎

今回の記事ではPythonを活用した機械学習についてご紹介します。
Pythonはプログラミング言語の1つで、ここ数年で流行となっている人工知能(AI)との相性の良さが人気の理由にもなっています。
機械学習はAIの中の一分野であり、最近のAI進化に貢献している技術でもあります。

この記事では、機械学習の基本的な部分に加えて、Pythonを使って機械学習に取り組む方法についてご紹介します。また、Pythonで使える機械学習のライブラリもご紹介します。

プログラミング言語「Python」とは?

Pythonは1991年に開発されたプログラミング言語です。文法をなるべく単純にすることで、ソースコードを読みやすく、かつ書きやすいように設計されています。海外では小学生へのプログラミング教育用としても使われているほどです。
使用用途としては、WebアプリケーションやAI、統計解析など幅広く使われています。Google社が主要言語として取り入れていることでも有名です。

最近、話題となることの多いAIには、GoogleやFacebook, Amazonなどアメリカの大手IT企業がこぞって参入してきています。そのAI分野においてもPythonがよく使用されています。日本企業も徐々にではありますが、導入され始めるなど、ビジネス現場の生産性向上に活用され始めています。
PythonはAIの中でも特に機械学習、ディープラーニングという分野での使用が多いです。Pythonには拡張モジュールが用意されており、より高速な処理C言語/C++を使って独自の拡張を行うこともできます。
AI開発に携わりたい人でPythonの技術を持っている人にとっては活躍できるチャンスのタイミングだと言えるでしょう。

機械学習とは?

機械学習とはそもそも何でしょうか。
機械学習とは、人間が当たり前のように自然と行っている学習能力と同様の機能をコンピュータで実現しようとする技術です。機械学習が登場する前は、コンピュータが画像を見て、そこに写っているのが猫なのか犬なのかを区別することがとても難しかったです。

しかし、人間はある程度の年齢の子供でさえも猫か犬かを簡単に見分けることが可能です。この、AIにとっても難しく、人間にとって簡単なこと、この差を少なくすることができるようになったのも機械学習の影響があります。
機械学習には大きく分けて、教師あり学習、教師なし学習があります。簡単に言うと「正解を与えない状態で学習させるのが教師なし学習」、「正解を与えた状態で学習させるのが教師あり学習」です。

よく使われる言葉で、機械学習との区別が必要なものとして「ディープラーニング」があります。ディープラーニングは機械学習をさらに進化したものです。学習方法として、人間の神経を模倣した「ニューラルネットワーク」を使っています。例えば、機械学習では「赤いリンゴ」と「青いリンゴ」を区別するとき、色という特徴量を与えることで着目するポイントを明示しなければなりませんでした。ディープラーニングでは着目ポイント自体をAIが見つけるようになります。

教師あり学習

画像認識を例にして説明します。
他には、迷惑メールの振り分けにおいて教師あり学習を使うことがあります。迷惑メールは膨大な数がありすぎて目視での確認は困難ですが、迷惑メールの特徴を大量のデータから学習させることによって判別できるようになります。データさえ大量に準備することができれば、初期段階から高い精度を出すことができます。

教師なし学習

正解・不正解のデータを与えない状態での学習方法です。
教師あり学習に比べると、初期段階での精度は低いことが多いでしょう。しかし、その後の学習次第で精度を上げることもできます。教師なし学習の有名な例としては「Googleの猫」があります。ネット上にある画像や動画を1週間読み取るうちにAIが自律的に猫を認識するようになったのです。
正解が無い状態から正解を見つけるケースとしては教師なし学習の方が適しています。

  • Googleの自動運転車

⇒画像認識により、障害物を検知することができます。また、車載カメラの映像から歩行者を検出して車の事故防止に役立てることもできます。

  • AmazonやZOZOTOWNなど、オンラインショップのレコメンド機能

⇒日常生活に応用された機械学習の例です。もしかしたら、身近になりすぎて気が付いていないかもしれませんが、これはよく見かけます。

  • TwitterやInstagramで顧客が投稿している内容を分析する

⇒マーケティングへの活用事例です。機械学習と言語ルールを組み合わせて判定します。

  • 不正検知

⇒社会における明白かつ重要な機械学習の用途の1つです。中国では交通違反をした車の特定にも使われています。

  • ICT画像を解析して病気の原因をコンピュータに探させる

⇒人間の目だけでは病気の原因を特定できない場合であっても、AIの目を活用して病気の原因特定が可能です。

  • 対話インターフェース(Siriなど)を作ってコンピュータと会話をする

⇒音声を解析することによって、AIと人間が疑似的に会話をしているようにみせることができます。

このようにいろいろな分野において機械学習が活用されていることがわかります。

なぜPythonが機械学習に好まれる?

そもそもなぜPythonが機械学習の分野に好んで使われるのでしょうか?いくつか考えられる理由を挙げます。

理由① プログラミング言語の信頼性

冒頭で紹介したようにGoogleが主要言語として採用していることの信頼性は大きいです。Pythonは他にもYouTubeやInstagramでも採用されています。

理由② 簡単な文法

Pythonの文法は他のプログラミング言語と比べるとコードの読みやすさが特徴的です。
プログラミング言語のコードは人によって書き方のスタイルが違うため、自分以外が書いたコードは読みづらいと感じることも多いです。
その点、Pythonでは本当にシンプルかつ最低限のコード量での記述が可能で、他のエンジニアが書いたコードを読むことがとても楽です。
機械学習エンジニアはプログラミングだけが仕事の全てではありませんので、コーディングすることやコードを読む作業に余計な手間や心配をかけたくないのです。

理由③ プログラミング初心者向き

Pythonは初心者に優しい言語だとも言われます。AIや機械学習と聞くと、プロの熟練プログラマーがコーディングしているイメージを思い浮かべる方も多いかと思いますが、機械学習エンジニアには数学や統計を専門的にしてきた人が多いです。
プログラミングを先に経験してきて、その中で機械学習に触れた人は別として、数学や統計学を行なってきた人には、プログラミングの土台となる知識や経験はありません。
そういった人達が好んで使ったのがシンプルかつ読みやすい、初心者でも比較的簡単にコーディングが可能なPythonでもあります。

理由④ 豊富な機械学習関連のライブラリ

Pythonには、非常に多くの機械学習向けのライブラリやフレームワークがあります。
Googleが開発してオープンソースとして公開している機械学習に用いるライブラリのTensorFlowや、非常に簡単にディープニューラルネットワークの構築が可能なKerasもPythonの上に成り立っています。
Pythonをベースとして活用できる機械学習向けのライブラリやフレームワークは多数存在することも、Pythonが機械学習で人気があると言えるのです。Pythonで機械学習に取り組む上では、一からプログラミングを行うよりかは、以下でご紹介する役立つライブラリを有効活用することをオススメします。

>>エミリーエンジニアでPythonの案件を見てみる

機械学習に役立つPythonライブラリ

機械学習に使えるPythonのライブラリは多くあります。それぞれ実装している機能が異なり、向いている処理も違いますので、

scikit-learn

scikit-learnはPythonの機械学習ライブラリであり、個人利用や商用利用問わず、誰でも無料で利用することができます。
インターネット上で情報を探すのも簡単です。また、サンプルのデータセットが付属しているため、インストールしてすぐ機械学習を試すことができます。例えば数字のサンプルデータが付属しています。
初心者が機械学習を学び始めるには適したライブラリです。初めて機械学習を使うエンジニアがまず簡単なプログラムを作ってみるときによいでしょう。

TensorFlow

TensorFlowは、2015年11月にオープンソース化されたGoogleの機械学習ライブラリです。Google社内でも業務でTensorFlowが使われています。Tensorとは、線形的な量を表す概念を一般化したもので、多次元の配列として表現できます。顔認識システムの例で説明します。
監視カメラからのデジタル画像を元に顔を識別し、顔の画像が登録されたデータベースと比較することによる識別を行う場面で利用可能です。
顔認識のアルゴリズムは顔の画像から特徴を抽出することで、高い精度で識別を行うことができます。ここに機械学習を採用するメリットが生まれるのです。

また、音声認識技術で人の声をコンピュータに認識させて、話している人を識別する、あるいは文字列に変換することもできます。
音声認識では、発話を記録して認識対象の音声データから抽出した特徴と、登録された音声データの特徴を比較して、一番近い言語を認識結果として出力します。
TensorFlowは分散学習が可能なことが特徴の1つとしてあります。大量なデータをもとに学習させたいときにオススメです。

Chainer

Chainerはニューラルネットワークを実装するためのライブラリです。日本人が中心となって開発されています。
以下の特徴があります。

①高速:CUDAをサポートし、GPUを利用した高速な計算が可能です。
②柔軟:柔軟な記法により、畳み込み、リカレントなど、様々なタイプのニューラルネットを実装可能です。
③直観的:ネットワーク構成を直観的に記述できます。

Chainerはコーディングが直観的かつシンプルなので、単純なネットワークからディープラーニングまで幅広く対応できます。

ただし、Chainerを扱うには、ニューラルネットワークに関する知識が必要不可欠である点はデメリットでもあります。ニューラルネットワークによって実現したいことはあるが、まだ具体的には決まっておらず、作りながら定まっていく開発の場合にオススメです。

まとめ

今回はPythonを活用した機械学習についてまとめました。
Pythonはプログラミング言語としても汎用性が高く、習得の難易度も他の言語と比べて低いため、取っ掛かりやすさという意味では他の言語よりも優れています。

さらに、今回紹介したライブラリも用意されているため、初心者であっても機械学習に取り組みやすいメリットがあります。
機械学習の基礎的な知識については本などを使って学習するとして、プログラミングに対する学習の障壁を低くするという意味でもPythonと機械学習の相性は良いと言えるでしょう。
今回お伝えした内容を少しでも現場の開発にも活かしていただきたいです。

おすすめ案件

関連タグ

フリーランスエンジニアの案件をお探しします!
上記案件のほか、非公開のPython案件も多数あります