機器學習算法涉及很多線性代數知識,因此本書在使用Python語言構造機器學習應用時,會經常使用NumPy函數庫。如果不熟悉線性代數也不用著急,這裡用到線性代數只是為了簡化不同的數據點上執行的相同數學運算。將數據表示為矩陣形式,只需要執行簡單的矩陣運算而不需要複雜的循環操作。在你使用本書開始學習機器學習算法之前,必須確保可以正確運行Python開發環境,同時正確安裝了NumPy函數庫。NumPy函數庫是Python開發環境的一個獨立模塊,而且大多數Python發行版沒有默認安裝NumPy函數庫,因此在安裝Python之後必須單獨安裝NumPy函數庫。在Windows命令行提示符下輸入c:\Python27\python.exe
,在Linux或者Mac OS的終端上輸入python
,進入Python shell開發環境。今後,一旦看到下述提示符就意味著我們已經進入Python shell開發環境:
>>>
在Python shell開發環境中輸入下列命令:
>>> from numpy import *
上述命令將NumPy函數庫中的所有模塊引入當前的命名空間。Mac OS上輸出結果如圖1-3所示。
圖1-3 命令行啟動Python並在Python shell開發環境中導入模塊
然後在Python shell開發環境中輸入下述命令:
>>> random.rand(4,4)
array([[ 0.70328595, 0.40951383, 0.7475052 , 0.07061094],
[ 0.9571294 , 0.97588446, 0.2728084 , 0.5257719 ],
[ 0.05431627, 0.01396732, 0.60304292, 0.19362288],
[ 0.10648952, 0.27317698, 0.45582919, 0.04881605]])
上述命令構造了一個4x4的隨機數組,因為產生的是隨機數組,不同計算機的輸出結果可能與上述結果完全不同。
NumPy矩陣與數組的區別
NumPy函數庫中存在兩種不同的數據類型(矩陣matrix和數組array),都可以用於處理行列表示的數字元素。雖然它們看起來很相似,但是在這兩個數據類型上執行相同的數學運算可能得到不同的結果,其中NumPy函數庫中的matrix與MATLAB中matrices等價。
調用mat
函數可以將數組轉化為矩陣,輸入下述命令:
>>> randMat = mat(random.rand(4,4))
由於使用隨機函數產生矩陣,不同計算機上輸出的值可能略有不同:
>>> randMat.I
matrix([[ 0.24497106, 1.75854497, -1.77728665, -0.0834912 ],
[ 1.49792202, 2.12925479, 1.32132491, -9.75890849],
[ 2.76042144, 1.67271779, -0.29226613, -8.45413693],
[-2.03011142, -3.07832136, 1.4420448 , 9.62598044]])
.I
操作符實現了矩陣求逆的運算。非常簡單吧?沒有NumPy庫,Python也不能這麼容易算出來矩陣的逆運算。不記得或者沒學過矩陣求逆也沒關係,NumPy庫幫我們做完了,執行下面的命令存儲逆矩陣:
>>> invRandMat = randMat.I
接著執行矩陣乘法,得到矩陣與其逆矩陣相乘的結果:
>>> randMat*invRandMat
matrix([[ 1.00000000e+00, 0.00000000e+00, 2.22044605e-16, 1.77635684e-15],
[ 0.00000000e+00, 1.00000000e+00, 0.00000000e+00, 0.00000000e+00],
[ 0.00000000e+00, 4.44089210e-16, 1.00000000e+00, -8.88178420e-16],
[ -2.22044605e-16, 0.00000000e+00, 1.11022302e-16, 1.00000000e+00]])
結果應該是單位矩陣,除了對角線元素是1,4x4矩陣的其他元素應該全是0。實際輸出結果略有不同,矩陣裡還留下了許多非常小的元素,這是計算機處理誤差產生的結果。輸入下述命令,得到誤差值:
>>> myEye = randMat*invRandMat
>>> myEye - eye(4)
matrix([[ 0.00000000e+00, -6.59194921e-17, -4.85722573e-17, -4.99600361e-16],
[ 2.22044605e-16, 0.00000000e+00, -6.03683770e-16, -7.77156117e-16],
[ -5.55111512e-17, -1.04083409e-17, -3.33066907e-16, -2.22044605e-16],
[ 5.55111512e-17, 1.56125113e-17, -5.55111512e-17, 0.00000000e+00]])
函數eye(4)
創建4×4的單位矩陣。
只要能夠順利地完成上述例子,就說明已經正確地安裝了NumPy函數庫,以後我們就可以利用它構造機器學習應用程序。即使沒有提前學習所有的函數也沒有關係,本書將在需要的時候介紹更多的NumPy函數庫的功能。