Pythonでニュートン法を実装しました。

この本のニュートン法を実装していきます。
www.amazon.co.jp

1変数の場合

第3章のアルゴリズム3.3(1変数のニュートン法)を、Pythonで実装してみました。

import numpy as py

def f(x):
	return - x ** 3
def f_p(x):
	return - 3 * x ** 2

def f_pp(x):
	return - 6 * x

def newton(x,fp,fpp):
	iteration = 100
	delta = 0.00001
	for i in range(iteration):
		x_new = x- ( fp(x)/fpp(x) )
		if abs(x_new -x) < delta:
			break
		x = x_new
	return(x)

print(newton(-5.,f_p,f_pp))

多変数の場合

次に、多変数の場合で実装しました。下記は2変数の場合に対応しています。教科書ではアルゴリズム3.4(多変数のニュートン法)です。関数は例題3.2に合わせました。

import numpy as np

def f(x):
	return x[0] ** 3 + x[1] ** 3 - 9 * x[0] * x[1] + 27

def df(x):
	return np.array([3 * x[0] ** 2 - 9 * x[1], 3 * x[1] ** 2 - 9 * x[0]])

def H(x):
	return np.array([[6*x[0],-9],[-9,6*x[1]]])

def newton_multi(x,H):
	iteration = 10000
	delta = 0.00001
	for i in range(iteration):
		x_new = x - np.linalg.inv(H(x)).dot(df(x))
		if np.linalg.norm(x - x_new) < delta:
			break
		x = x_new
	return(x)

print(newton_multi(np.array([-5,-5]),H))

Pythonで混合モデルの教師なし学習アルゴリズムを実装しました。

www.amazon.co.jp

 この本の第5章(統計的最適化)のクラス分類問題のところです。
 \{x_\alpha\},\alpha=1,...,Nというデータを、教師データを使わずに、k個のクラス(ここでは2クラス)に分類します。各データx_\alphaが両方のクラスにまたがってある確率で所属していると考え、w_\alpha^{(k)}はデータx_\alphaがクラスkに属する確率とします。初期値の与え方に工夫が必要です。

import numpy as np
import random

def unsupervised(N=20,n=10,iteration=1000): #N is number of samples
	#normal distribution
	x1 = np.random.normal(10,5,n)
	x2 = np.random.normal(20,10,N-n)
	x = np.append(x1,x2)
	#initial value of w, vector length is N	
	w1 = np.ones(N)*0.2
	w1[x<15] = 0.8 # for class 1
	w2 = 1 - w1  # for class 2

	for i in range(iteration):
		#calculate N, mu, sigma for each k = 1, 2
		N1 = sum(w1)
		N2 = sum(w2)
		mu1 = sum(w1*x) / N1
		mu2 = sum(w2*x) / N2
		sigma1sq = sum(w1*(x - mu1)**2) / N1
		sigma2sq = sum(w2*(x - mu2)**2) / N2
		#calculate pi and p
		pi1 = N1 / N
		pi2 = N2 / N
		p1 = (1/np.sqrt(2 * np.pi * sigma1sq)) * np.e ** ( -(x - mu1)**2 / (2*sigma1sq) )
		p2 = (1/np.sqrt(2 * np.pi * sigma2sq)) * np.e ** ( -(x - mu2)**2 / (2*sigma2sq) )
		#calculate the new weight
		w1_new = pi1 * p1 / (pi1 * p1 + pi2 * p2)
		w2_new = pi2 * p2 / (pi1 * p1 + pi2 * p2)
		#convergence
		if sum ( abs(w1_new - w1) + abs(w2_new - w2) ) < 0.000001:
			break
		w1 = w1_new
		w2 = w2_new
	return w1, w2, i

Pythonをゼロから勉強する方法とお勧めの参考書

今回はPythonを対象にした、初学者対象の勉強方法を紹介します。私自身は決して上級者ではありませんが、Pythonに興味を持っていてやってみたい、という人からよく質問されるので、少しだけまとめてみました。

最初は、とっても簡単な本を読もう!

