SlideShare a Scribd company logo
1 of 18
はじめての機械学習
〜 導入編 〜
今回試したのは回帰と分類
回帰モデル 過去のデータから算出したい値の推計を行う
使用例)
● 法人向け成約単価予測 (<=今回試したもの )
● 不動産価格予測
● コンビニのおにぎりの販売数予測
分類モデル データセットを仕分けする
使用例)
● 法人向け成約単価分類 (<=今回試したもの )
● 健康診断の精密検査対象
● 不良品の検出
1. 相関分析
※ 相関係数を算出して相関関係を見極めます
seaboarn
import seaborn as sns
sns.pairplot(contract_master[['Kw','UsagePercent','Annual
Usage','UnitPrice','AreaID']], diag_kind="kde")
Tips ! データのバイアス (呪い?)
8%単価と10%単価が混ざっている
受領データに8%単価と10%単価が混ざって渡されていた
気づかずにモデルを作成していたところ精度が上がらなかった
発覚後に8%単価を10%に直すロジックを適用したところ精度が向上した
お客さんが相関があるといった変数に相関がない
根本的な問題だが、成約したかしないかに価格の相関があると顧客が主張していた
顧客が見て話しているのは1案件中の相見積の中の話
実際のデータは全データなので相関性が見られなかった
おそらく全事業者独自の算定式を持っており毎回同じような単価を算出している
使用【量】がない
使用【料】が合ったので単価で割って算出
本当に利用したいのは【使用量】だった
※ 事前に計測値の粒度を揃えるのが一番大切
※ 要件時点で呪いを解かないといい結果が出ない
Tips ! (次元削除)
from sklearn.cluster import KMeans
from sklearn.decomposition import PCA
# クラスタ設定
model = KMeans(n_clusters=2, random_state=0)
predicted = model.fit_predict(std_contract_master)
predicted
# 次元圧縮
pca = PCA(n_components=1)
X = pca.fit_transform(data[['Kw','UsagePercent','AnnualUsage','AreaID']].iloc[:,:-1].values)
composed = pd.DataFrame(X,columns=['Kw_UsagePercent_AnnualUsage_Area'])
composed["ClusterID"] = predicted
composed["UnitPrice"] = std_contract_master['UnitPrice']
複数の列を圧縮して
2次元にマッピング
2. モデルの作成 (データ構造)
説明変数 = 目的変数の導出に使う変数
目的変数 = 算出したい値
■ 回帰の場合 ■ 二項分類の場合
■ 多項分類の場合
※ 相関分析で係数が高いものを指定
だいたい0.3以上
※ ndarrayが返却されるpandasのseriesを利用しているのでモデルの
引数にそのまま渡せる
Tips ! (ワンホットエンコーディング)
※ モデルには数値データしか入らないので全部数値に変換する必要があります
import pandas as pd
contract_master['区分'] = pd.get_dummies(contract_master['区分'])
pandas.get_dummies
Tips ! (NullやInfinity Value削除)
※ モデルには数値データしか入らないのでNullやInfinity Valueを削除する必要があります
# null削除
contract_master = contract_master.dropna()
# infinity value削除
contract_master.drop(contract_master.columns[np.isinf(contract_master).any()], axis=1)
2. モデルの作成 (最適化アルゴリズムと誤差関数)
※ 超難しいので説明しません!次回詳しくなってたら説明します!
回帰 分類
optimizer=rmsprop
???
optimizer=adam
???
metrics=['mae', 'mse']
平均絶対誤差と平均二乗誤差
計測値として取得するものの
分かりづらいので、説明時は○円以内の誤差が
いくらという風に説明
metrics=['accuracy', Precision(),
Recall(),'binary_crossentropy'])
適合率、再現率を取得するも
分かりづらいので、説明時には混同行列を利
用。陽性率が○%、偽陽性が○%など
最適化アルゴリズム
誤差関数
Tips ! (正規化と標準化)
標準化 正規化
標準偏差で割る
価格予測はこっちを利用
0-1の範囲に数値を収める
分類はこっちを利用
sklearnのStandardScalerを利用している
pickleというライブラリでモデル作成時に作られた
【定規】を保存してモデル利用時に再利用している
sklearnのMinMaxScalerを利用している
pickleというライブラリでモデル作成時に作られた
【定規】を保存してモデル利用時に再利用している
Tips ! (とっととやめる/最善を保存)
from keras.callbacks import
EarlyStopping
from keras.callbacks import
ModelCheckpoint
過学習を防ぐために適度に学習をしたらやめる機能
model.fitパラメーターにコールバック関数をする
コールバックで損失関数に指定した値を監視して
しきい値を超えたら終了
例) mseが30回連続0.1-e5以上変化なかったら
最高の精度がでたモデルを保存する機能
model.fitパラメーターにコールバック関数をする
コールバックで損失関数に指定した値を監視して
しきい値を超えたらファイルに保存
例) 3回に一回チェックして前回よりmseが改善して
たらファイルに保存
history = model.fit(
normed_train_data, normed_train_labels,
validation_data=(normed_test_data, normed_test_labels),
epochs=1000,
validation_split = 0.2,
callbacks=[model_check_point, early_stopping]
verbose=1)
3. 結果の検証
学習結果をグラフ化 予測値のばらつきを確認 誤差の範囲を確認
model.fitの返り値に学習結果が保存
されているので可視化できる
前ページで指定した損失関数を使っ
て計算された値が格納されている
予測された金額をが標準化されてい
るので、スケールを戻して比較して
いる
誤差がいくらいないに収まってるか
確認
ユーザー視点で分かりやすい
次の課題
〜 チューニング 〜
係数の補正
ここを補正したい
変数A 変数B
変数C
この部分
Subject ! (微分とF関数)
Tensor Flow内で微分して
係数を算出してくれているっぽいのだけど
過程を出力する方法がまだ良くわからない
まさか、リニアに変化するものしか対応していないのか気
になっている
Y = X何乗みたいなときはだめなのか?
Linear regressionというサンプルを使ったからそういうこ
とでもある気がするけど、ニューラルネットワーク使って
るから自動微分してくれる的な記事を読んだような読んで
ないような・・・
問題はなに?
アドバイス
サポートベクターマシン?
ランダムフォレスト?
Subject ! (ニューラルネットワーク)
数理モデルの連続らしいけどまだよ
く理解できない
モデルの層の指定方法などを最適化
しないといけないので
もう少し色々勉強する
仲間募集中
数式 数式 数式
今こんなざっくり理解
ライブラリ紹介
Tensor Flow 機械学習のコアとして利用しているライブラリ
CNNネットワークによる画像解析で有名
時系列モデルがあるので弊社的によいということで採用
Keras Tensor Flowから利用されるニューラルネットワークのライブラリ
モデルの生成はこちらのライブラリを参照する
ただしTensor内に格納されているので単独でも使えるがtf.kerasで参照する
scikit-learn こちらも機械学習系ライブラリ
サンプルが豊富だが時系列用がデフォルトで用意されていない
今回は、標準化/正規化やクラスタリング作成に使用
matplotlib グラフ表示用のライブラリ
日本語表示可能なjapanize-matplotlibもある
seaborn グラフ表示用のライブラリ
ハイレベルな解析とグラフ表示が可能
playground モデルの機能がグラフィカルインターフェイスで試せるもの
統計学と理論をバッチリ理解している方はこちらへ
私は3クラス分類の交差エントロピーが視覚的に理解できてよかった
書籍紹介
半分の50本ノックまでで
CSVデータ解析が可能
RDBやSQLライクに
配列操作をしたい人向け
データ扱ってる人と同じ
会話ができるようになる
Tensor Flow チュートリアル ちゃらんぽらんな人向け

