Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Python初心者が機械学習について学んでみた

212 views

Published on

10/31にイベントで登壇させていただいた時に使用したものです。

Published in: Engineering
  • Be the first to comment

  • Be the first to like this

Python初心者が機械学習について学んでみた

  1. 1. ビズリーチ 生頼沙織 Python初心者が、 形態素解析や 機械学習について学んでみた
  2. 2. 自己紹介 •名前: 生頼沙織(おおらいさおり) •経歴: 立命館大学 理工学部 数学科卒 ビズリーチ 新卒2年目 •職種: ビズリーチ サーバーサイドエンジニア •趣味: バレーボール
  3. 3. 本日の目的 • 機械学習って何?具体的にどんなことするの?どういう 時に使うの?ってことを知ってもらう • Pythonで機械学習を少し触ってみる • 案外とっつきやすいんだ、と思ってもらう (これから触ってみるきっかけになれば・・・)
  4. 4. 注意事項 Pythonをめっちゃやったことがある人 または 機械学習をめっちゃやったことある人には かなり物足りない内容かと思いますので ご了承ください!
  5. 5. データ データ
  6. 6. アジェンダ • 機械学習とは • データを作ってみよう • レコメンドしてみよう • まとめ
  7. 7. 1. 機械学習とは
  8. 8. データ データ
  9. 9. 人工知能における研究課題の一つで、 人間が自然に行なっている学習能力と同等の機能を コンピューターを用いて実現しようとする 技術・手法のことである(wikipediaより) 機械学習とは • コンピューターで何かしらのアルゴリズム構築 →学習データを読み込ませる →予測データが得られる! • 人の情報処理能力を超えたデータの分析などが可能! つまり・・・
  10. 10. なんでPython? • 機械学習のためのライブラリなどが豊富 だから、簡単にかける! • プログラムの実行が速い!
  11. 11. 機械学習のするときの流れ 1. データの準備をする 2. 学習のアルゴリズムを決める 3. 学習モデルを作る 4. 学習モデルを評価する Python書くのここ!
  12. 12. 1. データの準備 • コンピューターが扱いやすいデータを 準備しなければならない - 例えば・・・
  13. 13. • 英語 This is a pen. • 日本語 すもももももももものうち This / is / a / pen / . ???
  14. 14. 2. 学習のアルゴリズムを 決める ???
  15. 15. • 教師データあり →問題と答えがセットになったもの • 教師データなし →問題のみ与えられて答えがないもの 機械学習の処理の手法は 大きく以下の二つに分けられる↓↓
  16. 16. 教師データあり • 問題と答えがセットになったもの • 代表的なもの - 決定木 - パーセプトロン - SVM - ロジスティック回帰
  17. 17. 教師データなし • 問題のみ与えられて答えがない • 代表的なもの - 協調フィルタリング - k-means - トピックモデル
  18. 18. モデルを作る • 一から作るの大変 • だいたい提供されてるのでそれ使う
  19. 19. データ データ
  20. 20. 評価する • 一番大切、必ずやるべき • 行った学習によって予測された結果が 本当に信用に足るものかどうかの確認
  21. 21. 2. データを 作ってみよう
  22. 22. 機械学習の基本的なフロー 1. データの準備をする 2. アルゴリズムを決める 3. モデルを作る 4. 評価する
  23. 23. データの準備 • コンピューターが扱いやすいデータを 準備しなければならない - 例えば・・・
  24. 24. • 英語 This is a pen. 空白区切りでOK • 日本語 すもももももももものうち どこで切るの? This / is / a / pen / . ??? 形態素解析の出番!
  25. 25. 形態素解析とは? • 日本語は英語などのように単語間で空白 がないので、単語に分割するのが難しい • 単語と単語の区切りを判定し、文字列を 分割する特別な処理が必要
  26. 26. 1. 区切り文字で分割 これは私のペン。 2. 辞書を用いて分割 自然言語処理 3. 形態素解析器で分割(MeCab, JUMANなど) すもももももももものうち ???
  27. 27. •MeCabインストール手順
  28. 28. MeCabのインストール • 公式サイトの「ダウンロード」より、MeCab 本体とMeCab用の辞書をダウンロード *公式サイトURL:taku910.github.io/mecab/ • ダウンロードができたらMeCab本体と辞書を インストール
  29. 29. • MeCab本体のインストール mecab-0.996を解凍し、 解凍したフォルダに入る その後、以下のコマンドを叩く $ ./configure $ make $ make check $ sudo make install
  30. 30. • MeCab辞書のインストール mecab-ipadic-2.7.0-20070801を解凍し、解 凍したフォルダに入る そして以下のコマンドを叩く $ ./configure --with-charset=utf8 $ make $ sudo make install *辞書がデフォルトでEUCでインストールされるので、 扱いやすいようにutf-8に変更してインストール
  31. 31. • 早速使ってみる
  32. 32. 単語や文書の特徴量をコード化することで、 コンピューター上でも扱えるようにする 単語や文章の「特徴量とは?」 例えば↓ • 文章中の単語の出現頻度(TF-IDF処理) • 任意の文字数で分割された文字列の出現頻度 (N-gram処理)
  33. 33. ちょっと応用 形態素解析で遊んでみた 〜物語の中で一番頻出の名詞は!?〜 • 使用したデータ 青空文庫 http://www.aozora.gr.jp/ 夏目漱石著:「吾輩は猫である」
  34. 34. • 準備として、以下のモジュールをインストー ル - natto-py PythonでMeCabを使えるようにしてくれる $ pip install natto-py
  35. 35. • まずは使用するモジュールをimport
  36. 36. • テキスト読み込み (sample.txt = 「吾輩は猫である」のデータ)
  37. 37. ・読み込んだテキストに対し、MeCabで品詞ごとに分解、 名詞のみを取り出す
  38. 38. ・結果をcsvに出力
  39. 39. 3. レコメンド してみよう
  40. 40. 協調フィルタリングとは • 教師データなしのアルゴリズムのうちの一つ • ユーザー同士の類似度を元に、 他のユーザーへのレコメンドを行う • 一定数以上のデータ量が必要
  41. 41. 購入ID 商品ID 購入者ID 1 5 1 2 2 6 3 3 4 4 2 5 5 10 1 ・ ・ ・
  42. 42. 1 2 3 4 5 6 7 8 9 10 類似 度 A ○ ○ × × ○ ○ ○ × × ○ 0.125 B ○ × ○ × ○ × × ○ × ○ 0.5 C ○ ○ × ○ × ○ × × ○ ○ 0.875 D × × ○ × ○ ○ × ○ ○ × 0.75 E ○ ○ × ○ × × ○ × × ○ 0.25 F × × ○ ○ × ○ ? ? ? ? 商品ID 購 入 者 ID
  43. 43. 1 2 3 4 5 6 7 8 9 10 類似 度 A ○ ○ × × ○ ○ ○ × × ○ 0.125 B ○ × ○ × ○ × × ○ × ○ 0.5 C ○ ○ × ○ × ○ × × ○ ○ 0.875 D × × ○ × ○ ○ × ○ ○ × 0.75 E ○ ○ × ○ × × ○ × × ○ 0.25 F × × ○ ○ × ○ × × ○ ○ 購 入 者 ID 商品ID
  44. 44. 手順 1. ユーザーのデータを取得(購入、嗜好、etc..) 2. 1でのデータを元にユーザー間の類似度を算出 3. 対象ユーザーに似ているユーザーを ピックアップ 4. 類似度の高いユーザーから レコメンドデータを取得
  45. 45. 実際に協調フィルタリングの考え方を使って、 レコメンドロジックを作ってみよう! (モデルを作る) • 使用したデータ - 任意のユーザーが購入した商品と 商品に対する満足度の結果(dataset.py)
  46. 46. dataset.py
  47. 47. • まずはユーザー同士の類似度を出してみる **ポイント** どういう状態を、 「ユーザー同士が似ている、似ていない」 と定義するか *今回は、 ユーザーが商品に対して与えている 満足度が近いほど、類似度が高いと定義する
  48. 48. • 実際に求めてみる - 必要なモジュールのimport - 今回比較対象のユーザーはAとB
  49. 49. - 指定したユーザーどちらもが見た映画の集合を取得
  50. 50. - 各商品の満足度の差の2乗を計算する (これは、ユーザー間の距離の2乗に等しい)
  51. 51. 類似度計算ロジック コード全体 (後のレコメンドロジックで使 えるようにメソッド化したの で、一部これまででてきたのと 違う箇所もあります)
  52. 52. • 実行結果
  53. 53. • 次にレコメンドロジックを作ってみる - 他のすべてのユーザーとの比較でレコメンドデータを作 成する
  54. 54. - 対象のユーザーと比較して、購入していない商品を取得
  55. 55. - 先ほどの関数を用いてユーザー間の類似度を算出 - 類似度と比較対象のユーザーの商品に対する満足度の積を出す
  56. 56. - すべてのユーザーとの計算が終わったら、 計算したスコアを元にレコメンドを出す
  57. 57. レコメンドロジック コード全体
  58. 58. 最後に、main関数定義して、 レコメンドロジックメソッド呼び出し
  59. 59. 協調フィルタリング ~まとめ~ • ユーザー間の類似度を元に、他のユーザーへ のレコメンドを行う • 一定量以上のデータが必要 • アルゴリズムやモデルのチューニングが必要 になってくる *精度を出したい場合は・・・
  60. 60. 4. まとめ
  61. 61. データ データ
  62. 62. まとめ • 人の情報処理能力を超えたデータの分析な どが可能! • コンピューターで何かしらのアルゴリズム 構築 →学習データを読み込ませる →予測データが得られる!
  63. 63. ご静聴ありがとうございました。

×