1. 程式人生 > >計算機如何理解事物的相關性-文件的相似度判斷

計算機如何理解事物的相關性-文件的相似度判斷

> **公號:碼農充電站pro** > **主頁:** 生活中,我們經常會對比兩個事物的**相關性**,也可以叫做**相似度**。 - 如果一件事物與另一件事物的相似度比較高,那這兩件事物的相關性就比較大。 - 如果一件事物與另一件事物的相似度比較低,那這兩件事物的相關性就比較小。 人類會根據自己的經驗,很容易的判斷兩件事物是否相似,或者相似度是多少。那如何讓**計算機**也能夠進行這樣的判斷呢? ### 1,空間向量模型 我們都知道,計算機並沒有思維,它只能理解數字。所以,如果想讓計算機理解我們現實世界中的事物,必須先把現實事物轉換成數字。 空間向量模型假設,任何事物都可以轉換成 **N 維空間中的一個點**,這個點稱為**向量**,然後通過計算**向量之間的距離或夾角**,來判斷向量的之間相關性,進而判斷事物之間的相關性。 - 向量之間的距離越大,事物就越不相關;距離越小就越相關。 - 向量之間的夾角越大,事物就越不相關;夾角越小就越相關。 ***什麼是向量*** 向量代表了事物的特徵。 向量是相對標量而言,標量只是單個數字,沒有方向性。向量也叫向量,由一組數字構成,具有方向性。 例如,用下圖中的 `x` 表示向量,其中 `n` 表示向量的維度: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126105634340.png#pic_center) ### 2,向量之間的距離 兩個向量所對應的兩點之間的距離就是向量的距離,距離可以描述不同向量在向量空間中的差異,也就是現實事物之間的差異。 常用的計算距離的方法有四種: - 麥哈頓距離 - 歐式距離 - 切比雪夫距離 - 閔可夫斯基距離 其中使用最多的是歐氏距離,下面一一介紹。 ***麥哈頓距離*** **麥哈頓距離**可以理解為街道距離,或者計程車距離。 可以看到下圖中,從A 點到B 點,不管是走**1線路** 還是**2線路**,距離都是一樣的,這個線路的距離就是麥哈頓距離。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126150844921.png#pic_center) 二維空間中的兩個點`A(x1, x2)` 和`B(y1, y2)`,麥哈頓距離的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126151118739.png#pic_center) `n` 維空間中的兩個點`A(x1...xn)` 和`B(y1...yn)`,麥哈頓距離的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126151537145.png#pic_center) ***歐式距離*** **歐式距離**也叫歐幾里得距離,比較好理解,就是直線距離。 如下圖,A 點到B 點的直線距離就是歐式距離。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126152331839.png#pic_center) 對於二維空間中的兩個點`A(x1, x2)` 和`B(y1, y2)`,歐式距離的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020112615245910.png#pic_center) 對於`n` 維空間中的兩點`A(x1...xn)` 和`B(y1...yn)`,歐式距離的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126152629735.png#pic_center) ***切比雪夫距離*** **切比雪夫距離**可以類比為在方格中走格子,怎樣走的格子數最少。 如下圖中,從A 格子走到B 格子,先斜線走,再直線走,最終走的**格子數**就是切比雪夫距離。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126152845911.png#pic_center) 對於二維空間中的兩個點`A(x1, x2)` 和`B(y1, y2)`,切比雪夫距離的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020112615313465.png#pic_center) 上面公式的含義是,`∣x1 − y1∣` 和 `∣x2 − y2∣` 兩者的最大者。 對於`n` 維空間中的兩點`A(x1...xn)` 和`B(y1...yn)`,切比雪夫距離的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126153148563.png#pic_center) ***閔可夫斯基距離*** **閔可夫斯基距離**也叫做閔氏距離,它並不是一種單獨的距離,而是上面三種距離的統一。 對於二維空間中的兩個點`A(x1, x2)` 和`B(y1, y2)`,閔可夫斯基距離的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126153612679.png#pic_center) 對於`n` 維空間中的兩點`A(x1...xn)` 和`B(y1...yn)`,閔可夫斯基距離的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126153620989.png#pic_center) 根據`p` 取值的不同,閔可夫斯基距離表示不同的距離: - 當 `p=1` 時,就是曼哈頓距離; - 當 `p=2` 時,就是歐氏距離; - 當 `p` 趨近於無窮大的時候,就是切比雪夫距離。 ### 3,向量的長度 向量也是有大小的,向量的大小就是向量的長度。 向量的長度也叫**向量的模**,它是向量所對應的**點到空間原點的距離**,通常使用**歐氏距離**來表示向量的長度。 數學中有一個概念叫做**範數**,範數常被用來衡量向量的長度。 範數有4 種,分別對應向量的4 種距離: - `L1` 範數,用 **||x||** 表示,對應於麥哈頓距離。 - `L2` 範數,用 **||x||2
** 表示,對應於歐式距離。 - `L∞` 範數,用 **||x||** 表示,對應於切比雪夫距離。 - `Lp` 範數,用 **||x||p** 表示,對應於閔可夫斯基距離。 ### 4,向量的夾角 向量的夾角經常用**餘弦值**表示。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126162220818.png?#pic_center) 對於二維空間中的兩個點`A(x1, x2)` 和 `B(y1, y2)`,餘弦的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126163139924.png#pic_center) 對於`n` 維空間中的兩點`A(x1...xn)` 和`B(y1...yn)`,餘弦的計算公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126163249480.png?#pic_center) 夾角的餘弦取值範圍是`[-1, 1]`,那麼: - 當兩個向量的方向重合時,餘弦值最大,為`1`。 - 當兩個向量的方向相反時,餘弦值最小,為 `-1`。 - 餘弦值越大,說明夾角越小,兩點相距就越近。 - 餘弦值越小,說明夾角越大,兩點相距就越遠。 ### 5,向量距離與夾角的使用 我們可以將向量的距離與夾角展現在同一個`N` 維座標系中,如下: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126165059162.png?#pic_center) 向量的餘弦取值範圍是`[-1, 1]`,餘弦值越大,表示越相似,正好與相似度成正比。 對於向量之間的距離,通常用**歐式距離** ED表示,**ED** 越小,表示越相似,與相似度成反比,而且**ED** 的取值範圍非常大。 所以通常會將歐式距離進行 `1/(ED+1)` **歸一化**處理,用`ED'` 表示。`ED'`的取值範圍是`[0, 1]`,並且與相似度成正比: - 當 ED 為 0 時,`ED'`值是 1,表示相似度為 1,事物完全相同。 - 當 ED 趨近於無窮大時,`ED'`值是 0,表示相似度為 0,事物完全不同。 ### 6,如何判斷文件的相似度 為了讓計算機能夠判斷現實事物的相似度,我們引出了**空間向量**的概念。 下面我們來看如何使用空間向量,來判斷**文件相似度**。 比如,現在我們有兩個中文句子,要判斷這兩個句子的相似度: - 句子1:我去過北京,也去過天安門。 - 句子2:我也去過北京,但沒去過天安門。 要想將文件轉換成向量,首先需要對文件進行分詞。 ***分詞*** 我們可以使用 [jieba](https://github.com/fxsjy/jieba/) 對這兩個句子進行分詞,結果如下: - 句子1:['我', '去過', '北京', '也', '去過', '天安門'] - 句子2:['我', '也', '去過', '北京', '但', '沒', '去過', '天安門'] 可以得到所有詞的集合: - 分詞集合:['沒', '但', '北京', '我', '去過', '天安門', '也'] 計算每個句子的分詞的詞頻: - 句子1:{'沒':0, '但':0, '北京':1, '我':1, '去過':1, '天安門':1, '也':1} - 句子2:{'沒':1, '但':1, '北京':1, '我':1, '去過':1, '天安門':1, '也':1} 從而可以得到詞頻向量: - 句子1:[0, 0, 1, 1, 1, 1, 1] - 句子2:[1, 1, 1, 1, 1, 1, 1] 上文中,我們介紹了,可以通過向量的**距離**或者**餘弦夾角**來度量向量之間的相似度。這裡我們使用餘弦夾角來計算。我們知道 `N` 維空間的餘弦公式為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126163249480.png?#pic_center) 從而可以計算餘弦夾角為: ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20201126223801142.png?#pic_center) 可以看到,最終算出的餘弦夾角為 **0.85**,比較接近**1**,說明這兩個句子還是很相近的。 ### 7,總結 本篇文章主要介紹了以下幾點: - 要想讓計算機理解現實世界中的事物,需要將其轉換成**空間向量**的形式。 - 可以通過計算空間向量之間的**距離**或者**夾角**,來衡量事物之間的相似度。 - 向量之間的夾角通常使用**餘弦夾角值**。 - 向量之間的距離有4 種,分別是: - 麥哈頓距離 - 歐式距離(最常用) - 切比雪夫距離 - 閔可夫斯基距離 - 案例:如何使用空間向量模型判斷文件相似度。 (本節完。) --- **推薦閱讀:** [***決策樹演算法-理論篇-如何計算資訊純度***](https://www.cnblogs.com/codeshell/p/13948083.html) [***決策樹演算法-實戰篇-鳶尾花及波士頓房價預測***](https://www.cnblogs.com/codeshell/p/13984334.html) [***樸素貝葉斯分類-理論篇-如何通過概率解決分類問題***](https://www.cnblogs.com/codeshell/p/13999440.html) [***樸素貝葉斯分類-實戰篇-如何進行文字分類***](https://www.cnblogs.com/codeshell/p/14034097.html) --- 歡迎關注作者公眾號,獲取更多技術乾貨。 ![碼農充電站pro](https://img-blog.csdnimg.cn/20200505082843773.png?#pic