More Related Content

Similar to 初めての機械学習

データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1Shunsuke Nakamura
 
Collaborativefilteringwith r
Collaborativefilteringwith rCollaborativefilteringwith r
Collaborativefilteringwith rTeito Nakagawa
 
効果測定入門 Rによる傾向スコア解析
効果測定入門  Rによる傾向スコア解析効果測定入門  Rによる傾向スコア解析
効果測定入門 Rによる傾向スコア解析aa_aa_aa
 
『手を動かしながら学ぶ ビジネスに活かすデータマイニング』で目指したもの・学んでもらいたいもの
『手を動かしながら学ぶ ビジネスに活かすデータマイニング』で目指したもの・学んでもらいたいもの『手を動かしながら学ぶ ビジネスに活かすデータマイニング』で目指したもの・学んでもらいたいもの
『手を動かしながら学ぶ ビジネスに活かすデータマイニング』で目指したもの・学んでもらいたいものTakashi J OZAKI
 
スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類Yahoo!デベロッパーネットワーク
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネスMie Mori
 
課題研究 JavaScriptの基礎理論と活用方法
課題研究 JavaScriptの基礎理論と活用方法課題研究 JavaScriptの基礎理論と活用方法
課題研究 JavaScriptの基礎理論と活用方法igucci
 
07232012需要予測モデル0.3 5
07232012需要予測モデル0.3 507232012需要予測モデル0.3 5
07232012需要予測モデル0.3 5Izumi Akiyama
 
