Pythonでのデータサイエンスの線形代数講座
「Pythonによるデータサイエンスのための線形代数講座」

線形代数は数学の分野で、データサイエンスに非常に役立ちます。線形代数を使用することで、大量のデータに数学的な操作を行うことができます。
機械学習で使用されるほとんどのアルゴリズムは、特に行列を使用した線形代数を使用します。ほとんどのデータは行列形式で表されます。
線形代数の使用方法がわかったので、基礎から始めましょう – ベクトル
ベクトル
「数学と物理学において、ベクトルとは単一の数値で表されないいくつかの量、またはいくつかのベクトル空間の要素を通俗的に指す用語である。」[1]
[1]はWikipediaに掲載されている定義です。ほとんどの人が理解していますが、もっと簡単に言えば、ベクトルは次のようなものです:
それは大きさと方向の両方を持つ量を指す用語です。
これは線形代数の基本的な構成要素です。ウィキの定義を見ると、単一の数値で表されない量であることがわかります。つまり、次元があるということです。
ベクトルの次元は、そのベクトル内の数値要素の数によって決まります。
例:要素が4つあるベクトルの次元は4です。
ベクトルの大きさは、以下の公式を使って計算されます:

さらに理解するための例です。
問題:ボールが空気中を移動し、ボールのx、y、z方向の速度が、標準の直交座標系で与えられています。速度の成分値は、x = -12、y = 8、z = -2です。速度をベクトルに変換し、ボールの合計速度を求めてください。
解答:

Pythonを使用したベクトルの適用:
Numpy配列は、ベクトルや行列の両方を表すために使用されるn次元配列データ構造です。
import numpy as np v = np.array([1,2,3,4,5]) #ベクトル
基本的なベクトルの操作:
スカラー倍:

Pythonを使用した例:
import numpy as np A = np.array([1,2,3,4]) #ベクトル print(A*4) #スカラー倍
ベクトルの加法と減法:

Pythonの例:
import numpy as np A = np.array([1,2,3,4]) #ベクトル1 B = np.array([-4,-3, -2, -1]) #ベクトル2 print(A+B) #ベクトルの加算 print(A-B) #ベクトルの減算
ベクトルの内積:
内積は2つの等しい次元のベクトルを取り、対応する成分の積を合計して、単一のスカラー値を返します。
式は次のようになります

内積は可換的で分配的です。
a.b = b.ca.(b+c) = a.b + a.c
結果のスカラー値は、一方のベクトルが他方の中にどれだけ入るかを表します。
2つのベクトルが直交している場合、その内積は0となります。内積はまた、ベクトルの大きさや2つのベクトル間の角度を求めるためにも使用することができます。

いくつかの内積の例を見てみましょう。

Pythonを使用した内積の例:
import numpy as np A = np.array([1,2,3,4]) #ベクトル1 B = np.array([-4,-3, -2, -1]) #ベクトル2 print(np.dot(A, B)) #内積
角度を求める例:

行列:
行列は、m行n列のデータの量です。複数のベクトルを1つの行列に組み合わせることができます。行列は、大量のデータに対して操作を行うことができるため、行列量で方程式全体の表現など、さまざまな用途で役立ちます。行番号と列番号を使用して要素にアクセスすることもできます。

上記では、行列の要素へのアクセス方法も示しています。たとえばA(1,2)は、1行目と2列目を示します。
Pythonを使用した行列の例:
import numpy as np A = np.array([[1,2],[3,4]]) #行列 print(A[1,1]) #行列Aの要素にアクセスする
行列の操作:
行列の加算と減算:
2つの行列が同じ形状である場合に行えます。

Pythonの例:
import numpy as np A = np.array([[1,2],[3,4]]) #行列1 B = np.array([[-3,-2],[-4,-5]]) #行列2 print(A+B) #加算 print(A-B) #減算
行列の乗算:
これは、第1行列の各行と第2行列の各列のドット積を計算することによって機能します。
行列の次元がm x nとk x lの場合、n = kの場合のみ、乗算が可能です。


Pythonの例:
これを行う方法は2つあります。1つは「@」を使用する方法で、もう1つはnumpy
モジュールの.matmul()
を使用する方法です
import numpy as np A = np.array([[1,2],[3,4]]) #行列1 B = np.array([[-3,-2],[-4,-5]]) #行列2 print(np.matmul(A, B)) print(A@B)
両方のprint文は同じ結果を返します。
特殊行列:
特に3種類の特殊行列があります。
単位行列:
対角要素が1でそれ以外が0である正方行列です。単位行列によって行列を乗算すると、元の行列と同じになります。

Pythonでは、numpy
の.eye() メソッドを使用して単位行列を作成することができます
import numpy as np identity = np.eye(4) #4x4の行列を作成します。
転置行列:
行と列を入れ替えて計算される行列です。”T”で表されます

Pythonでは、.T を使用して行列を転置することができます
import numpy as np A = np.array([[1,2],[3,4]]) #行列 A_trans = A.T
置換行列:
別の行列の行と列を反転することができる正方行列です。要素のうち1つの要素だけが0以外であり、それ以外はすべて0です。

行列Aの行を反転するには、置換行列Pを左側に乗算します(PA)。列を反転するには、置換行列Pを右側に乗算します(AP)

Pythonでこれを実装する方法については、ここをクリックして学びましょう。
行列形式の線形システム:
行列の非常に有用な応用は、線形方程式の連立方程式を解くためです。
以下の例を見てみましょう。

上記の方程式を以下に示す行列形式で記述します。

私たちの最終目標は、上記をAx = b
の形式で表現することです。

Ax = b
を[A|b]
と書くことができます。

NumPyのlinalgサブモジュールを使用して、これを行うことができます。
例:

上記の線形方程式を行列に変換しました。
A = np.array([[1,4,-1],[-1,-3,-2],[2, -1, -2]]) b = np.array([-1,2,-2]) x, y, z = np.linalg.solve(A, b)
逆行列:
「線形代数学では、n×nの正方行列Aが、AB = BA = Iであるようなn×nの正方行列Bが存在する場合、Aは可逆行列(または非特異行列)と呼ばれる」[2]
[2] Wikipedia
上記のように、行列の逆行列とその自身の積は単位行列です。すべての行列が逆行列を持つわけではありません。逆行列を持たない行列は特異行列と呼ばれます。
Pythonでの例:
import numpy as np A = np.array([[1,2],[3,4]]) print(np.linalg.inv(A))
その他:
- NumPyの
.zeros()
を使用して、ゼロの行列またはベクトルを作成することができます。
例:
import numpy as np print(np.zeros((3,2)) # 3x2の寸法の行列を出力します。
- ベクトルの「ノルム」は、NumPyのlinalgサブモジュールを使用して求めることができます。
例:
import numpy as np A = np.array([2,-4,1]) A_norm = np.linalg.norm(A) #给出结果4.5825
结论:
在这篇博客中,我们学到了:
- 矩阵和向量是什么。
- 对它们进行的操作。
- 使用Python的NumPy模块实现了它们。
- 我们甚至看到了不同类型的矩阵。
就是这样了,伙计们。我希望你们觉得有帮助,如果有的话,请在LinkedIn上关注我。
如果你喜欢我的工作,可以给我买杯咖啡:dataguy6@ybl
查看我的最新作品:
数据科学家必须使用DagsHub
开始和存储你的数据科学项目的最佳方式!
VoAGI.com
学习数据科学的最佳资源
你计划学习数据科学吗?🤩 但是不知道在哪里和如何学习?😫别担心,我来帮你……
VoAGI.com
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles