Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads.
scikit-learnを用いた!
機械学習チュートリアル
金谷 敦志!
2014-03-13
"1
自己紹介
金谷 敦志 (Twitter: @todogzm)!
株式会社ラクス

北米市場向けWebサービス

Rigniteの開発に従事
"2
自己紹介
Python歴は1年半!
テキスト分類にPythonを使用!
recurly-client-pythonのPython 2/3対応!
Check.iO Level 10!
http://www.checkio.org/user/tod...
目次
scikit-learnについて!
機械学習チュートリアル!
scikit-learnを用いたテキスト分類
"4
scikit-learnについて
"5
機械学習ライブラリscikit-learn
http://scikit-learn.org/!
Pythonで作られた機械学習ライブラリ!
豊富な分類器と(ほぼ)統一化されたAPI!
検証作業を支える機能!
Numpy, Scipyを使用した高...
インストール要件
Python 2.6以上 (3.3でも使える)!
必要なライブラリ!
NumPy (>=1.3)!
SciPy (>=0.7)!
matplotlib (可視化したい場合)!
See http://scikit-learn.o...
機械学習チュートリアル
"8
機械学習とは
定義!
Wikipediaの機械学習より

”明示的にプログラムしなくても学習する

能力をコンピューターに与える研究分野”!
データから知識・ルールを自動確保
"9
身の回りにある機械学習の事例
スパム判定: メールがスパムか否かを判定!
リコメンド:「この商品を買った人はこんな
商品も買っています」!
画像認識: Picasaの顔認識機能など
"10
機械学習が得意とする問題
大量のデータを使って、未知のデータを分類!
!
※少量データなら人間が頑張った方が早い!
「九条グループ代表・九条麗子」からの10億円支援が