www.amazon.co.jp
 最初のステップとしては、簡単な本をさらっと通してみることをおすすめします。私は、Pythonを勉強しはじめた一番最初にこの本を読みコツを掴みました。300ページ以上あるのですが、わかりやすいのでスラスラ進められます。初心者がプログラミングで躓きやすいポイントや、Python独特の考え方などは丁寧に解説されていますし、一方であまり細部に深入りしないところも入門書としてはポイントアップです。これ以外のPython本は読んだことがないので比較できませんが、入りとしては、なかなか良かったです。

目次

●第1章 プログラムを作ろう!●第2章 プログラムの材料と道具●第3章 データと型のすべて●第4章 データの入れ物●第5章 条件分岐と繰り返し●第6章 ファイルの読み書き●第7章 Pythonで画を描く●第8章 関数を作る●第9章 新しいデータ型を作る●第10章 本格的なプログラミング●付録●練習問題の解答●索引

次に、Codecademyで基礎を鍛えよう!

www.codecademy.com
 次にお勧めしたいのがCodecademyのオンラインコースです。先ほど紹介した入門書よりも少しだけ難易度が高いので、次のステップにちょうどいいと思います。英語のサイトですので指示はすべて英語になりますが、そんなに難しい文章は出てきません。Codecademyでは、ウェブブラウザーの中でプログラミングを勉強できる環境になっているのが大きな特徴です。
 良い点を強調すると、書籍を用いた学習より効率的、簡単ということです。書籍を用いて勉強する人もいると思いますが、Codecademyでは一つの画面で説明、エディタ、実行結果すべてが表示されているので、非常に効率的な気がします。またパソコン一台あればどこでもすぐに勉強を再開できるというのも良いですね。一つの課題を達成するごとにメダルのようなものが貰えるので、ささやかな達成感も得られます。
 二つ目の良い点は、書籍を用いた学習より理解が深まることです。書籍だと練習問題の答えが乗っていますが、Codecademyでは答えはありません。正解のプログラムを記入しないとクリアしたことになりませんので、しっかりと理解しながら進めていかなければなりません。これはプログラミングの上達にとって重要なことで、自分で考えながら(試行錯誤しながら)進めていくと、ただ本のプログラムを本から書き写していく場合と比べて理解度が高まります。色んなエラーと闘いながら上達できるという大変有り難いウェブサービスです。その代わり、脳に多少負荷がかかります。
 Codecademyに出てくる課題は、「果物屋さんの簡単な会計システムを作る」という具体的な練習タスクとなっていて、それを小さいパーツに分解して、一つ一つ実装していきます。他の言語も学んだことのないプログラミング初学者にとっては、非常に良い練習になると思います。
 注意点としては、課題の答えがわからないと、答えがありませんので、大変に時間を無駄にしてしまうことがあります。対策としては、Pythonの入門書などを手元に置いておき、わからないことはすぐ調べてみる、ググってみる、それでもダメならCodecademyのQAフォーラムを覗いてみる、という順番がおすすめです。難しい問題になるとQAフォーラムに回答をアップしている人が多いです。(1箇所、Codecademy側のバグが混じっていることがありましたが、QAフォーラムでバグを迂回する方法も紹介されていました。)
 また、分量が多いというのも指摘しておきます。Codecademyの中で、最も分量の多いコースです。他のコースだと数時間で終わるものも多いようです。サイトに乗っている目安として13時間かかると書いてありますが、私は20時間近くかかった気がします。Pythonの勉強と言うよりは、プログラミングの考え方を学ぶためのパズルのような問題も多いので、ちゃんとやると結構疲れちゃいます。そのため、やる気を維持しながらやり抜く工夫が必要になってきます。

最後に、DataCampでデータ解析の基礎を身につけよう!

