- Python廣告數據挖掘與分析實戰
- 楊游云 周健
- 1034字
- 2021-04-02 14:21:20
3.1.4 矩陣運算
在機器學習中用到矩陣運算的情況非常多。值得慶幸的是,Python的NumPy工具包中恰好也提供了矩陣運算的功能。
1.創建矩陣
首先,我們來看如何通過前面的二維數組創建矩陣。二維數組和矩陣在外形上非常相似,但不同的是,數組可以有多維,而矩陣則只能是二維的,由行和列構成。相同數據構成的二維數組和矩陣在Python中主要通過array(數組)和matrix(矩陣)這些關鍵字來加以區分。
In [91]: data = np.array([[0.9,0.35,0.14,0.46],[0.53,0.78,0.12,0.86]]) In [92]: mat = np.mat(data) In [93]: mat Out[93]: matrix([[0.9 , 0.35, 0.14, 0.46], [0.53, 0.78, 0.12, 0.86]])
可以通過shape屬性來查看矩陣的形狀:
In [94]: np.shape(mat) Out[94]: (2, 4) In [95]: data0 = np.matrix(np.zeros((4,4))) In [96]: data0 Out[96]: matrix([[0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.], [0., 0., 0., 0.]]) In [97]: data1 = np.matrix(np.ones((4,4))) In [98]: data1 Out[98]: matrix([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]])
這里矩陣zeros/ones函數的參數是一個tuple類型,并且默認是浮點型的數據,如果想要返回int類型的數據,可以使用dtype=int更改數據類型。
這里shape屬性中的元組分別表示矩陣的行數和列數,說明mat是一個2行4列的矩陣。np.zeros((4,4))表示創建4×4的全0矩陣,np.ones((4,4))表示創建4×4的全1矩陣。
我們有時還會創建一些隨機數矩陣,特別是在進行數據初始化的時候。NumPy中的random模塊被廣泛用于創建隨機數,下面展示由np.random.rand(2,2)先創建一個二維數組,再將其轉換成矩陣matrix并輸出。
In [99]: data2 = np.matrix(np.random.rand(2,2)) In [100]: data2 Out[100]: matrix([[0.7879823 , 0.4018926 ], [0.14737219, 0.85269316]])
用類似的方法,可以得到一個3×3的0~10之間的隨機整數矩陣。
In [101]: data3=np.matrix(np.random.randint(10,size=(3,3))) In [102]: data3 Out[102]: matrix([[9, 7, 5], [5, 5, 4], [4, 4, 9]])
2.常見的矩陣運算
常見的矩陣運算包括矩陣相乘、矩陣點乘和矩陣轉置等。
(1)矩陣相乘
In [103]: a1 = np.matrix([1,2]) In [104]: a2 = np.matrix([[1],[2]]) In [105]: a3 = a1*a2 In [106]: a3 Out[106]: matrix([[5]])
可以看到,1×2的矩陣a1乘以2×1的矩陣a2,得到1×1的矩陣a3。這里需要特別說明的是,兩個矩陣相乘時,要求前一個矩陣的列數要與后一個矩陣的行數相等才可以,否則就不能進行矩陣相乘。例如1×2的矩陣與3×1的矩陣就不能相乘。
In [107]: a2 = np.matrix([[1],[2],[3]]) In [108]: a3 = a1*a2 --------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-108-2baf151ace19> in <module>() ----> 1 a3 = a1*a2 C:\ProgramData\Anaconda3\lib\site-packages\NumPy\matrixlib\defmatrix.py in __mul__(self, other) 218 if isinstance(other, (N.ndarray, list, tuple)) : 219 # This promotes 1-D vectors to row vectors 220 return N.dot(self, asmatrix(other)) 221 if isscalar(other) or not hasattr(other, '__rmul__') : 222 return N.dot(self, other) ValueError: shapes (1,2) and (3,1) not aligned: 2 (dim 1) != 3 (dim 0)
(2)矩陣點乘
矩陣點乘是指兩個矩陣的對應元素相乘。np.multiply是NumPy中自帶的乘法(點乘)函數。
In [113]: a1 = np.matrix([2,2]) In [114]: a2 = np.matrix([3,3]) In [115]: a3 = np.multiply(a1,a2) In [116]: a3 Out[116]: matrix([[6, 6]])
另外,如果一個矩陣與標量相乘,也是表示矩陣點乘的意思。
In [117]: a2 = a1*3 In [118]: a2 Out[118]: matrix([[6, 6]])
可以看到,上述兩種寫法的矩陣點乘結果一致,在實際應用中我們可以根據個人習慣來選擇。
(3)矩陣轉置
矩陣轉置也是我們在數據分析挖掘中常用的功能。矩陣轉置是將原矩陣的行轉為列,列轉為行,常用符號“T”來表示矩陣轉置。
In [119]: a1 = np.matrix([[1,1],[0,0]]) In [120]: a1.T Out[120]: matrix([[1, 0], [1, 0]])
矩陣轉置的情況非常多,有時候我們不得不通過矩陣轉置的方式來得到我們想要的矩陣形式,從而進行后續的計算。
- Unity 5.x Game AI Programming Cookbook
- 文本數據挖掘:基于R語言
- 數據庫系統原理及應用教程(第4版)
- Spark核心技術與高級應用
- Microsoft Power BI數據可視化與數據分析
- 數據挖掘原理與SPSS Clementine應用寶典
- Spark大數據編程實用教程
- 大數據精準挖掘
- 數據庫應用系統開發實例
- Chef Essentials
- 中文版Access 2007實例與操作
- 企業大數據處理:Spark、Druid、Flume與Kafka應用實踐
- 數據挖掘與機器學習-WEKA應用技術與實踐(第二版)
- Access 2010數據庫應用技術教程(第二版)
- Scratch Cookbook