Scalaで集合知プログラミング その1
Scalaお勉強の第2弾として「集合知プログラミング」をScalaで読んでいくことにしますデス。Let's OMOITSUKI!ヒャッハーって感じですが(´・ω・`)
「集合知プログラミング」ではサンプルがPythonで書かれているので、別方面でお勉強中のPythonの復習になるという一石二鳥を目指してみます。
実際のところは「行ける感じなら続けていこうかな」ぐらいのユルイ感じですが、まあとりあえず第1章:集合知への招待からはじめて行きましょうかね(´・ω・`)
1章は「集合知とはなんぞや?」という座学的な内容デス。サンプルコード等は出てこないので掻い摘んでまとめていきますデス。
とりあえず読み進める前の集合知イメージとしては「多くの人々から集めたデータに何らかのアルゴリズムを適用することで新たな知見を発見する」ことって感じですかね?
それでは読み進めていきますよ(`・ω・´)
集合知とは何か?
集合知といった場合、特にインターネットが発展してからの集合知の例としては次の2つが挙げられますデス
- Wikipediaのように大量のユーザの活動の結果として知識が蓄積していく
- GoogleのPageRankのように利用者のデータ(Webページ等)に何らかのアルゴリズムを適用し、新たな価値あるデータを創りだす
集合知プログラミングではこの2つのうち後者を取り扱っていくようです。ユーザのデータや何気ない振る舞い等を記録して、それらに機械学習等のアルゴリズムをを適用することで新しい価値あるデータを作るタイプの集合知とのことです。
普段何気なく集合知と言ってるものの実際はいくつかのタイプに分散されるのですな(´・ω・`)ちなみに前者はCGMとかそういった類のものと思えばいいかしら?
機械学習とは何か?
ほとんどすべてのデータには何らかのパターンが含まれているはずで、そのパターンを機械的に学習して一般化してすることで将来的に現れるデータを予測しますデス(´・ω・`)この一般化をする際にデータのどの面が重要なのかを決定づけるモデルを学習によってトレーニングしていくことを機械学習と呼ぶみたいですね
機械学習でのモデルのイメージはEmailフィルタリングを例とすると次のようになるみたいです
- 普段受け取るEmailで「オンライン薬局」という単語を含むスパムが多い
- 「オンライン薬局」という単語がある場合はスパムと見なしてゴミ箱に捨てる
上記のような「オンライン薬局」→”スパム”というメンタルモデルを機械学習アルゴリズムに報告することでスパムフィルタを構築することが出来るのだとか…まあ、一般化していけば数式表現ができるからコンピュータ処理に置き換えられるよ!という理解でいいかしらね?
なお、機械学習のアルゴリズムには例えば次のようなものがありますね
- 決定木
- ニューラルネットワーク
それぞれに得意分野があるので適用できる問題のタイプが異なりますが、これらの多くは数学と統計学に非常に依存しているみたいです。なので、この本では実際に機械学習で扱われる統計学も一緒に学んでいきましょー、とのことです。
機械学習の限界
機械学習は基本的に、既に見たデータを基にしか一般化出来なくて、その既に見たデータを基にした一般化でさえ完全ではないです。例えば人が行うような経験からくる判断や第6感的な判定は出来ないわけですね。
また機械学習はこのよに存在する全てのデータを取り扱っているわけではないので「過度の一般化」という問題、つまり少ない例を基にした一般化(必ずしも正確にはできない)ことをおこなっているので、例えばスパム認定した単語(例:オンライン薬局)を含むけども自分にとって重要なメールをスパムとして判定してしまう可能性があるデスな(´・ω・`)
これを防ぐにはアルゴリズムに対して新しい学習を行わせてより精度の高いものに仕立て上げる必要があるわけデス
…まあ、ようするに機械学習は強力で有用だけども人間と全く同じことは出来ないから、弱点は知っとけ、な(`・ω・´)ってことですかね?
実生活における例
実際に集合知を利用したサービスを羅列していきますよー
- Amazon, Netflix
- ユーザの購入情報やレンタル情報を基に類似商品を決定して、購入履歴を基にした推薦を行っている
- Pandora, Last.fm
- ユーザからのバンドや曲に対する評価を基にユーザに応じたラジオ局を提供する
- Hollywood Strock Exchange
- 映画株の集団購入サービス。購入者全員の振る舞い(売買状況)による映画興行収入の予測は専門家よりも正確みたい
- eHarmony
- 参加者から集められた情報をもとにして相性のよいカップルの組み合わせを提供するデートサイト
…(´ε`;)ウーン…様々なサービスが有るもんですねぇ
学習アルゴリズムのその他の使用
Webサービス以外の機械学習の適用はこんなのがあるみたいですね
- バイオテクノロジー
- DNA配列やタンパク質の構造等からのパターンの発見
- クレジット詐欺の発見
- ユーザの利用状況を分析することで不審な取引や現金の動きがないかを監視
- ニューラルネットワークを利用した帰納的ロジックが使われてるとか
- マシンビジョン
- 製品のマーケティング
- クラスタリング等の手法によるトレンド予測
- サプライチェーン
- 需要予測による最適化を行うことでコストダウンをマザしているみたいです
- 株式市場の分析
- 数学使いまくりの分野なので、当然ここにも機械学習が(´・ω・`)
- 国防
- 膨大に集まるデータの分析に利用されてるとか…エンシェロンとか?
...と、まあWeb以外にも様々な分野で使われているわけですな。なので頑張って機械学習を勉強していきまっしょい(`・ω・´)ってことみたいです
いじょうー
第1章は以上です。導入的に機械学習とは?っていうお話でした。次回は2章の推薦についてやっていきたいと思います。今回は座学的文字ばかりでしたが次からは具体的なコードが出てくる予定です。
この分野は大学院の頃に片足を突っ込んでた分野なので、懐かしさ半分ワクワク半分(そして過去の挫折からのほんのちょっとの苦々しさも追加)で楽しんでいこうかと思います…ということで、ボチボチやっていきますデス(`・ω・´)