www.datacamp.com
 Pythonを勉強する目的にも寄りますが、もしデータ解析のために勉強しているのであれば、こちらのサイトのオンラインコースを最後におすすめしておきます。
 DataCampとは2013年11月設立の2歳企業。社員は10名のベルギー企業。オフィスはボストンとベルギーの2箇所。今までDataCampのコースを受講した人は25万人超。Kaggle参加者が30万人超、Coursera Machine Learning(Ng先生)が100万人超と比較すると、結構頑張っています。(それぞれ層は異なるので単純な比較はできませんが、2歳ベンチャーとしてはすごい勢いです…)そしてCEO兼創業者のJonathan Cornelissenは、計量ファイナンスのPhDでHFT(High Frequency Trading)やR周りで色々とやっていたみたいです。Rをヘビーに使いこなしていくうちに、DataCampの創業へと繋がっていったのかもしれません。
 話が逸れてしまいましたがDataCampが提供しているコースの中で、Intro to Python for Data Scienceというのが今回のお勧めコースです。Codecademyは20時間近くかかり結構重たいですが、DataCampはデータ分析に特化していますので数時間の軽いコースになっています。プログラミングがそもそも初めて、という人であればCodecademyは丁寧でいいかもしれませんが、RやMatlabからPythonへ移行したい、という人であれば、Codecademyを飛ばしてDataCampで数時間やってコツをつかむのがいいかもしれません。コース内容は、Python Basics(30分)、Lists(40分)、Functions and Packages(40分)、Numpy(40分)という4章構成です。
 DataCampにはPythonのコースがもう一つあります。こちらは有料のコースですが、最初のbasic plots with matplotlibだけは無料です。簡単なヒストグラムやscatter plotを作る練習ができます。軸の名前、色などの細かい設定についても学びます。(20分ぐらいで終わります)
www.datacamp.com

終わりに

これで、入門編は終わりです。後は、みなさんがPythonでやりたかったことを始めましょう。その際にはもう少し応用寄りの本が必要になることもあれば、Python関連サイトを色々と徘徊することにもなると思います。ググりながらスキルアップすることも重要になると思います。

確率・統計学をゼロから勉強する方法とお勧めの参考書

 今回は、確率・統計学をゼロから勉強する方法についての記事です。私が今まで読んできた確率・統計学の参考書の中で、初学者にお勧めの物を学習効果が高まる順番で紹介していきます。

数理統計学の基礎〜よく分かる予測と確率変数〜

www.amazon.co.jp
 題名に数理統計学と入っていますが、入門書として非常に良い参考書だと思います。ある程度カチッとした説明があり、かつ初学者に向けた説明になっているので、初学者でもちゃんと勉強すればかなり理解が深まります。私自身はこの本とマセマ統計学の2冊により、確率変数や様々な確率分布がやっと理解できた、という感じでした。
 難しい証明が省略されているので読み終わるのにそれほど時間がかかりません。ですので、最初のうちは一通り勉強して、2通り目、3通り目に理解を深めていくというパターンの人に向いていますね。一通り勉強した後に、マセマ統計、という流れが良いのではないでしょうか。
 モデル推定・モデル選択も扱いますので170ページの本にしては、密度の高い本だと思います。

1 事象と確率
2 確率変数と確率分布
3 統計量と確率変数
4 推定
5 検定
6 モデル推定とモデル選択

素晴らしく実力がつくと評判の統計学 キャンパス・ゼミ

www.amazon.co.jp
 確率・統計学を勉強し始めた頃は、色々と参考書を読んでも、一番基礎となる確率変数と確率分布の話がちゃんと理解できず苦労した覚えがあります。しかしこの参考書に出会って、やっと最初の壁を超えた、という気がしました。
 マセマシリーズは「単位なんて楽に取れる!」と表紙に書いてあり、手っ取り早く試験で点数さえ取れれば良い、という印象を持たれがちかも知れませんが、マセマ統計学については非常にしっかり書いてありますし、レベルも低くありません。確率・統計学の入門と位置づけられている参考書では各分布の導出を省略しているケースがほとんどですが、この本では正規分布はもちろんのこと、t分布、カイ二乗分布、F分布の証明なども出てきます。中心極限定理もしっかりとページ数を割いています。一度証明しておくと、納得感も出てきます。
 突然チャレンジすると少し重いかもしれませんので、確率・統計学の入門的な参考書を1冊(例えばキーポイントシリーズ)通してから、この本に挑戦するのが良いと思います。時間に余裕がある場合、この本のあとにマセマの演習版も行うと、さらに理解が深まります。
 内容をまとめます。第1章〜第5章は確率編として、離散型確率分布、連続型確率分布、2変数の確率分布、ポアソン分布、正規分布中心極限定理カイ二乗分布、t分布、F分布を学びます。第6章〜第8章は統計編として記述統計、推定、検定を学びます。確率編の理解が不十分の時は、無理をして統計編に進むより、何度も学習して理解を深めることを優先すべきです。確率分布の考え方がしっかり身についていれば、推定・検定はすっと入ってきますので焦ることはありません。

