公號:碼農充電站pro
主頁:https://codeshellme.github.iohtml
生活中,咱們常常會對比兩個事物的相關性,也能夠叫作類似度。git
若是一件事物與另外一件事物的類似度比較高,那這兩件事物的相關性就比較大。github
若是一件事物與另外一件事物的類似度比較低,那這兩件事物的相關性就比較小。算法
人類會根據本身的經驗,很容易的判斷兩件事物是否類似,或者類似度是多少。那如何讓計算機也可以進行這樣的判斷呢?shell
咱們都知道,計算機並無思惟,它只能理解數字。因此,若是想讓計算機理解咱們現實世界中的事物,必須先把現實事物轉換成數字。機器學習
空間向量模型假設,任何事物均可以轉換成 N 維空間中的一個點,這個點稱爲向量,而後經過計算向量之間的距離或夾角,來判斷向量的之間相關性,進而判斷事物之間的相關性。學習
什麼是向量3d
向量表明了事物的特徵。code
向量是相對標量而言,標量只是單個數字,沒有方向性。向量也叫矢量,由一組數字構成,具備方向性。htm
例如,用下圖中的 x
表示向量,其中 n
表示向量的維度:
兩個向量所對應的兩點之間的距離就是向量的距離,距離能夠描述不一樣向量在向量空間中的差別,也就是現實事物之間的差別。
經常使用的計算距離的方法有四種:
其中使用最多的是歐氏距離,下面一一介紹。
麥哈頓距離
麥哈頓距離能夠理解爲街道距離,或者出租車距離。
能夠看到下圖中,從A 點到B 點,不論是走1線路 仍是2線路,距離都是同樣的,這個線路的距離就是麥哈頓距離。
二維空間中的兩個點A(x1, x2)
和B(y1, y2)
,麥哈頓距離的計算公式爲:
n
維空間中的兩個點A(x1...xn)
和B(y1...yn)
,麥哈頓距離的計算公式爲:
歐式距離
歐式距離也叫歐幾里得距離,比較好理解,就是直線距離。
以下圖,A 點到B 點的直線距離就是歐式距離。
對於二維空間中的兩個點A(x1, x2)
和B(y1, y2)
,歐式距離的計算公式爲:
對於n
維空間中的兩點A(x1...xn)
和B(y1...yn)
,歐式距離的計算公式爲:
切比雪夫距離
切比雪夫距離能夠類比爲在方格中走格子,怎樣走的格子數最少。
以下圖中,從A 格子走到B 格子,先斜線走,再直線走,最終走的格子數就是切比雪夫距離。
對於二維空間中的兩個點A(x1, x2)
和B(y1, y2)
,切比雪夫距離的計算公式爲:
上面公式的含義是,∣x1 − y1∣
和 ∣x2 − y2∣
二者的最大者。
對於n
維空間中的兩點A(x1...xn)
和B(y1...yn)
,切比雪夫距離的計算公式爲:
閔可夫斯基距離
閔可夫斯基距離也叫作閔氏距離,它並非一種單獨的距離,而是上面三種距離的統一。
對於二維空間中的兩個點A(x1, x2)
和B(y1, y2)
,閔可夫斯基距離的計算公式爲:
對於n
維空間中的兩點A(x1...xn)
和B(y1...yn)
,閔可夫斯基距離的計算公式爲:
根據p
取值的不一樣,閔可夫斯基距離表示不一樣的距離:
p=1
時,就是曼哈頓距離;p=2
時,就是歐氏距離;p
趨近於無窮大的時候,就是切比雪夫距離。向量也是有大小的,向量的大小就是向量的長度。
向量的長度也叫向量的模,它是向量所對應的點到空間原點的距離,一般使用歐氏距離來表示向量的長度。
數學中有一個概念叫作範數,範數常被用來衡量向量的長度。
範數有4 種,分別對應向量的4 種距離:
L1
範數,用 ||x|| 表示,對應於麥哈頓距離。L2
範數,用 ||x||2 表示,對應於歐式距離。L∞
範數,用 ||x||∞ 表示,對應於切比雪夫距離。Lp
範數,用 ||x||p 表示,對應於閔可夫斯基距離。向量的夾角常常用餘弦值表示。
對於二維空間中的兩個點A(x1, x2)
和 B(y1, y2)
,餘弦的計算公式爲:
對於n
維空間中的兩點A(x1...xn)
和B(y1...yn)
,餘弦的計算公式爲:
夾角的餘弦取值範圍是[-1, 1]
,那麼:
1
。-1
。咱們能夠將向量的距離與夾角展示在同一個N
維座標系中,以下:
向量的餘弦取值範圍是[-1, 1]
,餘弦值越大,表示越類似,正好與類似度成正比。
對於向量之間的距離,一般用歐式距離 ED表示,ED 越小,表示越類似,與類似度成反比,並且ED 的取值範圍很是大。
因此一般會將歐式距離進行 1/(ED+1)
歸一化處理,用ED'
表示。ED'
的取值範圍是[0, 1]
,而且與類似度成正比:
ED'
值是 1,表示類似度爲 1,事物徹底相同。ED'
值是 0,表示類似度爲 0,事物徹底不一樣。應用空間向量模型的機器學習算法有 K 近鄰(KNN)分類、K 均值(K-Means) 聚類等。
爲了讓計算機可以判斷現實事物的類似度,咱們引出了空間向量的概念。
下面咱們來看如何使用空間向量,來判斷文檔類似度。
好比,如今咱們有兩個中文句子,要判斷這兩個句子的類似度:
要想將文檔轉換成向量,首先須要對文檔進行分詞。
分詞
咱們可使用 jieba 對這兩個句子進行分詞,結果以下:
能夠獲得全部詞的集合:
計算每一個句子的分詞的詞頻:
從而能夠獲得詞頻向量:
上文中,咱們介紹了,能夠經過向量的距離或者餘弦夾角來度量向量之間的類似度。這裏咱們使用餘弦夾角來計算。咱們知道 N
維空間的餘弦公式爲:
從而能夠計算餘弦夾角爲:
能夠看到,最終算出的餘弦夾角爲 0.85,比較接近1,說明這兩個句子仍是很相近的。
本篇文章主要介紹瞭如下幾點:
(本節完。)
推薦閱讀:
歡迎關注做者公衆號,獲取更多技術乾貨。