私の迷惑メールの中で話題に!!
九条麗子という単語があればスパム、というパ...
機械学習の分類
教師付き!
正解データが与えられている!
未知のデータに対する予測を行う!
教師なし!
正解データが与えられていない!
未知のデータから規則性を発見する
"12
今日の話題は
こっち
機械学習を実際に使うには
学習問題を数理的に捉える!
入力の数理的な表現の決定!
出力の表現方法の決定!
教師付き学習か教師なし学習か?!
学習方法に合わせた分類器の選定
"13
入力の数理的な表現
入力内容から特徴となる要素を
取り出し特徴ベクトルを作る!
特徴とは? →解きたい問題次第!
例:8x8の数値画像!
64次元のベクトルとして表現!
黒が0、白を15とした16段階
"14
[0, 0, 5, 13, 9, ...
入力の数理的な表現
教師付き学習の場合!
入力と、それに対する出力(正解)のペアをた
くさん用意する!
たくさん:多ければ多いほうが望ましいが
1000以上は欲しい
"15
出力の表現
期待する結果を洗い出し、数値化する!
数値は意味がある場合と単なるラベリングの場
合がある!
数値画像の例であれば、0∼9!
ラベルの例

みかん → 1, りんご → 2, バナナ → 3, …
"16
分類器の選定
予測したい (教師付き学習)!
サポートベクターマシン (バッチ学習)!
パーセプトロン (逐次学習)!
発見したい (教師なし学習)!
k最近傍法
"17
scikit-learnの分類器選定チートシート
"18
サポートベクターマシン
SVMやサポートベクトルマ
シンとも呼ばれる!
基本的には2値の分類器!
2つのパターンを分ける際
に、各データ点との距離が
最大となる識別面を計算
(マージン最大化)
"19
サポートベクターマシン
未知のデータについては、
識別面のどちら側にあるか
で分類する!
!
右の図は線形分類できる例!
できない場合には、条件を
緩める
"20
黒丸
白丸
scikit-learnを用いた

テキスト分類
"21
例題:感情解析
ある意見がポジティブかネガティブかを予測!
英語のデータセットがいくつかある!
今回はこの中からpolarity dataset v2.0 を使用
(Positive, Negativeそれぞれ1000件)!
https://w...
出力と分類器は良いが入力は…
入力の数理的な表現の決定

→ 自然文をどう扱うか?!
出力の表現方法の決定

→ Pos を+1, Negを-1!
教師付き学習か教師なし学習か?

→ 教師付き学習の分類器をいくつか試す
"23
入力の表現
単語を出現回数で数え
上げる。順序は無視
(Bag of Wordsモデル)!
(Pos) I’m really
loving this film.!
(Neg) I hate this film
because the film
rea...
教師付き学習の場合
学習用のデータにつ
いて、与える入力に
対する出力も合わせ
て教える!
機械学習は、各ラベ
ルに現れる単語の出
現確率を考慮して学
習する
"25
文章 Pos #1 Neg #2
I 1
I'm 1
because 1
fi...
その他考慮すべき点
1単語か複数単語か!
ストップワードを含めるか含めないか!
トリミングするかしないか(日本語は?)!
Bag of Wordsで本当にいいの?!
単語の重み付けは出現回数かtf*idfモデルか!
ラベルに一度も含まれていない...
入力部の実装
text_listには学習用テキストのリストが入る!
TfidfVectorizerにより、テキストをtf*idfモデル化!
1単語または2単語を用いてベクトル化!
英語をストップワードに追加
"27
from sklearn.fe...
SVMによる学習
入力のリストと期待される結果のリストを渡し、fit()メ
ソッドで学習する!
分類器には線形SVMを使用!
他の分類器にするにはLinearSVCを他に変える
"28
from sklearn import svm
!
ans...
未知のデータへの予測
未知のデータを学習時と同じようにモデル化する!
学習済みの分類器に未知のデータを渡す!
結果は期待する出力を数値化した値

今回の例では、Pos → +1, Neg → -1
"29
text_list = vectori...
精度がわからない
交差検定!
学習用データをいくつかに分けて、一部を学習用、残りを性能
評価用に使用!
cross_val_scoreに分類器、学習用モデルと期待する結果を渡せ
ば3回評価した結果を返す!
複数パラメータを組み合わせて検証するグ...
分類器の評価が遅い
計算時間や精度に影響を及ぼす 「次元の呪い」!
1単語のみ → 単語数4万!
1単語と2単語 → 53万! (10倍以上)!
潜在的意味解析による次元圧縮!
同じような意味の単語を同じものとして扱う
"31
from skl...
他の分類器も使いたい
今回の例はテキスト分類!
分類器選定チートシートでオススメされた
Naive Bayesも交差検定したい
"32
from sklearn.naive_bayes import GaussianNB
!
gnb = Gau...
SVMとNaive Bayesの精度比較
"33
方式 SVM SVM
Naive
Bayes
単語数 1~2単語 1単語 1~2単語
次元削減 なし(53万) 1000次元 なし
重み付け tf*idf tf*idf tf*idf
正解率 8...
まとめ
"34
機械学習のまとめ
データから知識・ルールを確保するための計算方法!
教師付き学習(予測)と教師なし学習(発見)!
入力と求めたい出力から、教師付き/なしが決まり、合わ
せて分類器も決まる!
教師付き学習の分類器にはサポートベクターマシンを始め
...
今回扱っていない内容
分類器の詳細な説明!
教師なし学習の例!
実際に機械学習を行う上で直面する問題!
教師用データの集め方!
計算機リソースの問題(CPUやメモリ使用量)!
etc…
"36
参考文献・Web資料
書籍!
はじめてのパターン認識 (平井有三著)!
Web資料!
機械学習チュートリアル@Jubatas Casual Talks!
拡がる 機械学習の応用 (東京大学 鹿島久嗣)!
pythonの機械学習ライブラリscik...
Upcoming SlideShare
Loading in …5
×

scikit-learnを用いた機械学習チュートリアル

186,021 views

Published on

大阪Pythonユーザの集まり 2014/03 で発表した資料
http://connpass.com/event/5361/

Published in: Technology
  • Be the first to comment

scikit-learnを用いた機械学習チュートリアル

  1. 1. scikit-learnを用いた! 機械学習チュートリアル 金谷 敦志! 2014-03-13 "1
  2. 自己紹介 金谷 敦志 (Twitter: @todogzm)! 株式会社ラクス
 北米市場向けWebサービス
 Rigniteの開発に従事 "2
  3. 自己紹介 Python歴は1年半! テキスト分類にPythonを使用! recurly-client-pythonのPython 2/3対応! Check.iO Level 10! http://www.checkio.org/user/todogzm/ "3
  4. 目次 scikit-learnについて! 機械学習チュートリアル! scikit-learnを用いたテキスト分類 "4
  5. scikit-learnについて "5
  6. 機械学習ライブラリscikit-learn http://scikit-learn.org/! Pythonで作られた機械学習ライブラリ! 豊富な分類器と(ほぼ)統一化されたAPI! 検証作業を支える機能! Numpy, Scipyを使用した高速な演算 "6
  7. インストール要件 Python 2.6以上 (3.3でも使える)! 必要なライブラリ! NumPy (>=1.3)! SciPy (>=0.7)! matplotlib (可視化したい場合)! See http://scikit-learn.org/stable/install.html! 実際の使い方はあとで! "7
  8. 機械学習チュートリアル "8
  9. 機械学習とは 定義! Wikipediaの機械学習より
 ”明示的にプログラムしなくても学習する
 能力をコンピューターに与える研究分野”! データから知識・ルールを自動確保 "9
  10. 身の回りにある機械学習の事例 スパム判定: メールがスパムか否かを判定! リコメンド:「この商品を買った人はこんな 商品も買っています」! 画像認識: Picasaの顔認識機能など "10
  11. 機械学習が得意とする問題 大量のデータを使って、未知のデータを分類! ! ※少量データなら人間が頑張った方が早い! 「九条グループ代表・九条麗子」からの10億円支援が
 私の迷惑メールの中で話題に!! 九条麗子という単語があればスパム、というパターンを作成! でもパターンが増えてきたら…? "11
  12. 機械学習の分類 教師付き! 正解データが与えられている! 未知のデータに対する予測を行う! 教師なし! 正解データが与えられていない! 未知のデータから規則性を発見する "12 今日の話題は こっち
  13. 機械学習を実際に使うには 学習問題を数理的に捉える! 入力の数理的な表現の決定! 出力の表現方法の決定! 教師付き学習か教師なし学習か?! 学習方法に合わせた分類器の選定 "13
  14. 入力の数理的な表現 入力内容から特徴となる要素を 取り出し特徴ベクトルを作る! 特徴とは? →解きたい問題次第! 例:8x8の数値画像! 64次元のベクトルとして表現! 黒が0、白を15とした16段階 "14 [0, 0, 5, 13, 9, 1, 0, 0, 0, 0, 13, 15, 10, 15, 5, 0, 0, 3, 15, 2, 0, 11, 8, 0, 0, 4, 12, 0, 0, 8, 8, 0, 0, 5, 8, 0, 0, 9, 8, 0, 0, 4, 11, 0, 1, 12, 7, 0, 0, 2, 14, 5, 10, 12, 0, 0, 0, 0, 6, 13, 10, 0, 0, 0]
  15. 入力の数理的な表現 教師付き学習の場合! 入力と、それに対する出力(正解)のペアをた くさん用意する! たくさん:多ければ多いほうが望ましいが 1000以上は欲しい "15
  16. 出力の表現 期待する結果を洗い出し、数値化する! 数値は意味がある場合と単なるラベリングの場 合がある! 数値画像の例であれば、0∼9! ラベルの例
 みかん → 1, りんご → 2, バナナ → 3, … "16
  17. 分類器の選定 予測したい (教師付き学習)! サポートベクターマシン (バッチ学習)! パーセプトロン (逐次学習)! 発見したい (教師なし学習)! k最近傍法 "17
  18. scikit-learnの分類器選定チートシート "18
  19. サポートベクターマシン SVMやサポートベクトルマ シンとも呼ばれる! 基本的には2値の分類器! 2つのパターンを分ける際 に、各データ点との距離が 最大となる識別面を計算 (マージン最大化) "19
  20. サポートベクターマシン 未知のデータについては、 識別面のどちら側にあるか で分類する! ! 右の図は線形分類できる例! できない場合には、条件を 緩める "20 黒丸 白丸
  21. scikit-learnを用いた
 テキスト分類 "21
  22. 例題:感情解析 ある意見がポジティブかネガティブかを予測! 英語のデータセットがいくつかある! 今回はこの中からpolarity dataset v2.0 を使用 (Positive, Negativeそれぞれ1000件)! https://www.cs.cornell.edu/people/pabo/ movie-review-data/ "22
  23. 出力と分類器は良いが入力は… 入力の数理的な表現の決定
 → 自然文をどう扱うか?! 出力の表現方法の決定
 → Pos を+1, Negを-1! 教師付き学習か教師なし学習か?
 → 教師付き学習の分類器をいくつか試す "23
  24. 入力の表現 単語を出現回数で数え 上げる。順序は無視 (Bag of Wordsモデル)! (Pos) I’m really loving this film.! (Neg) I hate this film because the film really … "24 文章 #1! #2 I 1 I'm 1 because 1 film 1 2 hate 1 loving 1 really 1 1 the 1 this 1 1
  25. 教師付き学習の場合 学習用のデータにつ いて、与える入力に 対する出力も合わせ て教える! 機械学習は、各ラベ ルに現れる単語の出 現確率を考慮して学 習する "25 文章 Pos #1 Neg #2 I 1 I'm 1 because 1 film 1 2 hate 1 loving 1 really 1 1 the 1 this 1 1
  26. その他考慮すべき点 1単語か複数単語か! ストップワードを含めるか含めないか! トリミングするかしないか(日本語は?)! Bag of Wordsで本当にいいの?! 単語の重み付けは出現回数かtf*idfモデルか! ラベルに一度も含まれていない単語の扱い! etc… "26 特定の文書集合によ く現れる単語を重要 視するモデル
  27. 入力部の実装 text_listには学習用テキストのリストが入る! TfidfVectorizerにより、テキストをtf*idfモデル化! 1単語または2単語を用いてベクトル化! 英語をストップワードに追加 "27 from sklearn.feature_extraction.text import TfidfVectorizer ! text_list = [(テキストのリスト)] ! vectorizer = TfidfVectorizer( ngram_range=(1, 2), stop_words='english') X = vectorizer.fit_transform(text_list)
  28. SVMによる学習 入力のリストと期待される結果のリストを渡し、fit()メ ソッドで学習する! 分類器には線形SVMを使用! 他の分類器にするにはLinearSVCを他に変える "28 from sklearn import svm ! answer_list = [(text_listの各データに対するラベル)] ! svc = svm.LinearSVC() # 線形SVM svc.fit(X, answer_list) # 学習
  29. 未知のデータへの予測 未知のデータを学習時と同じようにモデル化する! 学習済みの分類器に未知のデータを渡す! 結果は期待する出力を数値化した値
 今回の例では、Pos → +1, Neg → -1 "29 text_list = vectorizer.transform([(テキスト)]) ! result_list = svc.predict(text_list)
  30. 精度がわからない 交差検定! 学習用データをいくつかに分けて、一部を学習用、残りを性能 評価用に使用! cross_val_scoreに分類器、学習用モデルと期待する結果を渡せ ば3回評価した結果を返す! 複数パラメータを組み合わせて検証するグリッドサーチも便利 "30 from numpy import array ! svc = svm.LinearSVC() scores = cross_validation.cross_val_score(svc, X, array(y))
  31. 分類器の評価が遅い 計算時間や精度に影響を及ぼす 「次元の呪い」! 1単語のみ → 単語数4万! 1単語と2単語 → 53万! (10倍以上)! 潜在的意味解析による次元圧縮! 同じような意味の単語を同じものとして扱う "31 from sklearn.decomposition import TruncatedSVD ! X = vectorizer.fit_transform(text_list) lsa = TruncatedSVD(1000) # 1000次元まで削減 X_lsa = lsa.fit_transform(X)
  32. 他の分類器も使いたい 今回の例はテキスト分類! 分類器選定チートシートでオススメされた Naive Bayesも交差検定したい "32 from sklearn.naive_bayes import GaussianNB ! gnb = GaussianNB() scores = cross_validation.cross_val_score( gnb, X.toarray(), array(y)) # Xそのままはダメとな…
  33. SVMとNaive Bayesの精度比較 "33 方式 SVM SVM Naive Bayes 単語数 1~2単語 1単語 1~2単語 次元削減 なし(53万) 1000次元 なし 重み付け tf*idf tf*idf tf*idf 正解率 82% 80% 72% 分類器選定チートシートに従いNaive Bayesも評価した結果…
  34. まとめ "34
  35. 機械学習のまとめ データから知識・ルールを確保するための計算方法! 教師付き学習(予測)と教師なし学習(発見)! 入力と求めたい出力から、教師付き/なしが決まり、合わ せて分類器も決まる! 教師付き学習の分類器にはサポートベクターマシンを始め として色々ある! scikit-learnには機械学習に取り掛かりやすい環境がある "35
  36. 今回扱っていない内容 分類器の詳細な説明! 教師なし学習の例! 実際に機械学習を行う上で直面する問題! 教師用データの集め方! 計算機リソースの問題(CPUやメモリ使用量)! etc… "36
  37. 参考文献・Web資料 書籍! はじめてのパターン認識 (平井有三著)! Web資料! 機械学習チュートリアル@Jubatas Casual Talks! 拡がる 機械学習の応用 (東京大学 鹿島久嗣)! pythonの機械学習ライブラリscikit-learnの紹介 "37
тестостерон пропионат цена

www.steroid.in.ua/products/masteron-british-dragon

хранение велосипеда зимой

×