スバラシク実力がつくと評判の演習統計学 キャンパス・ゼミ

www.amazon.co.jp
 確率・統計学のお勧めの参考書としてマセマ統計学を以前紹介しましたが、こちらのマセマ演習本もやはりお勧めです。マセマ本と比べて、構成は同じですが、少しレベルが上がるので無理なくレベルアップできます。確率変数、確率分布の理解をさらに深めていきましょう。モーメント母関数の説明やそれを用いた証明問題がわかりやすい気がします。チェビシェフの不等式やスターリングの公式など、発展的な内容でも登場するようなものについてもしっかりと学んでおきましょう。計算がハードな問題が多いです。微分積分の知識が必要になりますので、微分積分の勉強後が良いかもしれません。

第1章 離散型確率分布
第2章 連続型確率分布
第3章 2変数の確率分布
第4章 ポアソン分布と正規分布
第5章 カイ二乗分布、t分布、F分布
第6章 データの整理(記述統計)
第7章 推定
第8章 検定

キーポイント 確率・統計

www.amazon.co.jp
 私が初めて確率を勉強した時に、この参考書を使いましたが、あまり理解できず挫折しましたので、1冊目には向いていないかもしれません。やはりキーポイントシリーズでは線形代数がおすすめで、確率・統計と微分積分は時間に余裕があればやる、というスタンスが良いのではないでしょうか…。

ポイント1 確率・統計をなぜ勉強するのか
ポイント2 確率変数と確率分布
ポイント3 2項分布は「確率論」の始め
ポイント4 まれな現象はポアソン分布
ポイント5 正規分布はなぜ重要か
ポイント6 データ処理と標本分布
ポイント7 検定・推定の実際
ポイント8 確率過程とシミュレーション

演習 確率統計

www.amazon.co.jp
 ここからは余裕のある人に向けたお勧め参考書です。こちらは昭和51年の本ですね。確率統計の大学教養レベルを一通り学びます。分散分析や抜取検査の話も最後に登場します。確率統計の場合はマセマ本でかなりのところまでカバーされているのでまずはそちらを固めることをおすすめしますが、その上でこの本をやる意味としては、分布の再生性などの証明、周辺分布・推定・最尤法の練習で手をたくさん動かし、理解を深めることだと思います。

資料の整理 例題数5
確率 例題数13
確率変数 例題数10
分布関数 例題数16
標本分布 例題数8
推定 例題数8
検定 例題数8

演習基本 確率統計

www.amazon.co.jp
 こちらは1990年の本のようですね。こちらも時間に余裕のある人向けのお勧め本です。基本的には演習確率統計と同じ構成、同じレベルですが、データの処理(代表値、散布度、相関)、分散分析や適合度検定に対してページが多く割かれています。
 畳み込みの問題も幾つか登場しますね。私は確率分布の和の確率分布の問題がなかなか理解できずにいましたが、マセマの説明に戻りつつ解いていたら理解できました。

1.データの処理
2.確率変数
3.重要な確率分布
4.推定
5.検定
6.分散分析(実験計画法)

微分積分をゼロから勉強する方法とお勧めの参考書

 今回は、大学での微分積分をゼロから勉強する方法を紹介していきます。ゼロと言っても、高校の数学Ⅰ、数学Ⅱは最低限、学習したことがあることが望ましいですね。数学Ⅲの経験があればさらに良いです。
 以下の本で微分積分の基礎が身につくと思います。ただし偏微分方程式常微分方程式などは今回は外しました。

