こんにちは、エディターのうらら(@uraranbon)です。
人物紹介:うらら LIGブログDevRelチャンネル担当のエディター。テクニカルエディターを目指し、プログラミングやIoTについて鋭意勉強中。最近ハマっているのはUnity。 |
森の中から失礼します。ちょっと調べものをしていまして……。
先週からLIGブログの編集部一同で「調べてみた」連載を始めました。私は毎週日曜に記事を出すことに。せっかくの日曜なので、IoTやテクノロジーで “日曜大工” をしてみたいと思います。
今週のテーマとして取り上げたのは機械学習。これは機械が自分で学習する技術のことです。機械に仕事を任せてサボりたい技術的にとても面白そうだったので、調べてみました。
そもそも機械学習って何?
機械学習(machine learning)とは、簡単に言うと「機械(コンピューター)にたくさんのデータを読み込ませ、解析することでアルゴリズムを作ること」です。最大の長所は、人の手でデータを分類するよりも早く、正確に、大量にさばくことができるところ。
新しいテクノロジーだと思われがちですが、1950年代にはすでに登場している技術なんです。(参照)
具体例を見てみましょう。
どういうことができるの?
わかりやすいものだと、画像やテキストデータを認識する次のような例があげられるかと思います。
- ものの認識:「これはリンゴです」「犬です」「携帯です」
- 人の画像から感情の認識:「この人は驚いています」
- 会話文から感情の認識:「この人は怒っています」
- 文章のテーマ:「この文章は政治をテーマにしています」
ビジネスには、例えばこのように応用できるでしょう。
- 商品の推薦:ユーザーの過去の購入データから推測
- 市場の予測:これまでの動きから未来を予測
- 病気の診断:過去の患者のデータから平均を算出
どのような仕組みでデータを分類できるのでしょうか?
どういう仕組みなの?
機械学習は大きく分けて2通りの学習方法があります。
- 教師あり学習(supervised learning)
-
あらかじめ人が分類したデータから、分類したいものを学習させる方法。
例えば、果物を識別する機械学習をおこないたいときに、あらかじめ果物のデータを渡して識別させて、観測から学習させられる。
- 教師なし学習(unsupervised learning)
-
分類させていないデータから学習させる。
大量にありすぎるデータや、人でも分析できないデータを新たに分類・分析したいときに使える。
Gmailを例にあげてみると、自分で重要マークをつけ、その後の重要だと思われるメールにマークがつくのは教師あり学習となり、自動的に迷惑メールが迷惑メールフォルダに入るのは教師なし学習が使われています。
動かすにはどうすればいいの?
機械学習にはさまざまな理論や数学が用いられ、それらからアルゴリズムが算出されています。機械学習をおこなうには、数学とプログラミング言語を学ぶ必要があります。
ちなみに、数学だけでもこのような分野が取り入れられています。
- 統計
- 確率
- 線形代数
- 多変量統計
- 微積分
学習の幅が広いため、「じゃあ、実際に学んでどういうことができるの?」「いつ学習が終わるの?」「いつ良い回答かどうかを判断できるようになるの?」「学び終わったけれど、どうやって機械学習を始めればいいの」という疑問や課題が生まれやすいんです。
海外の大手質問サイト「Quora」では、どのように学習すれば良いかという質問に100件以上の回答が集まるものもありました。それだけ明確ではない、多岐にわたる学習方法があるのでしょう。
・How do I learn machine learning?
https://www.quora.com/How-do-I-learn-machine-learning-1
本を読んでの独学では到底学べなさそうだと思ったので、まずはオンラインサービスで先人の知恵を借りようと思います。
どうやって勉強するの?
機械学習を学べるサイトやサービスはたくさんあります。Quoraの回答にあったサービスや、個人的に参考になる、オンラインで学べるサイトを以下でまとめてみました。
1~4はQuoraの回答で答えられていたもの。5は個人的に分かりやすいと思ったものです。
※私が体験したものではないため個人的におすすめというものではありませんが、日本のメディアでは紹介されていないようなので、伝えるという意味で掲載します。
1. Andrew Ng’s online Machine Learning course
https://www.coursera.org/learn/machine-learning
スタンフォード大学の准教授Andrew Ng氏によるオンラインコース。Week1~11、18のトピックにレッスンが分けられています。英語の授業ですが、日本語の字幕を付けられます。詳しい解説が以下の投稿に書かれているので参考にしてみてください。
・数学を避けてきた社会人プログラマが機械学習の勉強を始める際の最短経路
http://qiita.com/daxanya1/items/218f2e3b922142550ef9
2. Mining of Massive Datasets
スタンフォード大学が提供する教科書。無料公開されており、オンライン上で読めます。
3. Recommender Systems
https://www.coursera.org/learn/recommender-systems
ミネソタ大学の教授Joseph Konstan氏、テキサス州立大学助教授のMichael D Ekstrand氏によるオンラインコース。Week1~8までにレッスンが分けられています。
4. Machine Learning Summer School
https://www.youtube.com/playlist?list=PLZSO_6-bSqHQCIYxE3ycGLXHMjK3XV7Iz
機械学習を勉強したことがない人から、すでに知っているけれど知識の幅をより広げたいと思っている人にも向けられた授業を録画したビデオです。10コースから成り立ち、各コースには5つの授業が含まれています。
5. Machine Learning Mastery
http://machinelearningmastery.com/start-here/
初級から上級まで、機械学習についてが記事で解説されています。今回、機械学習について調べるにあたり、このサイトの記事からかなり学びました。
手軽に導入できるツールはないの?
オンラインで学習はできますが、まずはさくっと試してみたいというときに使えるサービスはないかなと思ったのですが、すでに数十個以上のサービスがリリースされているようです。(参照)
そのなかから、使ってみた人々の反応が良いものを紹介します。
Microsoft Azure Machine Learning
https://azure.microsoft.com/ja-jp/services/machine-learning/
Microsoftが提供している機械学習のプラットフォームです。R言語またはPythonに対応しています。
こちらの使ってみた記事でより詳しい使い方が分かるかと思います。
・機械学習プラットフォーム Azure Machine Learning を使ってみた
http://pronama.azurewebsites.net/2015/03/16/azure-machine-learning/
Google Cloud Machine Learning
https://cloud.google.com/products/machine-learning/
Googleが提供している機械学習プラットフォーム。JSON、Go言語、Java、Node.js、そしてPythonに対応しているようです。詳細はリファレンスからどうぞ。
・Google Cloud Vision API Documentation
https://cloud.google.com/vision/docs/?hl=ja
3行のソースコードだけでできる「indico」
ボストン発のサービス。以下でここでサンプルコードを試せます。対応している言語は、Python、Ruby、Java、PHP、node.js、R言語の6つです。このサービスの特徴は、3行のソースコードを入れるだけで使えること。(参考)
import indicoio
indicoio.config.api_key = "YOUR_API_KEY"
print(indicoio.sentiment_hq("indico is so easy to use!"))
デモは以下から確認できます。
・Sentiment Analysis
https://indico.io/product?api=sentiment
プログラミングをしなくてもいい「Weka」(※データマイニング用)
http://www.cs.waikato.ac.nz/ml/weka/
ニュージーランドのワイカト大学(University of Waikato)が開発した、データマイニングのための機械学習サービスです。データマイニングとは、非構造化データ(unstructured data・構造化されていないデータ)から未発見の知識やパターンを出すためのもので、少し機械学習とは異なります。しかし、データマイニングの作業内で機械学習は使われています。(参考)
GUI(Graphical User Interface)なので、プログラミングを使わなくても扱うことができます。Wekaをはじめて使う方は、こちらの記事で詳しく解説されています。
・How to Run Your First Classifier in Weka
http://machinelearningmastery.com/how-to-run-your-first-classifier-in-weka/
ということで実際にやっていきたいのですが、なかなか記事が長くなってしまったので、来週の日曜日に実践編を出そうと思います。
おわりに
今回調べてみてわかったのは、機械学習の勉強範囲や学習サービスってめちゃくちゃ幅広すぎってことです。また、初心者が頑張って英語ソースから調べてみた記事なので、間違っている箇所やよりオススメのサービスなどがあったら@ligiuraraまで連絡いただけると幸いです。
それでは、また来週!
追記:後編でました! 機械学習について調べてみたら、3行のソースコードを入れるだけで機械学習できるサービスがあった(後編)