SJE/2015/ex12
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*SJE2015 ex12 [#o38e5fce]
**課題A [#b49024d4]
***シグモイドを gnuplot でぐりぐり [#h7decb37]
次のような関数 &mathjax{s(x)}; を考える.これはシグモイド...
#mathjax( s(x) = \frac{1}{1+\exp(-x)} )
gnuplot でこの関数のグラフを描いてみよう.参考: [[wiki:D...
$ gnuplot
gnuplot> s(x) = 1.0/(1+exp(-x))
gnuplot> plot s(x)
式の形とこの結果を元に,次の問に答えなさい.
+ s(0) の値はいくつ?
+ s(x) の値域はどんな?
次に,&mathjax{a, b, c}; を定数として,&mathjax{z = s(ax+...
gnuplot> z(x, y, a, b, c) = s( a*x + b*y + c )
gnuplot> splot z(x,y,1,0,2)
gnuplot> splot z(x,y,1,0,-2)
gnuplot> splot z(x,y,1,1,-2)
gnuplot> splot z(x,y,1,-1,-2)
ぐりぐりできない場合は,デフォルトの描画環境が対応してな...
gnuplot> set terminal x11 出力先を X11 に変更.
gnuplot> replot 再描画.これでぐりぐ...
***びぶん [#yb9808a7]
&mathjax{ z = s(x) }; の導関数 &mathjax{ \frac{dz}{dx} }...
#mathjax( \frac{dz}{dx} = z \times \mbox{hoge} )
という形に表すことができることに気づく.hoge の部分には,...
***びぶんぶん [#obb17635]
&mathjax{ X = ax+by+c }; とおくと,高校で習った合成関数の...
#mathjax( \frac{\partial z}{\partial a} = \frac{\partial...
である.これと↑の結果を用いて,&mathjax{ z }; の &mathjax...
***びぶんぶんぶん [#yaef32ca]
&mathjax{ t }; を定数として,
#mathjax( h = -t\log z - (1-t) \log (1-z) )
とおく.&mathjax{ \frac{\partial h}{\partial a} };,同 b,...
***なんじゃこりゃ [#f221bc5b]
次の課題を待て
**課題B [#w2a0bda3]
以下を読んで理解しなさい.
***ロジスティック回帰と2クラス識別 [#b05bb4b8]
&mathjax{D};次元特徴ベクトルで与えられるデータを「ほげク...
ある2次元データを &mathjax{ \bm{x} = (x, y) }; とする.こ...
学習データとして,&mathjax{N};個の特徴ベクトル &mathjax{ ...
#mathjax( h_n = -t_n\log z_n - (1-t_n)\log ( 1 - z_n) )
というものを考える.今の問題では &mathjax{t_n}; が 0 か 1...
#mathjax( H = \sum_{n=1}^{N} h_{n} )
である.この &mathjax{H}; を最小化するようにパラメータ &m...
***確率的勾配降下法による交差エントロピー最小化 [#z80ac0b5]
&mathjax{H}; を最小にするパラメータ &mathjax{a,b,c}; を求...
いまの学習の目的は &mathjax{H}; の最小化だから,本来は上...
&mathjax{h_n}; のパラメータ &mathjax{\theta}; に対する偏...
+ パラメータを適当な乱数で初期化する
+ 以下を適当な回数繰り返す
++ &mathjax{N}; 個の学習データの中から一つをランダムに選...
++ &mathjax{(x_n,y_n)}; に対するモデルの出力 &mathjax{z_n...
++ &mathjax{h_n}; を計算する
++ パラメータ &mathjax{\theta}; の値を次式で更新する
#mathjax( \theta^{\rm new} = \theta -\eta \frac{\partial ...
&mathjax{ \eta }; は小さな正の定数である.
&mathjax{ \frac{\partial h_n}{\partial \theta} }; は現在...
**課題C [#qee16d4e]
人工データをロジスティック回帰モデルで識別させてみよう.
***データ生成プログラム [#mb8bdf65]
以下を適当な名前で保存して,ipython 上で実行してみよう.
#pre{{
import numpy as np
def getData( seed = None ):
if seed != None:
np.random.seed( seed )
# three 2-D spherical Gaussians
X0 = 0.1 * np.random.randn( 200, 2 ) + [ 0.3, 0.3 ]
X1 = 0.1 * np.random.randn( 200, 2 ) + [ 0.7, 0.6 ]
X2 = 0.05 * np.random.randn( 200, 2 ) + [ 0.3, 0.7 ]
X = np.vstack( ( X0, X1, X2 ) )
lab0 = np.zeros( X0.shape[0], dtype = int )
lab1 = np.zeros( X1.shape[0], dtype = int ) + 1
lab2 = np.zeros( X2.shape[0], dtype = int ) + 2
label = np.hstack( ( lab0, lab1, lab2 ) )
K = 3
return X, label
if __name__ == '__main__':
import matplotlib
import matplotlib.pyplot as plt
X, lab = getData()
fig = plt.figure()
plt.xlim( -0.2, 1.2 )
plt.ylim( -0.2, 1.2 )
ax = fig.add_subplot( 1, 1, 1 )
ax.set_aspect( 1 )
ax.scatter( X[lab == 0, 0], X[lab == 0, 1], color = '...
ax.scatter( X[lab == 1, 0], X[lab == 1, 1], color = '...
ax.scatter( X[lab == 2, 0], X[lab == 2, 1], color = '...
fig.show()
}}
このプログラムでは3クラスのデータを2次元の正規分布で生成...
#pre{{
import getdata1214 (たとえば上記を getdata1214.py とい...
X_org, lab_org = getdata1214.getData()
idx01 = lab_org != 2
X, lab = X_org[idx01], lab_org[idx01]
print X.shape, lab.shape
}}
***実験 [#u2da15d1]
上記プログラムで得られる2クラスのデータを学習データとして...
- 学習が一定回数(たとえば &mathjax{N}; 回)進むたびに交...
- パラメータの初期値は,&mathjax{[0,1)}; の一様乱数をもと...
- とりあえず &mathjax{\eta}; は 0.01 とか 0.001 とか.う...
- getdata1214.getData は引数なしでは毎回乱数の種が異なっ...
- &mathjax{z = 0.5 \Leftrightarrow ax+by+c = 0 }; だから...
#pre{{
学習データの散布図を描く
xx = np.asarray( plt.xlim() )
yy = -( a * xx + c ) / b # 本当は b → 0 の...
line = matplotlib.lines.Line2D( xx, yy )
ax.add_line( line )
fig.show()
}}
終了行:
*SJE2015 ex12 [#o38e5fce]
**課題A [#b49024d4]
***シグモイドを gnuplot でぐりぐり [#h7decb37]
次のような関数 &mathjax{s(x)}; を考える.これはシグモイド...
#mathjax( s(x) = \frac{1}{1+\exp(-x)} )
gnuplot でこの関数のグラフを描いてみよう.参考: [[wiki:D...
$ gnuplot
gnuplot> s(x) = 1.0/(1+exp(-x))
gnuplot> plot s(x)
式の形とこの結果を元に,次の問に答えなさい.
+ s(0) の値はいくつ?
+ s(x) の値域はどんな?
次に,&mathjax{a, b, c}; を定数として,&mathjax{z = s(ax+...
gnuplot> z(x, y, a, b, c) = s( a*x + b*y + c )
gnuplot> splot z(x,y,1,0,2)
gnuplot> splot z(x,y,1,0,-2)
gnuplot> splot z(x,y,1,1,-2)
gnuplot> splot z(x,y,1,-1,-2)
ぐりぐりできない場合は,デフォルトの描画環境が対応してな...
gnuplot> set terminal x11 出力先を X11 に変更.
gnuplot> replot 再描画.これでぐりぐ...
***びぶん [#yb9808a7]
&mathjax{ z = s(x) }; の導関数 &mathjax{ \frac{dz}{dx} }...
#mathjax( \frac{dz}{dx} = z \times \mbox{hoge} )
という形に表すことができることに気づく.hoge の部分には,...
***びぶんぶん [#obb17635]
&mathjax{ X = ax+by+c }; とおくと,高校で習った合成関数の...
#mathjax( \frac{\partial z}{\partial a} = \frac{\partial...
である.これと↑の結果を用いて,&mathjax{ z }; の &mathjax...
***びぶんぶんぶん [#yaef32ca]
&mathjax{ t }; を定数として,
#mathjax( h = -t\log z - (1-t) \log (1-z) )
とおく.&mathjax{ \frac{\partial h}{\partial a} };,同 b,...
***なんじゃこりゃ [#f221bc5b]
次の課題を待て
**課題B [#w2a0bda3]
以下を読んで理解しなさい.
***ロジスティック回帰と2クラス識別 [#b05bb4b8]
&mathjax{D};次元特徴ベクトルで与えられるデータを「ほげク...
ある2次元データを &mathjax{ \bm{x} = (x, y) }; とする.こ...
学習データとして,&mathjax{N};個の特徴ベクトル &mathjax{ ...
#mathjax( h_n = -t_n\log z_n - (1-t_n)\log ( 1 - z_n) )
というものを考える.今の問題では &mathjax{t_n}; が 0 か 1...
#mathjax( H = \sum_{n=1}^{N} h_{n} )
である.この &mathjax{H}; を最小化するようにパラメータ &m...
***確率的勾配降下法による交差エントロピー最小化 [#z80ac0b5]
&mathjax{H}; を最小にするパラメータ &mathjax{a,b,c}; を求...
いまの学習の目的は &mathjax{H}; の最小化だから,本来は上...
&mathjax{h_n}; のパラメータ &mathjax{\theta}; に対する偏...
+ パラメータを適当な乱数で初期化する
+ 以下を適当な回数繰り返す
++ &mathjax{N}; 個の学習データの中から一つをランダムに選...
++ &mathjax{(x_n,y_n)}; に対するモデルの出力 &mathjax{z_n...
++ &mathjax{h_n}; を計算する
++ パラメータ &mathjax{\theta}; の値を次式で更新する
#mathjax( \theta^{\rm new} = \theta -\eta \frac{\partial ...
&mathjax{ \eta }; は小さな正の定数である.
&mathjax{ \frac{\partial h_n}{\partial \theta} }; は現在...
**課題C [#qee16d4e]
人工データをロジスティック回帰モデルで識別させてみよう.
***データ生成プログラム [#mb8bdf65]
以下を適当な名前で保存して,ipython 上で実行してみよう.
#pre{{
import numpy as np
def getData( seed = None ):
if seed != None:
np.random.seed( seed )
# three 2-D spherical Gaussians
X0 = 0.1 * np.random.randn( 200, 2 ) + [ 0.3, 0.3 ]
X1 = 0.1 * np.random.randn( 200, 2 ) + [ 0.7, 0.6 ]
X2 = 0.05 * np.random.randn( 200, 2 ) + [ 0.3, 0.7 ]
X = np.vstack( ( X0, X1, X2 ) )
lab0 = np.zeros( X0.shape[0], dtype = int )
lab1 = np.zeros( X1.shape[0], dtype = int ) + 1
lab2 = np.zeros( X2.shape[0], dtype = int ) + 2
label = np.hstack( ( lab0, lab1, lab2 ) )
K = 3
return X, label
if __name__ == '__main__':
import matplotlib
import matplotlib.pyplot as plt
X, lab = getData()
fig = plt.figure()
plt.xlim( -0.2, 1.2 )
plt.ylim( -0.2, 1.2 )
ax = fig.add_subplot( 1, 1, 1 )
ax.set_aspect( 1 )
ax.scatter( X[lab == 0, 0], X[lab == 0, 1], color = '...
ax.scatter( X[lab == 1, 0], X[lab == 1, 1], color = '...
ax.scatter( X[lab == 2, 0], X[lab == 2, 1], color = '...
fig.show()
}}
このプログラムでは3クラスのデータを2次元の正規分布で生成...
#pre{{
import getdata1214 (たとえば上記を getdata1214.py とい...
X_org, lab_org = getdata1214.getData()
idx01 = lab_org != 2
X, lab = X_org[idx01], lab_org[idx01]
print X.shape, lab.shape
}}
***実験 [#u2da15d1]
上記プログラムで得られる2クラスのデータを学習データとして...
- 学習が一定回数(たとえば &mathjax{N}; 回)進むたびに交...
- パラメータの初期値は,&mathjax{[0,1)}; の一様乱数をもと...
- とりあえず &mathjax{\eta}; は 0.01 とか 0.001 とか.う...
- getdata1214.getData は引数なしでは毎回乱数の種が異なっ...
- &mathjax{z = 0.5 \Leftrightarrow ax+by+c = 0 }; だから...
#pre{{
学習データの散布図を描く
xx = np.asarray( plt.xlim() )
yy = -( a * xx + c ) / b # 本当は b → 0 の...
line = matplotlib.lines.Line2D( xx, yy )
ax.add_line( line )
fig.show()
}}
ページ名: