機器學習-矩陣空間的變換
由特征列的取值範圍所有構成的矩陣空間應具有完整性,即能夠反映事物的空間形式或變化規律。
向量
無論在幾何還是在實體上,向量都是一個有方向、有大小的量,而向量的點坐标不過表征了該向量與坐标系原點的距離,以及與坐标系的夾角而已。
向量不是一個點,而是一個有向的線段,線段的長度是向量的大小,線段的指向是向量的方向。
向量張成空間
n維直角坐标系的每個坐标軸都是向量,長度可以無限延伸,它們兩兩之間在方向上互相正交,定位其上的點需要考慮它與原點和每個坐标軸的關系,是以是一個n維向量。
向量的長度和方向都是相對于其它向量的量,長度相對于原點,方向相對于坐标軸。要想構成一個二維的空間,就必須有兩個或兩個以上存在交點(原點)的向量(或其延長線)。
從線性代數的角度說,構成空間的兩個向量之間必須線性無關,也就是說這兩個向量的次元必須與他們構成的矩陣的秩相等,而這兩個向量就稱為這個空間的基或基底。
基底向量對應坐标系的坐标軸,有幾個基底向量就有幾個坐标軸,n維空間的一個基底就需要有n個基底向量。
由基底構成的空間内部的任何向量都可以由其基底來線性表示。
向量的空間變換
向量與矩陣的乘法:一個向量從一個線性空間(坐标系),通過選取一個新的基底(一個新的n維坐标系),變換到這個新基地構成的另一個線性空間的過程。
一個向量的線性變換在幾何上表現為縮放和旋轉兩個動作,以及這兩個動作的組合--拉伸、壓縮等。這些動作的一個共性是都要通過原點。
向量組與矩陣的變換-了解矩陣的乘法
矩陣乘法的意義:把一組向量變換到另一個空間中。
變換時,左邊是一組在原有空間中的向量組,而且數量可以是不定的,是以,矩陣乘法對稱号左邊矩陣的行數不限制,但是列數要等于稱号右邊矩陣的行數,這樣的變換才有定義。
左邊的矩陣被定義為一個向量組,其列數被認為向量的次元;右邊的矩陣被定義為一個線性空間,相乘運算就是将這個向量組線性變換到新的線性空間中。右邊矩陣的行數最少要滿足是由基底向量構成的線性空間的次元,或方程組的秩。
矩陣乘法公式從左右兩邊看都是矩陣,但是其意義完全不同,是以不滿足交換律
線性變換-特征值與特征向量
向量組變換到另一個線性空間中時,線性變換的規則要求這個變換必須通過由基底向量構成的坐标系的原點,簡單來說,以平面直角坐标系為例,這種變換不過就是沿着通過原點的某條直線的縮放和旋轉。
這種變換必然導緻有這樣一組向量存在,即被變換的線性空間内的某個向量或量組隻發生了伸縮變換,而沒有發生旋轉的效果,也就是說線上性變換下,在它們所在的直線上保持不變。這些向量就稱為這個矩陣的特征向量,伸縮的比例就是特征值。
如果特征值變為負值,即特征向量旋轉180°,也可看作方向不變,而伸縮比為負值。是以特征向量也叫線性不變量。特征向量的不變性使它們變成與自身共線的向量。
特征向量線上性變換後可能伸長或縮短,或反向伸長或反向縮短,甚至變成零向量(特征值為零時),但與它變換後的向量應在同一條直線上。
原矩陣=特征向量 * 特征值構成的對角矩陣 * 特征向量的逆
from numpy import *
# 特征值 特征向量計算
A = [[8, 1, 6], [3, 5, 7], [4, 9, 2]]
# linalg.eig計算矩陣特征兩箱
evals,evecs = linalg.eig(A)
print("特征值:", evals)
print("特征向量:", evecs)
# 手工求特征值
# 得知系數方程矩陣
equationA = [1, -15, -24, 360]
# roots計算矩陣方程的根
evals = roots(equationA)
print("特征值new:", evals)
#根據特征值和特征矩陣還原原矩陣(m行n列)
m,n = shape(A)
print("m:", m)
# eye生成對角矩陣
sigma = evals * eye(m)
# linalg.inv矩陣求逆
mat = evecs * sigma * linalg.inv(evecs)
print("還原矩陣:", mat)