目次
- 目次
- はじめに
- ベクトル入門
- 線形関数
- ノルムと距離
- 投資におけるリスクヘッジ
- クラスタリング
- ベクトルによるNet present value(正味現在価値)の計算
- 参考資料
- MyEnigma Supporters
はじめに
スタンフォード大学には
機械学習を学ぶ上での第一歩として、
Introduction to Matrix Methods (EE103)という授業があります。
今回の記事では、
この授業の教科書である
Introduction to Applied Linear Algebraを
読んだ際の技術メモです。
この教科書は下記のリンクのページからpdfをダウンロードすることができます。
また、最近この本の日本語訳が発売されました。
スタンフォード ベクトル・行列からはじめる最適化数学 (KS情報科学専門書)
本記事では、
上記の教科書のベクトルの部分のみのメモです。
本記事では、
上記の教科書の行列の部分のみのメモです。
他の部分に関しては、下記の記事を参照下さい。
ベクトル入門
ベクトルは基本的に列(縦)ベクトル(n x 1 の行列)
n次元の実数のベクトルをRnで表す。なので行列はR2
ベクトルにおける=(イコール)は
ベクトルのすべての要素が同じを意味する。
プログラミング言語において、
ベクトルのインデックスは0→nー1
数学のインデックスは1→n
nnz(x)はベクトルxの中で、
0でない要素の数を表す
この値が小さいとスパースな行列になり、
ゼロベクトルは最もスパースなベクトルである。
よくあるベクトルデータの例
2Dや3Dの位置データ
各患者の血圧の時系列データ
単語の出てくる回数(ヒストグラム)
画素のデータ(RGB)
投資のポートフォリオ
ベクトルの掛け算は線形結合(内積)という
線形結合の重みが1の時はSUM
重みが1/mの時はmean
重みの和が1の時はaffine
affineの重みが正の時は、convex optimizationと呼ばれる。
二点を結ぶ直線はアフィンで表すことができる。
二点をa,bとすると、それらを結ぶ直線は下記で表せる。
c = (1-θ)a+θb
θ >0 の時(Convex)、二点の間を結ぶ線になる。
例えば、x1, y1, x2, y2の二点間の点をサンプリングしたい場合は、
Juliaだと下記のように書けます。
dtheta = 0.1 lx = [(1-θ)*x1+θ*x2 for θ in 0.0:dtheta:1.0] ly = [(1-θ)*y1+θ*y2 for θ in 0.0:dtheta:1.0]
線形関数
f(x) = aTx+bで表せる関数を線形関数(アフィン関数)という。
任意の関数はテイラー近似を使うことで
線形関数に近似することができる。
あるデータをアフィン関数で近似することを、
線形回帰モデルという。
ノルムと距離
ベクトルのノルムは、
内積とルートで計算できる。
ノルムの用途
特徴空間における距離
線形回帰モデルの誤差をノルムやRMSで評価
最近傍探索
文書の類似性評価
ノルムを計算するときには、
各ベクトルの要素の単位に注意が必要。
単位が異なる場合は、正規化しなくてはならない。
ベクトルデータの標準偏差は下記の式で計算可能
平均と標準偏差は下記のように計算できる。
2つのベクトルの相関係数は、
正規化されたデータと
その内積によって計算される。
投資におけるリスクヘッジ
2つの平均と標準偏差を持つ
投資先をブレンドすると、
それらを合わせた投資先の平均と標準偏差は
下記のように更新することができる。
上記の式より、
新しい投資先の平均はそれぞれの平均であるが、
標準偏差は2つの投資先の相関係数が
-1に近ければ近くなるほど、
小さくなることがわかる。
つまり、ばらつきを小さくすることができ、
投資のリスクを低減することができる。
これがリスクヘッジである。
クラスタリング
最もシンプルで実用的なクラスタリングアルゴリズムは、
k-meansアルゴリズムです。
応用例としては、
文書の単語のヒストグラムによる分類
お客の購買データによるクラスタリングとリコメンデーション
k-meansアルゴリズムに関しては、
下記を参照ください。
ベクトルによるNet present value(正味現在価値)の計算
ベクトルの例題として、
投資判断にしばしば使われれるNet present value(NPV)の計算方法があります。
例えば、金利が5%の時に、
4年間お金を預けると、最初の3年間は元のお金の3%のお金をもらい、
4年目には元金+3%のお金がもらえる投資先がある場合、
その投資先には投資すべきでしょうか?
金利は複利も関係するので、計算が面倒そうです。
そんなときも、ベクトルを使うと簡単に計算できます。
下記はNPTを計算するJuliaコードです。
# # Net present value calculation # c = [0.03, 0.03, 0.03, 1.03] r = 0.05 # interest rate n = length(c) d = (1+r) .^-(0:n-1) NPV = c'*d println("NPV:", NPV)
上記のコードを実行すると、NPTは0.975となり、
元金割れを起こすため、投資しないほうが良いということになります。
参考資料
MyEnigma Supporters
もしこの記事が参考になり、
ブログをサポートしたいと思われた方は、
こちらからよろしくお願いします。