機械学習
第 4 回 回帰(非線形)
白浜 公章
TypeError: a byte-like object is required, not ’str’
の対処方法は、以下の方法で、 Anaconda 3.6 をインストールすること
1.
今インストールされているAnaconda
(恐らく、バージョン3.7
)をアンインストール• conda install anaconda-clean
をインストールし実行して、全てyes
• sudo rm -rf anaconda3
• emacs .bash_profile
で、.bash_profile
に記述されているAnaconda
関連の設定があれば削除•
アプリケーションの下のAnaconda Navigator
のアイコンがあれば、ゴミ箱へ 例えば、下記のサイトが参考になるhttps://qiita.com/nemui_/items/210d297493ff176d31fe
2.
下記から、anaconda 3.6
をダウンロードhttps://repo.continuum.io/archive/Anaconda3-5.2.0-MacOSX-x86_64.pkg
3.
ダウンロードしたファイルをダブルクリックし、全ての質問に肯定的に回答してanaconda 3.6
をインストール4.
念のため、ターミナルは再起動した方がいいと思う。その後、下記を実行して、autograd
をインストール• pip install --upgrade pip
• pip install autograd
• jupyter-notebook
Anaconda 3.7で動かす方法を探しましたが、ちょっと無理でした(泣)
回帰問題
事例:(特徴、 ラベル(連続値))
(前回)
線形回帰:直線や超平面を用いて、特徴からラベルを予測
•
最小2
乗コスト関数は凸→
常に最適パラメータが求まる(今回)
非線形回帰:元の特徴空間において非線形な関係を扱うモデルを学習
•
知識に基づく特徴デザイン:特徴変換を行って、変換後の特徴空間で線形回帰•
ロジスティック回帰最小
2
乗コスト関数は非凸→
必ずしも最適パラメータが求まる訳ではない• 𝒍
𝟐正則化:非凸なコスト関数を若干凸化(Convexify
)できる非線形回帰、
𝑙
2正則化、ロジステック回帰の考え方や特徴は、今後も使う重要な概念なので抑えておくこと!
今日のポイント
正確な予測ができる モデルを学習する
知識に基づく特徴デザイン
変換後の特徴空間で線形回帰
多くの場合、特徴とラベルの関係は非線形(直線や超平面はうまく近似できない)
もしデータに対して深い知識があれば、特徴を変換し、高精度な近似を行えることがある
(元の特徴空間) (変換後の特徴空間)
特徴変換
𝑥𝑝 → 𝑓 𝑥𝑝 = sin(2𝜋𝑥𝑝)
必要であれば、元の特徴空間に逆変換できる 𝑓 𝑥 → 𝑥 = 1
2𝜋sin−1(𝑓 𝑥 )
(学習するモデル)
𝑏 + 𝑓(𝑥
𝑝)𝑤 = 𝑏 + sin(2𝜋𝑥
𝑝) ≈ 𝑦
𝑝(コスト関数)
minimize
𝑏,𝑤
𝑔(𝑏, 𝑤)
= minimize
𝑏,𝑤
𝑝=1 𝑃
𝑏 + 𝑓
𝑝𝑤 − 𝑦
𝑝 2(変換後の空間での最適化)
෨𝒇
𝑝= 1 𝑓
𝑝 𝑇,𝒘 = 𝑏 𝑤
1 𝑇 として、𝑔 𝒘 =
𝑝=1 𝑃
෨𝒇
𝑝𝑇𝒘 − 𝑦
𝑝 2となり、これまでと同じ
コード
3_feature_engineering.ipynb
参照特徴デザインの難しさ
ここまでで“いい特徴(変換)”とは、
•
変換後の特徴空間中で高精度な線形回帰ができる•
上記により、元の特徴空間での非線形回帰が実現できている残念ながら、
こんなことは非常に稀
このデータを、
𝑓 𝑥 = 𝑒
3𝑥sin(3𝜋
2𝑥 − 0.5 ) 3𝜋
2(𝑥 − 0.5)
と変換すれば、線形回帰できるなんて、誰が分かる???
元の特徴が1, 2次元ならデータを視覚的に見て、有効そうな 特徴(変換)を検討づけられるかも知れないが、実際に扱う データの特徴は100次元以上で視覚化不可能!
(画像処理なら数千次元、テキスト処理なら数十万次元はザラ)
データを解析して、有用な特徴を自動的に抽出する特徴学習の必要性!
(
7
回目以降は全てコレに関すること)あと、複数の特徴変換を用いれば、複雑な特徴とラベルの関係も表せる!
ロジスティック回帰( Logistic Regression )
ロジステックシグモイド関数
𝜎 𝑥 = 1
1 + 𝑒
−𝑥• 値が増え始めたら、指数的に増える
• ある程度まで増えたら“サチる”
(なだらかにしか増えなくなる)
• パラメータ
𝑤
を足した𝜎 𝑤𝑥 =
11+𝑒−𝑤𝑥
を考えると、増え方を調整できる
ロジスティックシグモイド関数の本当の目的は、ステップ関数の近似(後述)
ロジステックシグモイド関数の引数が線形回帰の式になった
• 重み𝑤は、𝜎の値の増え方を調整
• バイアス𝑏は、𝜎の左右への移動を調整
1
次元特徴のロジステック回帰𝑝
番目の学習事例𝑥
𝑝, 𝑦
𝑝 に対して、𝜎 𝑏 + 𝑥
𝑝𝑤 = 1
1 + 𝑒
−(𝑏+𝑥𝑝𝑤)≈ 𝑦
𝑝 𝑁
次元特徴のロジステック回帰𝑝
番目の学習事例𝒙
𝑝, 𝑦
𝑝 に対して、𝜎 𝑏 + 𝒙
𝑝𝑇𝒘 = 1
1 + 𝑒
−(𝑏+𝒙𝑝𝑇𝒘)≈ 𝑦
𝑝 ここで、𝒙
𝑝= 𝑥
1,𝑝𝑥
2,𝑝⋯ 𝑥
𝑁,𝑝 𝑇𝒘 = 𝑤
1𝑤
2⋯ 𝑤
𝑁 𝑇ロジステック回帰の最小 2 乗コスト関数
𝑃
個の学習事例𝒙
𝑝, 𝑦
𝑝𝑝=1
𝑃 のそれぞれに対して、ロジステック回帰による予測値
𝜎 𝑏 + 𝒙
𝑝𝑇𝒘
と 実際のラベル𝑦
𝑝との2
乗誤差を算出し足し合わせる𝑔 𝑏, 𝒘 =
𝑝=1 𝑃
𝜎(𝑏 + 𝒙
𝑝𝑇𝒘) − 𝑦
𝑝 2(コンパクト版)
𝑔 𝒘 =
𝑝=1 𝑃
𝜎( 𝒙
𝑝𝑇𝒘) − 𝑦
𝑝 2ここで、
𝒙
𝑝= 1 𝑥
1,𝑝𝑥
2,𝑝⋯ 𝑥
𝑁,𝑝 𝑇
𝒘 = 𝑏 𝑤
1𝑤
2⋯ 𝑤
𝑁 𝑇𝛻𝑔 𝒘 = 2
𝑝=1 𝑃
𝜎( 𝒙
𝑝𝑇𝒘) − 𝑦
𝑝𝜎( 𝒙
𝑝𝑇𝒘) 1 − 𝜎( 𝒙
𝑝𝑇𝒘) 𝒙
𝑝𝑔 𝒘
の1
階微分• 合成関数の微分
• 𝜎′ 𝑥 = σ 𝑥 (1 − σ 𝑥 ) を用いて、Σの中身を微分 すれば、すんなり求まる
式が複雑で
𝛻𝑔 𝒘 = 0
を直接解くことは困難なので、上記の
1
階微分に基づく最急勾配法で、最適パラメータ𝒘
∗を探索する ただし、非凸関数なので、大域最小に収束するとは限らない!(コード
4_logistic_regression.ipynb
参照)𝑙 2 正則化( 𝑙 2 Regularisation )
正則化項(
Regulariser
):シンプルな凸関数非凸なコスト関数に加えてやることで、若干だけコスト関数を凸化できる
(代表的な正則化項)
•
𝑙
1正則化項(スパースコーディング):𝒘
1= σ
𝑛=1𝑁𝑤
𝑛• 𝑙2正則化項: 𝒘 22 = σ𝑛=1𝑁 𝑤𝑛2 ← これを使う(使いやすい、全域で微分可能)
𝑔 𝑏, 𝒘 + 𝜆 𝒘
22 正則化項の強さをコントロールするためのパラメータ•
𝜆
が非常に小:元のコスト関数と変わらない•
𝜆が非常に大:𝑔 𝑏, 𝒘 + 𝜆 𝒘
22≈ 𝜆 𝒘
22(正則化項だけでコストが決まってしまう)
𝑔 𝑤 + 𝑤2(𝜆 = 1) 𝑔 𝑤 = max2 0, 𝑒−𝑤𝑠𝑖𝑛 4𝜋 𝑤 − 0.1
水平なので、最急勾配法 やニュートン法を始めても いきなり終わる
正規化項の追加により、
角度が出来たので、
ひとまず最小に収束できる
新たな局所最小を作ってしまった
注意:正規化項の追加により、最適パラメータは変わる(コード4_regularisation_simple.ipynb参照)
ただし、𝜆をそれなりに小さくしていれば、正規化項の追加前と後で最適パラメータは、大体同じなる。
コード 4_logistic_regression_
reg.ipynbも参照