機械学習をビジネスに利活用する人たちに対してモデル開発後の実運用フェーズにおける課題とその対策方法
機械学習をビジネスに利活用する人たちに対してモデル開発後の実運用フェーズにおける課題とその対策方法機械学習をビジネスに利活用する人たちに対してモデル開発後の実運用フェーズにおける課題とその対策方法
機械学習をビジネスに利活用する人たちに対してモデル開発後の実運用フェーズにおける課題とその対策方法日本ディープラーニング協会(JDLA)
 

Similar to 初めての機械学習 (10)

データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1
データサイエンティストに聞く!今更聞けない機械学習の基礎から応用まで V e-1
 
Collaborativefilteringwith r
Collaborativefilteringwith rCollaborativefilteringwith r
Collaborativefilteringwith r
 
効果測定入門 Rによる傾向スコア解析
効果測定入門  Rによる傾向スコア解析効果測定入門  Rによる傾向スコア解析
効果測定入門 Rによる傾向スコア解析
 
『手を動かしながら学ぶ ビジネスに活かすデータマイニング』で目指したもの・学んでもらいたいもの
『手を動かしながら学ぶ ビジネスに活かすデータマイニング』で目指したもの・学んでもらいたいもの『手を動かしながら学ぶ ビジネスに活かすデータマイニング』で目指したもの・学んでもらいたいもの
『手を動かしながら学ぶ ビジネスに活かすデータマイニング』で目指したもの・学んでもらいたいもの
 
スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類
 
Big data解析ビジネス
Big data解析ビジネスBig data解析ビジネス
Big data解析ビジネス
 
課題研究 JavaScriptの基礎理論と活用方法
課題研究 JavaScriptの基礎理論と活用方法課題研究 JavaScriptの基礎理論と活用方法
課題研究 JavaScriptの基礎理論と活用方法
 
07232012需要予測モデル0.3 5
07232012需要予測モデル0.3 507232012需要予測モデル0.3 5
07232012需要予測モデル0.3 5
 
おしゃスタat銀座
おしゃスタat銀座おしゃスタat銀座
おしゃスタat銀座
 
機械学習をビジネスに利活用する人たちに対してモデル開発後の実運用フェーズにおける課題とその対策方法
機械学習をビジネスに利活用する人たちに対してモデル開発後の実運用フェーズにおける課題とその対策方法機械学習をビジネスに利活用する人たちに対してモデル開発後の実運用フェーズにおける課題とその対策方法
機械学習をビジネスに利活用する人たちに対してモデル開発後の実運用フェーズにおける課題とその対策方法
 