キーポイント微分積分

www.amazon.co.jp
 キーポイントシリーズも、数学の入門書として人気があります。この本は、出てくるトピックは抑えられていますが、その分一つ一つについて、考え方をしっかり説明している印象を受けます。あまり計算問題をたくさんやるというよりは、文章による解説が多めで、電車の中でも読めるような形かも知れません。時間に余裕がなければ、2冊目のマセマに直接入ってしまってきまいません。マセマに入る前の枕的な位置づけです。個人的には第2章や第10章が勉強になり良かったのです。

ポイント1 関数をグラフで見る
ポイント2 数をグラフに書く
ポイント3 数列に強くなる
ポイント4 導関数を求める
ポイント5 積分を計算する
ポイント6 テイラー展開から級数を学ぶ
ポイント7 初等関数の性質
ポイント8 連続関数の性質
ポイント9 導関数の性質
ポイント10 積分とべき級数の性質

スバラシク実力がつくと評判の微分積分 キャンパス・ゼミ

www.amazon.co.jp
 次に、マセマです。私が最初にマセマシリーズの本を読んだのは、今回紹介する微分積分の本でした。イプシロンデルタが突然出てきて、高校数学との違いを魅せつけられる大学の微分積分ですが、マセマの本ではわかりやすいですね。今回4冊の本を紹介していますが、その中で外せないのがこの本です。他の本は割ける時間や労力に応じて調整してみてください。
 入門書ですと、イプシロンデルタ論法を省略してしまうことも多い(もしくはコラム扱い)ですが、マセマの場合は第1章で、50ページ以上に渡って勉強します。統計学線形代数と比べると、高校数学のノリでそのまま勉強しやすいと思いますので、ガンガン勧めてしまいましょう。
 内容を詳しく紹介してみます。前述のとおり第1章は数列と関数の極限です。第2章、第3章は微分法、積分法を扱います。特にテイラー・マクローリンのところはしっかり読みましょう。計算部分は頑張って計算して、慣れていくしかありません。第4章になると少し重たくなってきます。2変数関数の微分を学びます。接平面、全微分などが登場します。第5章では2変数関数の重積分を学びます。図を書きながら理解を深めていきましょう。

スバラシク実力がつくと評判の演習微分積分 キャンパス・ゼミ

www.amazon.co.jp
 マセマ微分積分の次はマセマ演習微分積分です。特に積分計算はたくさんの種類の問題に慣れておく必要がありますので、マセマ本だけでなく、マセマ演習本もやると試験対策には良いと思います。ラグランジュの未定乗数法やマクローリン展開なども、この本の練習問題で定着度を高めましょう。構成は、数列と関数の極限、微分法とその応用、積分法とその応用、2変数関数の微分、多変数関数の重積分です。

演習微分積分

www.amazon.co.jp
 昭和50年の古い本ですね。マセマなどの基本・入門書を終えたあとに、更にブラッシュアップしたい場合に向いている演習本です。例題と問題がありますが、例題だけでもそこそこ時間がかかりますので、私は例題が正解できれば問題は飛ばしました。
 基本・入門書には出てこないような定理の証明問題も多く、微分積分の世界の理解が一歩深まります。微分方程式の問題も最後に少し入っています。入門書だけでは対応できないような試験の対策に向いていると思います。

【本の内容】
数列と級数:例題数11
微分法とその応用:例題数19
積分法とその応用:例題数36
偏微分法:例題数16
積分:例題数13
微分方程式の解法:例題数16

線形代数をゼロから勉強する方法とお勧めの参考書

 線形代数をゼロから勉強したいと思っている人は多いと思います。高校を卒業したばかりで大学に入る前に先取りしたい学生、数学を勉強し直したいエンジニアやマーケター、データ解析や機械学習の分野に参入する前に前提となる基礎を身に着けたい人、その他科学的な分野に関わる人であれば、微分積分とともに、線形代数をある程度操れるというのは必須スキルですね。
 この記事ではお勧めの順番で教材を紹介していきます。前提としているのは高校レベルのベクトルだけですが、それすら経験がなくても勉強できるよう、入門を意識したテキストを紹介していきます。

スバラシク実力がつくと評判の線形代数 キャンパス・ゼミ

www.amazon.co.jp
 大学入学後の線形代数の授業レベル。一通り基本的なことがまとまっており、初めて線形代数を学習する際には非常に良い参考書だと思います。マセマシリーズに共通することですが、解説が一歩一歩丁寧に書いてありますので、楽しく学習できる構成です。最初はランクの考え方や固有値固有ベクトルの意味がいまいちピンと来ないところもあります。しかしそれでも言われたとおりに計算していると段々と理解が深まります。深まったら今度は説明や証明を再度読んでみるのも良いでしょう。第4版が出版され、その人気の高さが伺えます。
 内容を詳しく紹介します。第1章(ベクトルと空間座標の基本)と第2章(行列)は、高校数学にプラスαという内容。平面の方程式、逆行列、転置行列、ケーリー・ハミルトンなどを学んでいきます。第3章(行列式)と第4章(連立一次方程式)は少し本格的になります。サラスの公式、行列式、余因子行列、ランクなどの話が出てきます。手を動かしながら読み進めていけば、1、2章の延長として理解しやすいでしょう。第5章(線形空間(ベクトル空間))と第6章(線形写像)では、スラスラ読み進められるのですが、初めて学習するときは読み終わっても、あまり腑に落ちないかもしれません。第7章(行列の対角化)では固有値固有ベクトル、対角化、シュミットの正規直交化法など重要な話が出てきます。ユニタリ、エルミート行列なども登場し、盛りだくさんなのにもかかわらず練習問題が少ないかもしれません。2冊目に紹介するマセマの演習本でもしっかり練習するのが良いでしょう。第8章(ジョルダン標準形)ではジョルダン細胞、ジョルダン標準形を学びます。3次正方行列まで学びます。証明がわかりやすく書いてありますので、しっかりと読むと良いと思います。

スバラシク実力がつくと評判の演習線形代数 キャンパス・ゼミ

www.amazon.co.jp
 マセマ線形代数が終われば、次はマセマ演習線形代数ですね。構成は同じで、説明部分が短くなり、問題練習部分が多くなります。問題練習のレベルが僅かに上がりますので、無理なく、実力アップができます。線形代数の場合は3×3や4×4の行列を行うと計算用紙を多く使いますが、ケチらずどんどんペンを動かし、頑張って計算しましょう。実際に行列を足したりかけたり、逆行列を計算したりしないことには理解は深まりません。また計算間違いをし易い分野でもありますので、そこで変にストレスを溜めないように気をつけましょう。
 各章の内容は、第1章:ベクトルと空間座標の基本、第2章:行列、第3章:行列式、第4章:連立1次方程式、第5章:線形空間(ベクトル空間)、第6章:線形写像、第7章:行列の対角化、第8章:ジョルダン標準形

キーポイント線形代数

 キーポイントシリーズもマセマシリーズと同様に人気があります。線形代数については、マセマ→マセマ演習→キーポイントの順番がオススメです。線形代数の勉強では計算量が多く面倒ですので、計算ばかりに時間がかかってしまい、あまりランク、線形変換、行列式の意味や背景についてまで頭が回りづらいところがあります。この本ではそういった面を強化してくれる効果があり、大変にお勧めです。具体例を多く用いながらわかりやすく説明されている箇所が多いと思います。マセマでゴリゴリと計算問題を解いたが、あまり腑に落ちないな、と言った気持ちをもった段階で読むのがいいですね。
 内容をまとめると、ポイント1:ガウスの消去法はオールマイティー、ポイント2:行列式のでどころ、ポイント3:逆行列は逆数の行列版、ポイント4:ベクトル空間に慣れよう、ポイント5:線形変換とその役割、ポイント6:ランクの定義はどれでも同じ、ポイント7:線形代数の基本定理とは、ポイント8:固有値の意味をつかむ、ポイント9:行列を対角化する、ポイント10:ジョルダン標準形は最後の切り札です。

