線形代数

線形代数はベクトル空間を扱う数学の一分野です。全ては扱いませんが、データサイエンスにおける概念と手法を支える線形代数は非常に大事なので、一緒に見てみましょう。

ベクトル

ひとことでいうと、ベクトルはオブジェクトであり、ベクトル同士の加算(新しいベクトルを作ること)、及びベクトルとスカラーとの乗算(これも新しいベクトルを作る)が可能です。

私達にとって、具体的にベクトルとは有限次元空間内の点です。データはベクトルであると認識していないかもしれませんが、これは数値データを表現する非常に優れた方法です。

例えば、身長、体重、年齢のデータを大量に持っていて、このデータは3次元のベクトルになります。もし、試験を4回行うとなると4次元のベクトル(試験1、試験2、試験3、試験4)となるので、この計算(算術演算)を行えません。

このときに使うのがベクトルです。高校数学でやったように、四則演算することで、先程のような次元数の違う要素も表現が可能になります。

行列

行列は数値を2次元に配置したものです。ここでは行列のリストをリストとして表現します。つまり、リストの中にある同じ長さのリストが行列の行を表します。

A[i][j]は、i行j列の要素となります。行列は大文字で表します。コードで表すと以下のようになります。

A = [[1,2,3],[4,5,6]] #2行3列の行列
B = [[1,2],[3,4],[5,6]] #3行2列の行列

行列はベクトルで構成されるデータを単純に、それぞれのベクトルが行列の行である行列であると表現できます。

例えば、1000人の身長、体重、年齢は、1000行×3列の行列として扱うことができます。

また、n × k行列はkじげんのベクトルから、n次元のベクトルへの複製を行う線形関数とみなすことが可能です。この概念はデータサイエンスを行う上で何度も使う重要な考えです。

そして、行列は二項関係を表現するのにも使えます。
ネットワークのエッジを値のペア(i, j)の集まりで表現します。
これは、行列Aを使い、ノードiとjが接続されている場合は、A[i][j]の値を1に、接続されていない場合は0にすることで同様のデータを扱います。

コードで見ると、

friendships = [(0,1), (0,2), (1,2), (1,3), (2,3), (3,4) ,(4,5), (5,6), (5,7), (6, 8), (7,8), (8,9)]
#user 0 1 2 3 4 5 6 7 8 9
#friendships =
[[0, 1, 1, 0, 0, 0, 0, 0, 0, 0], # user 0
[1, 0, 1, 1, 0, 0, 0, 0, 0, 0], # user 1
[1, 1, 0, 1, 0, 0, 0, 0, 0, 0], # user 2
[0, 1, 1, 0, 1, 0, 0, 0, 0, 0], # user 3
[0, 0, 0, 1, 0, 1, 0, 0, 0, 0], # user 4
[0, 0, 0, 0, 1, 0, 1, 1, 0, 0], # user 5
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 6
[0, 0, 0, 0, 0, 1, 0, 0, 1, 0], # user 7
[0, 0, 0, 0, 0, 0, 1, 1, 0, 1], # user 8
[0, 0, 0, 0, 0, 0, 0, 0, 1, 0]] # user 9

接続されたエッジのみをリストで表す方式では、接続の有無を調べるのにすべての要素を調べなければいけませんが、行列ではより素早く調べることが可能です。

frinedships[0][2] == 1
#True なので、0と2は正解
friendships[0][8] == 1
#Falseなので、0と8は間違い

同様に、ノードに対応する列(列も)を見れば、そのノードが持つ接続を調べれます。

friends_of_five = [i 
#1つの行を
for i, is_friend in enumerate(friendships[5]
#調べるだけで
if is_friend]
#良い

以前、ノードの持つ接続を素早く調べる為に、各ノードに接続先のリストを加えるという方法を容易ました。しかし莫大で変化の激しいグラフに対しては、情報を維持するのが難しく時間のかかる作業となりかねません。

Web教材

無料で学習することもできます。

  • カルフォニア大学デービス校
Like what you read? Give Okazawa Ryusuke a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.