初めての機械学習

  • 2. 今回試したのは回帰と分類 回帰モデル 過去のデータから算出したい値の推計を行う 使用例) ● 法人向け成約単価予測 (<=今回試したもの ) ● 不動産価格予測 ● コンビニのおにぎりの販売数予測 分類モデル データセットを仕分けする 使用例) ● 法人向け成約単価分類 (<=今回試したもの ) ● 健康診断の精密検査対象 ● 不良品の検出
  • 3. 1. 相関分析 ※ 相関係数を算出して相関関係を見極めます seaboarn import seaborn as sns sns.pairplot(contract_master[['Kw','UsagePercent','Annual Usage','UnitPrice','AreaID']], diag_kind="kde")
  • 4. Tips ! データのバイアス (呪い?) 8%単価と10%単価が混ざっている 受領データに8%単価と10%単価が混ざって渡されていた 気づかずにモデルを作成していたところ精度が上がらなかった 発覚後に8%単価を10%に直すロジックを適用したところ精度が向上した お客さんが相関があるといった変数に相関がない 根本的な問題だが、成約したかしないかに価格の相関があると顧客が主張していた 顧客が見て話しているのは1案件中の相見積の中の話 実際のデータは全データなので相関性が見られなかった おそらく全事業者独自の算定式を持っており毎回同じような単価を算出している 使用【量】がない 使用【料】が合ったので単価で割って算出 本当に利用したいのは【使用量】だった ※ 事前に計測値の粒度を揃えるのが一番大切 ※ 要件時点で呪いを解かないといい結果が出ない
  • 5. Tips ! (次元削除) from sklearn.cluster import KMeans from sklearn.decomposition import PCA # クラスタ設定 model = KMeans(n_clusters=2, random_state=0) predicted = model.fit_predict(std_contract_master) predicted # 次元圧縮 pca = PCA(n_components=1) X = pca.fit_transform(data[['Kw','UsagePercent','AnnualUsage','AreaID']].iloc[:,:-1].values) composed = pd.DataFrame(X,columns=['Kw_UsagePercent_AnnualUsage_Area']) composed["ClusterID"] = predicted composed["UnitPrice"] = std_contract_master['UnitPrice'] 複数の列を圧縮して 2次元にマッピング
  • 6. 2. モデルの作成 (データ構造) 説明変数 = 目的変数の導出に使う変数 目的変数 = 算出したい値 ■ 回帰の場合 ■ 二項分類の場合 ■ 多項分類の場合 ※ 相関分析で係数が高いものを指定 だいたい0.3以上 ※ ndarrayが返却されるpandasのseriesを利用しているのでモデルの 引数にそのまま渡せる
  • 7. Tips ! (ワンホットエンコーディング) ※ モデルには数値データしか入らないので全部数値に変換する必要があります import pandas as pd contract_master['区分'] = pd.get_dummies(contract_master['区分']) pandas.get_dummies
  • 8. Tips ! (NullやInfinity Value削除) ※ モデルには数値データしか入らないのでNullやInfinity Valueを削除する必要があります # null削除 contract_master = contract_master.dropna() # infinity value削除 contract_master.drop(contract_master.columns[np.isinf(contract_master).any()], axis=1)
  • 9. 2. モデルの作成 (最適化アルゴリズムと誤差関数) ※ 超難しいので説明しません!次回詳しくなってたら説明します! 回帰 分類 optimizer=rmsprop ??? optimizer=adam ??? metrics=['mae', 'mse'] 平均絶対誤差と平均二乗誤差 計測値として取得するものの 分かりづらいので、説明時は○円以内の誤差が いくらという風に説明 metrics=['accuracy', Precision(), Recall(),'binary_crossentropy']) 適合率、再現率を取得するも 分かりづらいので、説明時には混同行列を利 用。陽性率が○%、偽陽性が○%など 最適化アルゴリズム 誤差関数
  • 10. Tips ! (正規化と標準化) 標準化 正規化 標準偏差で割る 価格予測はこっちを利用 0-1の範囲に数値を収める 分類はこっちを利用 sklearnのStandardScalerを利用している pickleというライブラリでモデル作成時に作られた 【定規】を保存してモデル利用時に再利用している sklearnのMinMaxScalerを利用している pickleというライブラリでモデル作成時に作られた 【定規】を保存してモデル利用時に再利用している
  • 11. Tips ! (とっととやめる/最善を保存) from keras.callbacks import EarlyStopping from keras.callbacks import ModelCheckpoint 過学習を防ぐために適度に学習をしたらやめる機能 model.fitパラメーターにコールバック関数をする コールバックで損失関数に指定した値を監視して しきい値を超えたら終了 例) mseが30回連続0.1-e5以上変化なかったら 最高の精度がでたモデルを保存する機能 model.fitパラメーターにコールバック関数をする コールバックで損失関数に指定した値を監視して しきい値を超えたらファイルに保存 例) 3回に一回チェックして前回よりmseが改善して たらファイルに保存 history = model.fit( normed_train_data, normed_train_labels, validation_data=(normed_test_data, normed_test_labels), epochs=1000, validation_split = 0.2, callbacks=[model_check_point, early_stopping] verbose=1)
  • 12. 3. 結果の検証 学習結果をグラフ化 予測値のばらつきを確認 誤差の範囲を確認 model.fitの返り値に学習結果が保存 されているので可視化できる 前ページで指定した損失関数を使っ て計算された値が格納されている 予測された金額をが標準化されてい るので、スケールを戻して比較して いる 誤差がいくらいないに収まってるか 確認 ユーザー視点で分かりやすい
  • 15. Subject ! (微分とF関数) Tensor Flow内で微分して 係数を算出してくれているっぽいのだけど 過程を出力する方法がまだ良くわからない まさか、リニアに変化するものしか対応していないのか気 になっている Y = X何乗みたいなときはだめなのか? Linear regressionというサンプルを使ったからそういうこ とでもある気がするけど、ニューラルネットワーク使って るから自動微分してくれる的な記事を読んだような読んで ないような・・・ 問題はなに? アドバイス サポートベクターマシン? ランダムフォレスト?
  • 17. ライブラリ紹介 Tensor Flow 機械学習のコアとして利用しているライブラリ CNNネットワークによる画像解析で有名 時系列モデルがあるので弊社的によいということで採用 Keras Tensor Flowから利用されるニューラルネットワークのライブラリ モデルの生成はこちらのライブラリを参照する ただしTensor内に格納されているので単独でも使えるがtf.kerasで参照する scikit-learn こちらも機械学習系ライブラリ サンプルが豊富だが時系列用がデフォルトで用意されていない 今回は、標準化/正規化やクラスタリング作成に使用 matplotlib グラフ表示用のライブラリ 日本語表示可能なjapanize-matplotlibもある seaborn グラフ表示用のライブラリ ハイレベルな解析とグラフ表示が可能 playground モデルの機能がグラフィカルインターフェイスで試せるもの 統計学と理論をバッチリ理解している方はこちらへ 私は3クラス分類の交差エントロピーが視覚的に理解できてよかった