Top / SJS / 2016 / ex11

SJS2016 ex11 [edit]

これまでの分 [edit]

  • 以前の分を全て報告してokをもらってから,今回分にすすみましょう.

課題A [edit]

人工データをロジスティック回帰モデルで識別させてみよう(0) 〜 データ生成プログラム

以下を適当な名前で保存して,ipython 上で実行してみよう. このプログラムでは3クラスのデータを2次元の正規分布で生成してますが,nclass を 2 にしたら赤と緑の2クラスのデータを作ることもできます.

課題B [edit]

人工データをロジスティック回帰モデルで識別させてみよう (1) 〜 2クラス識別の実験

上記プログラムで得られる2クラスのデータを学習データとして,ロジスティック回帰モデルの交差エントロピーをSGDによって最小化する学習プログラムを作成しよう.

  • 学習が一定回数(たとえば \( N \) 回)進むたびに交差エントロピー \( H \) と誤識別率(\( z = 0.5 \)を境にしてどっちと識別したか判断する)を表示するようにしよう.
  • パラメータの初期値は,\( [0,1) \) の一様乱数をもとに \( [ -0.01, 0.01 ) \) くらいにするとよいかも
  • とりあえず \( \eta \) は 0.01 とか 0.001 とか.うまく学習がすすまないときはもっと小さくしてみたらよいかも.
  • ↑ の getData は引数なしでは毎回乱数の種が異なってデータが変わります.それに,勾配法による学習はパラメータの初期値や \( \eta \) 等の値が変われば毎回結果が変わります.
  • \( z = 0.5 \Leftrightarrow ax+by+c = 0 \) だから,学習後のパラメータの値を見ると,学習した識別器が2クラスの境界をどんなだと思っているかがわかりますね.次のようにすると...これは課題ではありませんが.
    学習データの散布図を描く
    xx = np.asarray( plt.xlim() )
    yy = -( a * xx + c ) / b               # 本当は b → 0 のときのこととかちゃんと考えるべき
    line = matplotlib.lines.Line2D( xx, yy )
    ax.add_line( line )
    fig.show()
    

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-11-21 (月) 08:52:23 (363d)