MyEnigma

とあるエンジニアのブログです。#Robotics #Programing #C++ #Python #MATLAB #Vim #Mathematics #Book #Movie #Traveling #Mac #iPhone

スタンフォード大学の学生が学ぶベクトル入門

目次

 

はじめに

スタンフォード大学には

機械学習を学ぶ上での第一歩として、

Introduction to Matrix Methods (EE103)という授業があります。

 

今回の記事では、

この授業の教科書である

Introduction to Applied Linear Algebraを

読んだ際の技術メモです。

 

この教科書は下記のリンクのページからpdfをダウンロードすることができます。

 

本記事では、

上記の教科書のベクトルの部分のみのメモです。

 

本記事では、

上記の教科書の行列の部分のみのメモです。

他の部分に関しては、下記の記事を参照下さい。

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

ベクトル入門

ベクトルは基本的に列(縦)ベクトル(n x 1 の行列)

 

ベクトルにおける=(イコール)は

ベクトルのすべての要素が同じを意味する。

 

プログラミング言語において、

ベクトルのインデックスは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で表せる関数を線形関数(アフィン関数)という。

 

任意の関数はテイラー近似を使うことで

線形関数に近似することができる。

f:id:meison_amsl:20180502214001p:plain

f:id:meison_amsl:20180502214014p:plain

 

あるデータをアフィン関数で近似することを、

線形回帰モデルという。

 

ノルムと距離

ベクトルのノルムは、

内積とルートで計算できる。

f:id:meison_amsl:20180502214421p:plain

 

ノルムの用途

  • 特徴空間における距離

  • 線形回帰モデルの誤差をノルムやRMSで評価

  • 最近傍探索

  • 文書の類似性評価

 

ノルムを計算するときには、

各ベクトルの要素の単位に注意が必要。

単位が異なる場合は、正規化しなくてはならない。

 

ベクトルデータの標準偏差は下記の式で計算可能

f:id:meison_amsl:20180503154122p:plain

平均と標準偏差は下記のように計算できる。

f:id:meison_amsl:20180503154249p:plain

 

2つのベクトルの相関係数は、

正規化されたデータと

その内積によって計算される。    

投資におけるリスクヘッジ

2つの平均と標準偏差を持つ

投資先をブレンドすると、

それらを合わせた投資先の平均と標準偏差は

下記のように更新することができる。

f:id:meison_amsl:20180503154830p:plain

f:id:meison_amsl:20180503154841p:plain

上記の式より、

新しい投資先の平均はそれぞれの平均であるが、

標準偏差は2つの投資先の相関係数が

-1に近ければ近くなるほど、

小さくなることがわかる。

つまり、ばらつきを小さくすることができ、

投資のリスクを低減することができる。

これがリスクヘッジである。

 

クラスタリング

最もシンプルで実用的なクラスタリングアルゴリズムは、

k-meansアルゴリズムです。

応用例としては、

  • 文書の単語のヒストグラムによる分類

  • お客の購買データによるクラスタリングとリコメンデーション

 

k-meansアルゴリズムに関しては、

下記を参照ください。

myenigma.hatenablog.com

 

ベクトルによる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となり、

元金割れを起こすため、投資しないほうが良いということになります。

GItHubリポジトリ

前述のJuliaのコードは下記のリポジトリで公開しています。

github.com

 

参考資料

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

myenigma.hatenablog.com

 

MyEnigma Supporters

もしこの記事が参考になり、

ブログをサポートしたいと思われた方は、

こちらからよろしくお願いします。

myenigma.hatenablog.com