SlideShare a Scribd company logo
1 of 52
Download to read offline
目で見る過学習と正則化
内山 雄司 (@y__uti)
2019-03-11 社内勉強会
自己紹介
内山 雄司 (@y__uti)
◦ http://y-uti.hatenablog.jp/ (phpusers-ja)
仕事
◦ 受託開発の会社 (株式会社ピコラボ) でプログラマをしています
興味
◦ プログラミング言語処理系
◦ 機械学習
2019-03-11 社内勉強会 2
目標 (説明しようとしていること)
1. 特徴量を増やせば複雑なデータも分類できる
2. 増やし過ぎると過学習が発生する
3. 正則化という手法で過学習を抑えこむ
2019-03-11 社内勉強会 3
本日の食材
sklearn.datasets.make_circles
2019-03-11 社内勉強会 4
データの生成方法
1. 半径 0.8 の円周上に 1 を配置
2. 半径 1.0 の円周上に 0 を配置
3. σ = 0.1 のガウス雑音を加える
☞ 半径 0.9 の円 が正しい決定境界
本日の食材
sklearn.datasets.make_circles
2019-03-11 社内勉強会 5
データの生成方法
1. 半径 0.8 の円周上に 1 を配置
2. 半径 1.0 の円周上に 0 を配置
3. σ = 0.1 のガウス雑音を加える
☞ 半径 0.9 の円 が正しい決定境界
☞ 直線では上手く分類できない
線形基底関数モデル
2019-03-11 社内勉強会 6
アプローチ
今回のデータは「直線では分類できない」
もう少し正確に言うと:
特徴量 x, y に対して ax + by + c の正負では分類できない
そこで x, y にさまざまな関数を適用して特徴量を増やす
w1f1(x,y) + w2f2(x,y) + w3f3(x,y) + ... + c
うまく fi を見つければ分類できるかもしれない
ポイント:fi で変換した後はただのロジスティック回帰
2019-03-11 社内勉強会 7
多項式特徴量
sklearn.preprocessing.PolynomialFeatures
2019-03-11 社内勉強会 8
from sklearn.preprocessing import PolynomialFeatures
polynomial_features = PolynomialFeatures(
degree=3,
interaction_only=False,
include_bias=True).fit_transform([[2, 3]])
print(polynomial_features)
結果:[[ 1. 2. 3. 4. 6. 9. 8. 12. 18. 27.]]
多項式特徴量
sklearn.preprocessing.PolynomialFeatures
2019-03-11 社内勉強会 9
from sklearn.preprocessing import PolynomialFeatures
polynomial_features = PolynomialFeatures(
degree=3,
interaction_only=False,
include_bias=True).fit_transform([[2, 3]])
print(polynomial_features)
結果:[[ 1. 2. 3. 4. 6. 9. 8. 12. 18. 27.]]
x y xx xy yy xxx xxy xyy yyy組合せ:
0 次 1 次 2 次 3 次次数:
多項式特徴量を利用する
sklearn.pipeline.Pipeline
1. 元の特徴量から多項式特徴量を作成する
2. ロジスティック回帰を適用する
2019-03-11 社内勉強会 10
pipeline = Pipeline(steps=[
('poly', PolynomialFeatures(degree=3,
interaction_only=False, include_bias=False)),
('clf', LogisticRegression(
C=1e100, solver='lbfgs', max_iter=10000))])
pipeline.fit(features, labels)
パラメータのうち特に注意が必要なものは以下の 2 つ
◦ include_bias = False 定数項 (0 次の特徴量) を除外する
◦ C=1e100 正則化なしで試すため大きな数を指定
多項式特徴量の威力
degree = 1 (正解率 52%)
2019-03-11 社内勉強会 11
多項式特徴量の威力
degree = 2 (正解率 82%)
2019-03-11 社内勉強会 12
多項式特徴量の威力
degree = 3 (正解率 82%)
2019-03-11 社内勉強会 13
多項式特徴量の威力
degree = 4 (正解率 81%)
2019-03-11 社内勉強会 14
多項式特徴量の威力
degree = 5 (正解率 84%)
2019-03-11 社内勉強会 15
多項式特徴量の威力
degree = 6 (正解率 89%)
2019-03-11 社内勉強会 16
多項式特徴量の威力
degree = 7 (正解率 96%)
2019-03-11 社内勉強会 17
多項式特徴量の威力
degree = 8 (正解率 100%)
2019-03-11 社内勉強会 18
多項式特徴量の威力
degree = 9 (正解率 100%)
2019-03-11 社内勉強会 19
多項式特徴量の威力
degree = 10 (正解率 100%)
2019-03-11 社内勉強会 20
過学習
2019-03-11 社内勉強会 21
学習データに対する正解率
8 次の特徴量まで利用すると正解率 100% になったが・・・
2019-03-11 社内勉強会 22
degree = 2 (正解率 82%) degree = 8 (正解率 100%)
≠ 予測性能
同じ分布から生成された別のサンプルデータに適用すると・・・
2019-03-11 社内勉強会 23
degree = 2 (正解率 87%) degree = 8 (正解率 61%)
過学習とは
学習データに含まれるノイズを過剰に拾ってしまう
◦ 結果として未知のデータに対する予測性能は下がってしまう
◦ 特徴量が高次元になるほど過学習が発生しやすくなる
2019-03-11 社内勉強会 24
過学習を避ける方法
1. 学習データを増やす
2. 良い特徴量を設計する (良いモデルを選択する)
3. 正則化
2019-03-11 社内勉強会 25
学習データを増やす
学習データを 100 個から 1,000 個に増やした場合
2019-03-11 社内勉強会 26
良い特徴量を設計する
下図のような結果から適切なモデルを選択する
2019-03-11 社内勉強会 27
データをよく見て適切な特徴量を見つける
◦ 今回の問題なら「原点からの距離」を特徴量とすればよい
正則化
2019-03-11 社内勉強会 28
特徴量の重みの分布
過学習の状況では特徴量の重みが爆発
2019-03-11 社内勉強会 29
正則化とは
特徴量の重みに応じた値を損失関数に上乗せする
L2 正則化:
2019-03-11 社内勉強会 30
(https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression より引用)
正則化とは
特徴量の重みに応じた値を損失関数に上乗せする
L2 正則化:
2019-03-11 社内勉強会 31
(https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression より引用)
正則化項:特徴量の重みを 0 にしようとする力
負の対数尤度:データを正しく分類しようとする力
コスト:両者のバランスを決めるパラメータ
特徴量の重みの分布 (C=1)
コストを小さく設定すると特徴量の重みが小さく抑えられる
2019-03-11 社内勉強会 32
コストによる正解率の変化
実験内容
◦ 8 次の特徴量まで利用
◦ コストパラメータの設定値を変えながら正解率を描画
2019-03-11 社内勉強会 33
決定境界が変化する様子
degree=8, C=1e10
2019-03-11 社内勉強会 34
決定境界が変化する様子
degree=8, C=1e7
2019-03-11 社内勉強会 35
決定境界が変化する様子
degree=8, C=1e4
2019-03-11 社内勉強会 36
決定境界が変化する様子
degree=8, C=1e1
2019-03-11 社内勉強会 37
決定境界が変化する様子
degree=8, C=1e-2
2019-03-11 社内勉強会 38
決定境界が変化する様子
degree=8, C=1e-5
2019-03-11 社内勉強会 39
各特徴量の重み
実験内容
◦ 8 次の特徴量まで利用
◦ コストパラメータの設定値を変えながら各特徴量の重みを描画
2019-03-11 社内勉強会 40
重みの L2-norm と切片
実験内容
◦ 8 次の特徴量まで利用
◦ コストパラメータの設定値を変えながら重みの L2-norm と切片を描画
2019-03-11 社内勉強会 41
L1 正則化
2019-03-11 社内勉強会 42
L1 正則化
疎な解を求めたいときに利用する
L2 正則化 (特徴量の二乗和):
L1 正則化 (特徴量の絶対値の和):
2019-03-11 社内勉強会 43
(数式はいずれも https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression より引用)
コストによる正解率の変化
実験内容
◦ 8 次の特徴量まで利用。solver='liblinear', penalty='l1' を指定
◦ コストパラメータの設定値を変えながら正解率を描画
2019-03-11 社内勉強会 44
決定境界が変化する様子
degree=8, C=1e5
2019-03-11 社内勉強会 45
決定境界が変化する様子
degree=8, C=1e3
2019-03-11 社内勉強会 46
決定境界が変化する様子
degree=8, C=1e1
2019-03-11 社内勉強会 47
決定境界が変化する様子
degree=8, C=1e0
2019-03-11 社内勉強会 48
決定境界が変化する様子
degree=8, C=1e-1
2019-03-11 社内勉強会 49
各特徴量の重み
実験内容
◦ 8 次の特徴量まで利用。solver='liblinear', penalty='l1' を指定
◦ コストパラメータの設定値を変えながら各特徴量の重みを描画
2019-03-11 社内勉強会 50
重みの L1-norm と切片
実験内容
◦ 8 次の特徴量まで利用。solver='liblinear', penalty='l1' を指定
◦ コストパラメータの設定値を変えながら重みの L2-norm と切片を描画
2019-03-11 社内勉強会 51
おわり
&質疑応答
2019-03-11 社内勉強会 52

