🎯 什麼情境該想到我
當你想比較「兩個東西像不像、有沒有關係」,卻只能憑感覺說「應該有關」,缺乏客觀標準的時候。作者反覆示範:把模糊的「相關/相似/重要」變成一個可計算的度量。
⚙️ 怎麼用(把形容詞變成數字)
- 先承認「有關係」太模糊:「A 和 B 有關係」不科學,要問「相關性到底有多大」,才能拿來排序、分類、決策。
- 選一個合適的度量把它算出來,本書的三個範例:
- 相關性 → 互資訊:I(X;Y) = H(X) − H(X|Y),即「知道 Y 後,對 X 消除的不確定性」;只要有資料就好算,值越大越相關(0=無關)。
- 相似性 → 餘弦定理:把物件表示成特徵向量,用夾角餘弦衡量兩者方向有多接近(新聞分類就這麼做)。
- 重要性 → TF-IDF:用詞頻 × 逆文件頻率度量一個關鍵詞對一篇文件有多重要。
- 用數字做決策:有了可比較的度量,「哪個更相關/更相似/更重要」就從爭論變成排序,能自動化、能複現。
註:站內沒有《數學之美》的原書檔。以下補充的公式與數字都可以自己推導或重算(計算以 Python 驗證,2026-09-25),不引用原書頁碼。
★ 走一遍:用 TF-IDF + 餘弦判斷三篇文件的相似度
三篇極短的「文件」:
go channel goroutine channelgo goroutine schedulerkafka consumer partition consumer
TF-IDF:TF = 詞在這篇出現的比例;IDF = 。算出來(N = 3):
| 文件 | 權重 |
|---|---|
| 1 | channel 0.549、go 0.101、goroutine 0.101 |
| 2 | scheduler 0.366、go 0.135、goroutine 0.135 |
| 3 | consumer 0.549、kafka 0.275、partition 0.275 |
觀察:go 出現在兩篇文件中,IDF 較低,所以權重小;channel 只出現在一篇、而且出現兩次,權重最高——越稀有、越集中的詞越能代表這篇文件。
餘弦相似度(向量夾角的 cos,1 = 方向相同、0 = 完全無關):
| 相似度 | |
|---|---|
| 文件 1 vs 2 | 0.117(共享 go、goroutine) |
| 文件 1 vs 3 | 0.000 |
| 文件 2 vs 3 | 0.000 |
「這兩篇好像都在講 Go」這個模糊判斷,變成了一個可以排序、可以設門檻的數字。
★ 互資訊:「有多相關」的精確定義
讀法:知道 Y 之後,X 的不確定性少了多少。0 = 完全無關;等於 = 知道 Y 就完全知道 X。
它比相關係數更通用:相關係數只抓線性關係,互資訊能抓任何形式的依賴。例子見 工具-用資訊消除不確定性 的除錯實驗(一個測試對「bug 在哪裡」的互資訊約 0.40 位元)。
★ 工程上的同一個動作:把「感覺」變成指標
| 模糊的說法 | 可計算的度量 |
|---|---|
| 「這個服務最近好像變慢了」 | p50/p95/p99 延遲的時間序列 |
| 「這兩個錯誤應該有關」 | 兩者同時出現的條件機率、或時間上的相關性 |
| 「這段程式碼很複雜」 | 圈複雜度、認知複雜度(見 工具-管理複雜度) |
| 「這個搜尋結果不太準」 | 評估集上的 precision/recall/NDCG |
🧪 我實際套用的紀錄
- 2026-07-24:(待填)
⚠️ 注意 / 什麼時候不適用
-
度量的好壞取決於「特徵選得對不對」;量化不是萬能,選錯特徵,再精密的公式也沒意義(先想清楚要度量什麼)。
-
度量會被最佳化:一旦把某個度量當成目標,人(或模型)就會去最佳化度量本身,而不是它原本代表的東西(見 誘因扭曲)。TF-IDF 就曾被網頁作者用關鍵字堆砌來操縱。
🔗 相關工具
- 工具-用資訊消除不確定性 —— 理論基礎,度量之所以有效是因為它在消除不確定性
- 工具-找對數學模型 —— 前一步,度量之前要先選對模型,否則量的是錯的東西