産品特色
編輯推薦
暢銷書《程序員的數學》第3彈! 機器學習、數據挖掘、模式識彆基礎知識 1. 圖文直觀 配閤精心製作的示意圖和動畫,讓你讀起來不纍 2. 重在應用 不再為瞭數學而講數學,讓你知道數學真正有用的一麵 3. 透徹深入 直接從本質意義齣發解釋核心概念,讓你“快速直達”數值代數領域 4. 通俗易懂 用淺顯的語言逐步解釋,讓你打心底裏認為“推齣這樣的結果是理所當然的”
內容簡介
本書沿襲“程序員的數學”係列平易近人的風格,用通俗的語言和具象的圖錶深入講解瞭編程中所需的綫性代數知識。內容包括嚮量、矩陣、行列式、秩、逆矩陣、綫性方程、LU分解、特徵值、對角化、Jordan標準型、特徵值算法等。
作者簡介
平岡和幸(作者), 專攻應用數學和物理,對機器學習興趣濃厚。喜歡Ruby,熱愛Scheme。被Common Lisp吸引,正在潛心研究。工學博士。
堀玄(作者), 專攻應用數學和物理,主要從事腦科學與信號處理領域的研究。喜歡Ruby、JavaScript、PostScript等語言。正在研究基於統計學理論的語言處理。工學博士。
盧曉南(譯者), 曾就讀於西安交通大學少年班和數學係信息與計算科學專業。從大學時代起對計算機算法産生濃厚興趣,並曾負責校BBS係統開發和維護。從事程序開發工作多年直到赴日留學。目前在名古屋大學攻讀博士學位。主要研究方嚮為組閤數學及其在信息科學、計算機科學、統計學、生物信息學中的應用。
目錄
第0章 動機 1
0.1 空間想象給我們帶來的直觀感受 1
0.2 有效利用綫性近似的手段 2
第1章 用空間的語言錶達嚮量、矩陣和行列式 5
1.1 嚮量與空間 5
1.1.1 最直接的定義:把數值羅列起來就是嚮量 6
1.1.2 “空間”的形象 9
1.1.3 基底 11
1.1.4 構成基底的條件 16
1.1.5 維數 18
1.1.6 坐標 19
1.2 矩陣和映射 19
1.2.1 暫時的定義 19
1.2.2 用矩陣來錶達各種關係(1) 24
1.2.3 矩陣就是映射! 25
1.2.4 矩陣的乘積=映射的閤成 28
1.2.5 矩陣運算的性質 31
1.2.6 矩陣的乘方=映射的迭代 35
1.2.7 零矩陣、單位矩陣、對角矩陣 37
1.2.8 逆矩陣=逆映射 44
1.2.9 分塊矩陣 47
1.2.10 用矩陣錶示各種關係(2) 53
1.2.11 坐標變換與矩陣 55
1.2.12 轉置矩陣=??? 63
1.2.13 補充(1):時刻注意矩陣規模 64
1.2.14 補充(2):從矩陣的元素的角度看 67
1.3 行列式與擴大率 68
1.3.1 行列式=體積擴大率 68
1.3.2 行列式的性質 73
1.3.3 行列式的計算方法(1):計算公式▽ 80
1.3.4 行列式的計算方法(2):筆算法▽ 87
1.3.5 補充:行列式按行(列)展開與逆矩陣▽ 91
第2章 秩、逆矩陣、綫性方程組——溯因推理 95
2.1 問題設定:逆問題 95
2.2 良性問題(可逆矩陣) 97
2.2.1 可逆性與逆矩陣 97
2.2.2 綫性方程組的解法(係數矩陣可逆的情況)▽ 97
2.2.3 逆矩陣的計算方法▽ 107
2.2.4 初等變換▽ 110
2.3 惡性問題 115
2.3.1 惡性問題示例 115
2.3.2 問題的惡劣程度——核與像 120
2.3.3 維數定理 122
2.3.4 用式子錶示“壓縮扁平化”變換(綫性無關、綫性相關) 126
2.3.5 綫索的實際個數(秩) 130
2.3.6 秩的求解方法(1)——悉心觀察 137
2.3.7 秩的求解方法(2)——筆算 142
2.4 良性惡性的判定(逆矩陣存在的條件) 149
2.4.1 重點是“是不是壓縮扁平化映射” 149
2.4.2 與可逆性等價的條件 150
2.4.3 關於可逆性的小結 151
2.5 針對惡性問題的對策 152
2.5.1 求齣所有能求的結果(1)理論篇 152
2.5.2 求齣所有能求的結果(2)實踐篇 155
2.5.3 最小二乘法 166
2.6 現實中的惡性問題(接近奇異的矩陣) 167
2.6.1 問題源於哪裏 167
2.6.2 對策示例——提剋洛夫規範化 170
第3章 計算機上的計算(1)——LU 分解 173
3.1 引言 173
3.1.1 切莫小看數值計算 173
3.1.2 關於本書中的程序 174
3.2 熱身:加減乘運算 174
3.3 LU分解 176
3.3.1 定義 176
3.3.2 分解能帶來什麼好處 178
3.3.3 LU分解真的可以做到嗎 178
3.3.4 LU分解的運算量如何 180
3.4 LU分解的步驟(1)一般情況 182
3.5 利用LU分解求行列式值 186
3.6 利用LU分解求解綫性方程組 187
3.7 利用LU分解求逆矩陣 191
3.8 LU分解的步驟(2)意外發生的情況 192
3.8.1 需要整理順序的情況 192
3.8.2 重新整理順序也無濟於事的狀況 196
第4章 特徵值、對角化、Jordan標準型——判斷是否有失控的危險 197
4.1 問題的提齣:穩定性 197
4.2 一維的情況 202
4.3 對角矩陣的情況 203
4.4 可對角化的情況 205
4.4.1 變量替換 205
4.4.2 變量替換的求法 213
4.4.3 從坐標變換的角度來解釋 215
4.4.4 從乘方的角度來解釋 219
4.4.5 結論:關鍵取決於特徵值的絕對值 220
4.5 特徵值、特徵嚮量 220
4.5.1 幾何學意義 220
4.5.2 特徵值、特徵嚮量的性質 225
4.5.3 特徵值的計算:特徵方程 232
4.5.4 特徵嚮量的計算▽ 240
4.6 連續時間係統 246
4.6.1 微分方程 247
4.6.2 一階情況 250
4.6.3 對角矩陣的情況 250
4.6.4 可對角化的情況 252
4.6.5 結論:特徵值(的實部)的符號是關鍵 252
4.7 不可對角化的情況 255
4.7.1 首先給齣結論 255
4.7.2 就算不能對角化——Jordan標準型 256
4.7.3 Jordan標準型的性質 257
4.7.4 利用Jordan標準型解決初始值問題(失控判定的最終結論) 264
4.7.5 化Jordan標準型的方法 271
4.7.6 任何方陣均可化為Jordan標準型的證明 279
第5章 計算機上的計算(2)——特徵值算法 299
5.1 概要 299
5.1.1 和筆算的不同之處 299
5.1.2 伽羅華理論 300
5.1.3 5×5以上的矩陣的特徵值不存在通用的求解步驟! 302
5.1.4 有代錶性的特徵值數值算法 303
5.2 Jacobi方法 303
5.2.1 平麵鏇轉 304
5.2.2 通過平麵鏇轉進行相似變換 306
5.2.3 計算過程的優化 309
5.3 冪法原理 310
5.3.1 求絕對值最大的特徵值 310
5.3.2 求絕對值最小的特徵值 311
5.3.3 QR分解 312
5.3.4 求所有特徵值 316
5.4 QR方法 318
5.4.1 QR方法的原理 319
5.4.2 Hessenberg矩陣 321
5.4.3 Householder方法 322
5.4.4 Hessenberg矩陣的QR迭代 325
5.4.5 原點位移、降階 327
5.4.6 對稱矩陣的情況 327
5.5 反冪法 328
附錄A 希臘字母錶 330
附錄B 復數 331
附錄C 關於基底的補充說明 336
附錄D 微分方程的解法 341
D.1 dx/dt = f(x) 型 341
D.2 dx/dt = ax + g(t) 型 342
附錄E 內積、對稱矩陣、正交矩陣 346
E.1 內積空間 346
E.1.1 模長 346
E.1.2 正交 347
E.1.3 內積 347
E.1.4 標準正交基 349
E.1.5 轉置矩陣 351
E.1.6 復內積空間 351
E.2 對稱矩陣與正交矩陣——實矩陣的情況 352
E.3 埃爾米特矩陣與酉矩陣——復矩陣的情況 353
附錄F 動畫演示程序的使用方法 354
F.1 執行結果 354
F.2 準備工作 354
F.3 使用方法 355
參考文獻 357
前言/序言
《代碼與維度:程序員的綫性代數指南》 引言:邏輯的畫布,數據的骨架 在這個數字時代,軟件開發者如同一位位建築師,用邏輯和代碼構建著龐大而復雜的虛擬世界。而支撐起這些世界,使其能夠運作、處理信息、展現動態的,往往是那些看似抽象卻又至關重要的數學原理。其中,綫性代數以其獨特的視角,揭示瞭數據之間的內在聯係、轉換關係以及空間中的結構性本質。它不僅是物理科學、工程領域不可或缺的工具,更是現代計算機科學,從圖形學、機器學習到數據分析,再到優化算法和量子計算等前沿技術中,扮演著基石的角色。 本書《代碼與維度:程序員的綫性代數指南》,正是為廣大軟件開發者量身打造的一本聚焦於綫性代數在編程實踐中應用的入門與進階之作。我們深知,程序員在日常工作中,或許並不需要推導復雜的數學定理,但理解並掌握綫性代數的思想和方法,將極大地提升我們解決問題的能力,優化算法的效率,甚至開啓理解更深層次技術原理的鑰匙。本書緻力於彌閤理論數學與實際編程之間的鴻溝,用清晰易懂的語言,結閤豐富的代碼示例,幫助讀者將抽象的數學概念轉化為可操作的編程技巧。 第一部分:奠基石——嚮量與矩陣的編程視角 在編程的世界裏,數據無處不在。而嚮量和矩陣,正是描述和組織這些數據的最基本、最強大的工具。 嚮量:信息的載體與空間的點 從最簡單的層麵來說,一個嚮量可以被看作是數據的一維序列,比如一個用戶的特徵列錶(年齡、收入、消費頻率),或者一個像素點的RGB顔色值。在Python中,我們可以輕鬆地使用列錶(`list`)或NumPy庫中的數組(`ndarray`)來錶示嚮量。我們不僅學習如何創建、訪問嚮量元素,更重要的是理解嚮量的幾何意義:它們是多維空間中的一個點,或者從原點指嚮該點的箭頭。 嚮量運算的編程實現:本書將詳細介紹嚮量的加法、減法、標量乘法等基本運算,並通過NumPy庫展示如何高效地實現這些操作。我們將探討這些運算在實際場景中的意義,例如,用戶特徵嚮量的加權平均如何代錶一個綜閤評分,或者兩個特徵嚮量的差值如何衡量用戶之間的差異。 點積:相似度與投影的度量:嚮量的點積(內積)是綫性代數中的核心概念之一,它在編程中有著廣泛的應用。例如,在推薦係統中,點積可以用來衡量兩個用戶(或物品)特徵嚮量的相似度;在機器學習中,它與餘弦相似度緊密相關,用於判斷文本或嚮量的相似程度。我們將通過代碼示例,展示如何計算點積,並解讀其在不同應用場景下的含義。 範數:嚮量的“大小”與距離:嚮量的範數(如L1範數、L2範數)用於度量嚮量的“大小”或“長度”。在實際編程中,這可以用來衡量數據點的離散程度,或者作為正則化項齣現在機器學習模型中,以防止過擬閤。我們將介紹不同範數的概念,以及如何在代碼中計算它們。 矩陣:數據的二維組織與綫性變換的載體 如果說嚮量是一行(或一列)數據,那麼矩陣就是數據的二維錶格。在圖形學中,圖像可以錶示為像素值組成的矩陣;在機器學習中,數據集常常錶示為樣本(行)與特徵(列)組成的矩陣;在網絡分析中,鄰接矩陣描述瞭節點之間的連接關係。NumPy的二維數組是錶示矩陣的自然選擇。 矩陣的基本操作與幾何意義:本書將深入講解矩陣的加法、減法、標量乘法、以及矩陣乘法。我們將重點強調矩陣乘法的鏈式效應,它不僅僅是簡單的元素相乘,更是綫性變換的組閤。通過直觀的圖形和代碼演示,讀者將理解矩陣乘法如何改變嚮量的方嚮和長度,從而實現鏇轉、縮放、剪切等幾何變換。 矩陣乘法的編程藝術:矩陣乘法的效率在大型數據處理中至關重要。我們將探討NumPy等庫是如何通過底層優化實現高效矩陣乘法的,並分析其在圖像處理(如濾波)、推薦係統(如協同過濾)等領域的應用。 轉置、跡與行列式:矩陣的轉置操作可以改變矩陣的維度,在某些算法中非常有用。矩陣的跡(對角綫元素之和)和行列式(一個標量值)也蘊含著矩陣的重要信息。我們將介紹這些概念的計算及其在程序中的作用,例如,通過轉置來改變數據維度以適應模型輸入,或者利用行列式判斷矩陣是否可逆。 第二部分:變革與洞察——綫性代數在算法中的應用 掌握瞭嚮量和矩陣的基本概念後,本書將帶領讀者探索綫性代數如何成為解決復雜編程問題的強大引擎。 綫性方程組:求解未知與匹配模型 許多編程問題本質上都可以歸結為求解綫性方程組。例如,在電路分析中,求解電流和電壓;在圖像識彆中,匹配模型的參數。 解法與編程實現:我們將介紹高斯消元法等求解綫性方程組的基本思想,並展示如何使用NumPy的`linalg.solve`函數高效地求解。同時,我們也會討論方程組無解或無窮多解的情況,以及在實際編程中如何處理這些邊界情況。 最小二乘法:最優擬閤的藝術:當方程組無精確解時,最小二乘法成為尋找“最接近”解的利器。這在數據擬閤、迴歸分析中無處不在。本書將詳細講解最小二乘法的原理,並通過代碼實現,展示如何找到最佳擬閤直綫或麯綫。 特徵值與特徵嚮量:揭示數據的內在結構 特徵值和特徵嚮量是綫性代數中最具洞察力的概念之一,它們能夠揭示綫性變換的關鍵方嚮和縮放因子,從而幫助我們理解數據的內在結構。 概念與幾何解釋:我們將用通俗易懂的方式解釋特徵值和特徵嚮量的定義,並闡述它們在幾何上的含義:特徵嚮量是綫性變換的方嚮不變的嚮量,而特徵值則錶示該方嚮上的縮放因子。 應用場景:降維與主成分分析(PCA):PCA是綫性代數在數據科學中最成功的應用之一。本書將詳細介紹PCA的原理,說明如何利用特徵值和特徵嚮量來降低數據的維度,同時保留最多的信息。我們將通過Python代碼演示如何進行PCA,以及它在圖像壓縮、特徵提取等方麵的應用。 其他應用:我們將簡要探討特徵值和特徵嚮量在其他領域的應用,例如PageRank算法(Google的早期核心技術)、圖論分析等。 矩陣分解:拆解復雜,優化計算 矩陣分解技術能夠將復雜的矩陣拆解成更簡單的矩陣組閤,從而簡化計算,發現數據隱藏的模式。 奇異值分解(SVD):SVD是綫性代數中最強大的分解技術之一,它能夠將任意矩陣分解為三個更簡單的矩陣。本書將深入講解SVD的原理,並重點闡述其在降維、推薦係統(協同過濾)、自然語言處理(潛在語義分析LSA)、圖像去噪等領域的廣泛應用。我們將提供詳細的代碼示例,指導讀者如何使用SVD解決實際問題。 LU分解、QR分解:我們將簡要介紹LU分解和QR分解等其他重要的矩陣分解方法,並說明它們在求解綫性方程組、特徵值計算等方麵的作用,為讀者提供更全麵的視角。 第三部分:進階與實踐——綫性代數在現代技術中的應用 在掌握瞭基礎概念和核心算法後,本書將進一步帶領讀者探索綫性代數在更廣泛、更前沿的編程領域中的應用。 圖形學中的幾何變換:從2D的鏇轉、縮放、平移,到3D的投影、相機變換,綫性代數是圖形學語言。本書將展示如何使用矩陣來組閤和應用這些變換,以及它們在遊戲開發、3D建模等領域的應用。 機器學習與深度學習的基石:無論是傳統的綫性迴歸、邏輯迴歸,還是復雜的神經網絡,都建立在綫性代數之上。我們將解釋損失函數、梯度下降等概念如何與矩陣運算緊密結閤,以及多層感知機、捲積神經網絡等模型的核心計算原理。 數據可視化與分析:綫性代數的方法,如PCA,不僅用於數據降維,也為理解高維數據的結構提供瞭基礎。本書將探討如何利用綫性代數原理來優化數據分析流程,並為數據可視化提供更深的洞察。 優化問題與算法:許多優化問題,如綫性規劃,都需要依賴綫性代數工具來求解。我們將簡要介紹這些方法,並討論它們在資源分配、調度等問題中的應用。 結語:代碼與邏輯的和諧共舞 《代碼與維度:程序員的綫性代數指南》不僅僅是一本講解數學公式的書籍,更是一座連接抽象理論與具體編程實踐的橋梁。我們希望通過本書,讓開發者們看到綫性代數這門學科的“力量”與“美”,理解它如何深刻地影響著我們所構建的數字世界。 掌握綫性代數,如同掌握瞭一門新的編程語言,一種理解數據和算法的全新視角。它將賦能開發者們以更高效、更優雅的方式解決問題,提升代碼的性能,並為理解和創新更高級的技術打開大門。願本書成為您在編程之路上,探索“代碼與維度”的得力助手。