Python、機械学習

機械学習を用いたデータ分析における「行列」の意味

機械学習を用いたデータ分析では、行列演算がたくさん出てきます。

Pythonだと、行列演算ライブラリであるNumpyを用いてさまざまな計算を行います。

そもそも、なぜ行列が出てくるのでしょうか。ってか行列って何だっけ・・・、ということで、データ分析における行列の意味合いを定性的にまとめてみました。

行列はデータシートそのものである

行列はデータシートそのものです。データ分析では、縦方向をデータのindex、横方向を説明変数として表にまとめます。この表を、数値だけの集合体に簡略化したものが行列です。

データの数が5個、説明変数の種類が4個なら、5×4の行列で表されます。アルファベットの大文字(ここではA)で1つの行列を1変数として表したりもします。

行列は写像である

行列は写像でもあります。上の例だと、今は「原料Aの添加量」「原料Bの添加量」「混ぜる速度」「混ぜる時間」の4つの軸からなる4次元空間に、5個のデータが点としてプロットされています。

多変量解析や機械学習では、分類や回帰をしやすくするために、別の軸からなる空間にプロットを移してからさまざまな計算をすることがあります。このように、別の空間にプロットを移すことを「写像」といいます。同じ4次元の空間でもいいですし、高次元、低次元の空間に写像することも可能です。

例えば、主成分分析(PCA)は低次元の空間にデータを写像する操作になりますし、カーネル法は高次元の空間にデータを写像する操作になります。

一例として、Aというデータシートを「元の4次元空間」→「10次元空間」に写像する方法を説明します。

新しい空間への移し方、つまり写像を行列Bで表します。そして、データシートである行列Aに行列Bを掛けることで、写像した後の新データシートA’(=AB)が出来上がります。

行列で書くと以下のようになります。新データシートでは、各データが説明変数P~Yという新しい変数で表現し直され、それぞれの変数の数値が行列A’の中に格納されているのがわかります。

違う特徴量に変換するツールが行列Bだとも言えます。

写像を表す行列の中身を解釈する

写像を表す行列Bの中身を見てみます。

例えば、こちらの1列目の数字は、新しい空間における1軸目(説明変数P)を決める情報です。つまり、説明変数Pは、

説明変数P=原料Aの添加量×9 + 原料Bの添加量×8 + 混ぜる速度×4 + 混ぜる時間×0

で求められることを示しています。説明変数Pは、原料Aの添加量、原料Bの添加量が色濃く反映される変数だということが分かります。

同様に、2列目は以下のようになります。説明変数Qは、混ぜる速度、混ぜる時間が色濃く反映される変数だということが分かります。

まとめ

データ数がm、説明変数の個数がnとします。このデータシートはm×nの行列で表されます。

説明変数がn個のn次元空間を、説明変数がn’個のn’次元空間に写像する場合は、n×n’の行列をかけ算します。そうすると、新しい空間におけるデータシートがm×n’の行列として作成されます。

そのようにして行列を眺めると、行列が何者か、行列演算が何をしているかがつかみやすくなるかと思います。

補足

線形代数の本では、今回のようにデータシートに対してではなく、1つのデータ(ベクトル)に対して写像するやり方で記載されています。データシートの1行分に対して、ということと同義です。

データシート1行分なので、データ数1、説明変数の種類nの1xn行列の形になります。ただし、ベクトルの場合は横ではなく縦に表記するため、nx1行列で表します。

よって、1つのデータ(ベクトル)をn’次元空間に写像する場合は、n’xn行列をnx1行列にかけて、n’x1行列を作ることになります。

データシートでは、Bという行列を右から掛け算しましたが、ベクトルでは、BTという行列を左から掛け算します。

データシートでは1つ1つのデータが横に寝ていますが、1つのデータ(ベクトル)だけで見る場合、ベクトルのルール上、縦に立てないといけないため、掛ける行列が転置されたり掛ける位置が変わったりします。