More Related Content

What's hot

不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
Shintaro Fukushima
 
時系列分析による異常検知入門
時系列分析による異常検知入門時系列分析による異常検知入門
時系列分析による異常検知入門
Yohei Sato
 

What's hot (20)

機械学習の理論と実践
機械学習の理論と実践機械学習の理論と実践
機械学習の理論と実践
 
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM) 一般化線形モデル (GLM) & 一般化加法モデル(GAM)
一般化線形モデル (GLM) & 一般化加法モデル(GAM)
 
One Class SVMを用いた異常値検知
One Class SVMを用いた異常値検知One Class SVMを用いた異常値検知
One Class SVMを用いた異常値検知
 
劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章劣モジュラ最適化と機械学習1章
劣モジュラ最適化と機械学習1章
 
機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門機械学習のためのベイズ最適化入門
機械学習のためのベイズ最適化入門
 
深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点深層学習の数理:カーネル法, スパース推定との接点
深層学習の数理:カーネル法, スパース推定との接点
 
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
勾配ブースティングの基礎と最新の動向 (MIRU2020 Tutorial)
 
不均衡データのクラス分類
不均衡データのクラス分類不均衡データのクラス分類
不均衡データのクラス分類
 
学習時に使ってはいないデータの混入「リーケージを避ける」
学習時に使ってはいないデータの混入「リーケージを避ける」学習時に使ってはいないデータの混入「リーケージを避ける」
学習時に使ってはいないデータの混入「リーケージを避ける」
 
Deep Learningと画像認識   ~歴史・理論・実践~
Deep Learningと画像認識 ~歴史・理論・実践~Deep Learningと画像認識 ~歴史・理論・実践~
Deep Learningと画像認識   ~歴史・理論・実践~
 
大阪PRML読書会#1資料
大阪PRML読書会#1資料大阪PRML読書会#1資料
大阪PRML読書会#1資料
 
時系列分析による異常検知入門
時系列分析による異常検知入門時系列分析による異常検知入門
時系列分析による異常検知入門
 
PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)PRMLの線形回帰モデル(線形基底関数モデル)
PRMLの線形回帰モデル(線形基底関数モデル)
 
機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化機械学習モデルのハイパパラメータ最適化
機械学習モデルのハイパパラメータ最適化
 
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
サポートベクターマシン(SVM)の数学をみんなに説明したいだけの会
 
時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証時系列問題に対するCNNの有用性検証
時系列問題に対するCNNの有用性検証
 
ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介ベイズ統計学の概論的紹介
ベイズ統計学の概論的紹介
 
深層学習の数理
深層学習の数理深層学習の数理
深層学習の数理
 
強化学習における好奇心
強化学習における好奇心強化学習における好奇心
強化学習における好奇心
 
PRML輪読#4
PRML輪読#4PRML輪読#4
PRML輪読#4
 

More from y-uti

More from y-uti (20)

潜在ディリクレ配分法
潜在ディリクレ配分法潜在ディリクレ配分法
潜在ディリクレ配分法
 
Active Object
Active ObjectActive Object
Active Object
 
ロジスティック回帰入門
ロジスティック回帰入門ロジスティック回帰入門
ロジスティック回帰入門
 
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
論文紹介 Identifying Implementation Bugs in Machine Learning based Image Classifi...
 
PECL operator で演算子オーバーロード
PECL operator で演算子オーバーロードPECL operator で演算子オーバーロード
PECL operator で演算子オーバーロード
 
PHP-ML で手書き数字認識
PHP-ML で手書き数字認識PHP-ML で手書き数字認識
PHP-ML で手書き数字認識
 
OPcache の最適化器の今
OPcache の最適化器の今OPcache の最適化器の今
OPcache の最適化器の今
 
スパース推定
スパース推定スパース推定
スパース推定
 
Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話Kaggle の Titanic チュートリアルに挑戦した話
Kaggle の Titanic チュートリアルに挑戦した話
 
PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告PHP カンファレンス福岡 2017 参加報告
PHP カンファレンス福岡 2017 参加報告
 
分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用分類問題 - 機械学習ライブラリ scikit-learn の活用
分類問題 - 機械学習ライブラリ scikit-learn の活用
 
JIT のコードを読んでみた
JIT のコードを読んでみたJIT のコードを読んでみた
JIT のコードを読んでみた
 
JIT for PHP を試した
JIT for PHP を試したJIT for PHP を試した
JIT for PHP を試した
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件anyenv + phpenv + php-build が便利すぎる件
anyenv + phpenv + php-build が便利すぎる件
 
PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告PHP カンファレンス福岡 参加報告
PHP カンファレンス福岡 参加報告
 
RFC: "var" Deprecation
RFC: "var" DeprecationRFC: "var" Deprecation
RFC: "var" Deprecation
 
最近の PHP の話
最近の PHP の話最近の PHP の話
最近の PHP の話
 
Windows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみたWindows で拡張モジュールをビルドしてみた
Windows で拡張モジュールをビルドしてみた
 
PECL を数えてみた
PECL を数えてみたPECL を数えてみた
PECL を数えてみた
 

Recently uploaded

Recently uploaded (11)

論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 

目で見る過学習と正則化