基礎からの線形代数

www.amazon.co.jp
 こちらは2014年出版の比較的新しい本です。タイトルに「基礎からの」とありますが、初学者向けではありません。線形代数の入門書を1,2冊終えた人向けだと思います。
 マセマ本などを読み通したあとに、もう少ししっかりと学びたい、というモチベーションがあればチャレンジしてみるのも良いかもしれません。様々な定理・命題・補題・系を証明していく構成になっており、証明力がつくことが期待できます。私は気になる証明だけを読むという辞書的な使い方をしました。逆に練習問題は少なめですので、計算力を付けたい人はマセマ演習などのほうがオススメです。
 面白かったのは、行列の対角化のところではGoogleページランクの仕組みを紹介しているところです。その簡単な例として、ウェブ上には4サイトしか存在しないと仮定した場合の分析が書いてあります。数学の参考書で実世界への応用例が紹介されているのは珍しいですね。

演習 線形代数

www.amazon.co.jp
 最後に紹介するこちらの本は昭和53年出版。基本・入門書のあとに、さらに理解を深めること、もしくは試験対策を行いたい場合に向いているのではないでしょうか。たくさんの練習問題を説いているうちに、納得感も深まってくると思います。この本ではdet{A} * det{B} = det{AB}や関数の内積のように、マセマ等には出てこない話が多く出てきますので、楽しみながら学習できました。例題だけでも時間がかかりますので、重要な部分や苦手な部分だけ問題にも手を出しました。例題数は、行列と行列式が48、平面および空間の幾何学が29、線形空間が53、2次形式とエルミート形式が14問です。

ロジスティック回帰モデルの簡単な例

ロジスティック回帰とは?

 線形識別関数の場合には、識別境界から離れるほど出力の絶対値が大きくなり続けます。しかし、少し違った関数として、出力を区間(0,1)に制限するような関数があればどうでしょうか?今回のトピックのロジスティック回帰はそのような関数であり、これは0から1の値を取るので、確率的な解釈を可能にするのが面白いところです。

 ロジスティック回帰については『はじめてのパターン認識』で言えば、88ページから95ページまでになります。ここを読めば、ロジスティック、シグモイド、ロジット、ログオッズ、パラメータの最尤推定、多クラス問題への拡張や非線形変換などを簡単に勉強することができます。

ロジスティック回帰を実装しよう

 今回は第6章に出てくるロジスティック回帰の図6.10をPythonで実装していきましょう。データは著者の仮想的なもののようですので、ここでは教科書を基にデータをて入力しました。{x}{y}のところでnp.matrixとnp.arrayを使っています。そしてロジスティック回帰は一から実装せずに、sklearnのLogisticRegressionを使いました。
www.amazon.co.jp

コード

import numpy as np
from sklearn.linear_model import LogisticRegression
import matplotlib.pyplot as plt

x = np.matrix([0,2,4,6,8,11,15,19,22,25,29,32,33,34,36,38,40,42]).T
y = np.array([0,0,0,0,1,0,0,1,0,1,1,1,0,1,1,1,1,1])

classifier = LogisticRegression(C=1.0, penalty='l2')
classifier.fit(x,y)

xaxis = np.linspace(0,50,100)
yaxis = np.zeros(100)

for i in range(100):
	yaxis[i] = classifier.predict_proba(xaxis[i])[0,1]

plt.plot(xaxis,yaxis)
plt.xlabel('Smoking Amount')
plt.ylabel('Probability of Cancer')
plt.title('Example of Logistic Regression')

図示してみよう

f:id:decompose:20160417211946p:plain
 上のコードを実行すると、このような図が出てきます。横軸は喫煙量(本/日)ですが、増えるほど肺がんになる確率が高まることがわかります。ロジスティック回帰らしく、縦軸の確率がちゃんと0から1の間を取っています。