スキップしてメイン コンテンツに移動

ロジスティック回帰の実装

Introduction

今日はロジスティック回帰の実装を行いました。
初めに、僕のComputerはosはwindowsです。実装はPython3で行います。
最適化にはIRLSを用いています。
ロジスティック回帰の理論偏にロジスティック回帰の詳しい理論や説明を書いています。
ロジスティック回帰の理論編

概要

  • 使うデータ集合について
  • Pythonでのコードを紹介
  • コマンドラインでの実行結果

Dataset

データセットはこちらを使います。
dataset
このデータセットには住宅街のデータが入っています。
Python3のPandas.DataFrameでの表示を貼っておきます。
enter image description here
上から五行目までを貼っています。
もし、その家に住人がいるのであれば、Occupancyには1が入っています。
反対に、その家に住人がいるのであれば、Ouucpancyには0が入ります。
このデータセットは約8000個のサンプルが入ったトレーニング用データと、約2000個のサンプルが入ったテスト用のデータがあります。
しかし、今回はトレーニング用に100個、テスト用に100個のデータを使います。僕のcomputerがプログラミング用ではないためです。。。
すいません。。。

CODE

このコードはとても長いので、僕のGithubのページに乗せてあるものを見てください。。
githubのページ
ロジスティック回帰(def file)
ロジスティック回帰(main file)
mainファイルには、以下のようなコードが入っているファイルです。コマンドラインで入力するファイルになります。
if __name__ == '__mian__'
defファイルには様々な関数が入っています。クラスも使われています。Pythonのクラスについてはまた、機会があれば書きたいと思います。

いざ、実行!

w を推定します…
enter image description here
wが更新されるごとのクロスエントロピー誤差関数の様子をplotしておきます。
enter image description here
scatterplot でクロスエントロピー誤差関数をplotした画像です。
enter image description here
うまく減少しているのがわかります。
最適化は終わりました。
ではこのモデルのテストを行っていきましょう。
enter image description here
enter image description here
予測値と正しい値を比べてみます。
正答率は98パーセントと高い値を出しています。
ところで、ロジスティック回帰ではそれぞれのデータ点が\(C_1\)に属している確率を出してくれます。
Pの列を確認してみてください。
0.5に近い値のものがあまり、無いと思います。(見えてるところだけですが、、(笑))

コメント

このブログの人気の投稿

カーネルK-means 理論編

Introduction English ver 今日は、カーネルK-meansの理論について書きます。カーネルK-meansは通常のK-meansの欠点を補うことができます。通常のK-meansの欠点とカーネルK-meansの強みも説明します。もし、まだ御覧になられていなければ、通常の K-means 理論編 の記事を見ていただけるとよいのではないかと思います。 カーネルK-meansの実装編 も併せてご覧ください。 概要 K-meansの弱点 カーネルトリック カーネルK-means アルゴリズム K-meansの弱点 例えば、次のようなデータを用意します。 このデータはK-meansによってうまく分類することはできません。なぜなら通常のK-meansでは、データとプロトタイプのユークリッド距離に依存しているからです。そのため、このような円状に分布しているデータはうまく分類することができません。 プロトタイプとはそれぞれのクラスにあり、そのクラスを代表するようなもののことです。K-meansでは各クラスの平均ベクトルとなります。それゆえ、以下のような分類になってしまいます。 このようなデータではK-meansはうまくいきません。 K-meansで分類できるデータセットは次のように各クラスで固まっている必要があります。 カーネルK-meansはK-meansの弱点を補います。 カーネルトリック 初めに、カーネルトリックを説明します。 線形分離できないようなデータ$X$を例えば次のように線形分離できるように$\phi(x)$に送る写像$\phi$を考えます。 カーネルは次のように定義されます。 $$K(x,y) = \phi(x)^T \phi(y)$$ $\phi$を具体的に計算することは難しいですが、$K(x,y)$を計算することなら簡単です。 この手法をカーネルトリックと呼ばれます。 カーネルK means K-meansの目的関数を復習しておきます。 $$J = \sum_{n=1}^{N} \sum_{k=1}^{K} r_{nk} ||x_n-\mu_k||^2$$ ここで、 プロトタイプは$\mu_i ~\forall k \in K$としま...

dijkstra method

Introduction 日本語 ver Today, I will write about the dijkstra method. This method is algorithm which find the shortest distance. The map is expressed by graph. If you never see  this page , look at its page. This page explain the heap structure and definition of graph. The dijkstra method used heap structure, Because heap structure reduce the amout of calculation of dijkstra method. I use  this slide  to explain dijkstra. Overview Algorithm Implementation Algorithm This algorithm is  Decide start node, and this node named A. Allocate $d=\infty$ for each node, but d=0 for start node. Adjacent node of A named adj_list.  For adj in adj_list:  If d of adj > d of A + weight to adj -> d = A + weight to adj. Remove A from graph network. Find node which have the smallest d and it named A, and if network have node, back to 4. I explain this algorithm by drawing.  I explain algorithm by using this graph.  Fis...

Bayes' theorem

Introduction sorry, this page is Japanese only.   今回はベイズの定理について書こうと思います。 ベイズの定理とは、イギリスのトーマス・ベイズによって発見された、条件付き確率に関する定理です。現在のベイズ推定で用いられる重要な定理です。どのような定理かを解説していこうと思います。 ベイズの定理 ベイズの定理とは 確率P(B|A):事象Aが起こった後での事象Bの確率(事後確率) 確率P(B):事象Aが起こる前の事象Bの確率(事前確率) とするとき以下が成り立つことを示しています。 $$P(B|A) = \frac{P(A|B) P(B)}{P(A)}$$ 例 例えば、次のように事象A、事象Bwo定義します。 事象A:あるYoutuberが動画を投稿したとき、再生回数が100万回を超える 事象B:あるYoutuberがお金を50万円以上使う動画を投稿する この時確率P(A|B)、つまり50万円以上を使った動画が再生回数100万回を超える確率は、youtube内の50万円以上使っている動画を根こそぎ集め、その再生回数を得ることによって推定できそうです。では確率P(A|B)がわかった時、確率P(B|A)もわかる。これがベイズの定理の強みです。(当然確率P(A)とP(B)がわかっている必要はあります。) 確率P(B|A)とはあるYoutuberの動画が再生回数100万回を超えたとき、その同がで50万円以上使っている確率となります。これがわかれば、100万回動画が再生される原因は本当に50万円以上お金を使うことなのかがわかります。 確率P(A|B)が低い時を考えてみましょう。 つまり、50万円以上使った動画は再生回数100万回を超える確率は高い。しかし、100万回再生回数を突破したとき、その動画が50万円以上使っている可能性は低い。この状況はベイズの定理の式を考えいると理解しやすいです。 ベイズの定理の式を見てみると、P(B|A)は低く、P(A|B)が高いということは、確率P(A)が著しく高い。もしくは、P(B)が著しく低い。この二つがあげられます。 つまり、あるYouruberが100万回再生を突破する確率がかなり、高い。もしくは、あるYoutuber...