楊桃的Python機器學習6——kNN算法1:歐氏距離公式

本人CSDN博客專欄:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

 

散點圖的直觀解決思路:更近

回到上一節:楊桃的Python機器學習5,我們最終得到了如下的散點圖:

藍色的點(標籤爲1)似乎都集中在圖的左下部分,橙色的點(標籤爲0)似乎都集中在圖的右上部分。

我們在散點圖上再增加兩個點A和B,想想他們的標籤應該分別是什麼?

同學們也許大概已經猜出來答案了:

點A和藍色的點更近,應當是標籤1

點B和橙色的點更近,應當是標籤0

現在這個“更近”只是直觀上的感覺,有沒有更科學的計算呢?當然有!這就是歐式距離公式。

一維的距離度量

我們先以一維直線舉例,如圖:

如圖所示,一維直線上有A和B兩個點,A點在0的位置,B在5的位置。A點和B點的距離是:|AB|=|5-0|=5

現在增加一個C點在2的位置,請問C點離哪個點更近?

答案是顯而易見的,計算兩點之間的距離就能知道結果。

C點到A點的距離是:|CA|=|2-0|=|2|=2

C點到B點的距離是:|CB|=|2-5|=|-3|=3  (絕對值)

|CA| < |CB|,因此C點離A點更近。

一般的,兩個點x_{1}, x_{2} 在一維長度的距離公式就是 |x_{1}-x_{2}|

二維的距離度量

現在我們把問題稍微複雜一點,從一維直線拓展到二維平面,如圖:

A點的位置座標是(0, 0),B點的位置座標是(3, 4),現在求AB之間的距離(即紅線長度)是多少?

可能有同學一下子就看出來了:這不就是勾股定理嘛?勾三股四弦五!完全正確!具體計算如下:

 | AB| = \sqrt{\left ( x_{B}- x_{A} \right )^{2}+\left ( y_{B}- y_{A} \right )^{2}}=\sqrt{\left ( 3- 0 \right )^{2}+\left ( 4- 0 \right )^{2}}=\sqrt{25}=5

也就是說,二維平面上兩點的距離公式是:橫座標之差的平方,加上縱座標之差的平方,再開根號即可。

現在,我們在上圖增加一個C點,位置座標是(5, 2),再分別求C點到A點和B點的距離(即藍線和橙線長度):

將A點、B點、C點的座標分別代入二維平面上兩點的距離公式,即得:

| CA|=\sqrt{\left ( x_{C}- x_{A} \right )^{2}+\left ( y_{C}- y_{A} \right )^{2}}=\sqrt{\left ( 5- 0 \right )^{2}+\left ( 2- 0 \right )^{2}}=\sqrt{29}

| CB|=\sqrt{\left ( x_{C}- x_{B} \right )^{2}+\left ( y_{C}- y_{B} \right )^{2}}=\sqrt{\left ( 5- 3 \right )^{2}+\left ( 2- 4 \right )^{2}}=\sqrt{8}

|CB| < |CA|,因此C點離B點更近。 

三維的距離度量

直接上公式吧,有興趣的同學可以自己畫圖推導:

| AB| = \sqrt{\left ( x_{B}- x_{A} \right )^{2}+\left ( y_{B}- y_{A} \right )^{2}+\left ( z_{B}- z_{A} \right )^{2}}

需要注意的是,三維距離公式只是在二維距離公式的基礎上,增加了一個豎直方向的維度z

每個維度之間的距離仍然是計算差的平方,然後把所有維度的差的平方求和,最後開平方根。

千萬不要以爲三維就是開立方根啊!

n維的距離度量:歐式距離公式

當維度超過三維的時候,就很難用直觀畫圖的形式展現出距離了。怎麼計算呢?

第一步,我們需要把一維二維三維中點的座標抽象成向量的表達形式,即

\boldsymbol{a}=\begin{pmatrix} a_{1}\\ a_{2}\\ a_{3}\\ ...\\ a_{n}\\ \end{pmatrix}   , \boldsymbol{b}=\begin{pmatrix} b_{1}\\ b_{2}\\ b_{3}\\ ...\\ b_{n}\\ \end{pmatrix}

再次強調,向量小寫字母表示,矩陣大寫字母表示!

在之前一維舉例中,\boldsymbol{a}=\begin{pmatrix} a_{1}\end{pmatrix}=(0)\boldsymbol{b}=\begin{pmatrix} b_{1}\end{pmatrix}=(5)\boldsymbol{c}=\begin{pmatrix} c_{1}\end{pmatrix}=(2)

| AB| = \sqrt{\left ( a_{1}- b_{1} \right )^{2}}=\sqrt{\left ( 0- 5 \right )^{2}}=5

在之前二維舉例中,\boldsymbol{a}=\begin{pmatrix} a_{1}\\ a_{2}\end{pmatrix}=\begin{pmatrix} 0\\ 0\end{pmatrix}\boldsymbol{b}=\begin{pmatrix} b_{1}\\ b_{2}\end{pmatrix}=\begin{pmatrix} 3\\ 4\end{pmatrix}\boldsymbol{c}=\begin{pmatrix} c_{1}\\ c_{2}\end{pmatrix}=\begin{pmatrix} 5\\ 2\end{pmatrix}

| AB| = \sqrt{\left ( a_{1}- b_{1} \right )^{2}+\left ( a_{2}- b_{2} \right )^{2}}=\sqrt{\left ( 0- 3 \right )^{2}+\left ( 0- 4 \right )^{2}}=5

在三維中

| AB| = \sqrt{\left ( a_{1}- b_{1} \right )^{2}+\left ( a_{2}- b_{2} \right )^{2}+\left ( a_{3}- b_{3} \right )^{2}}

推廣到n維,距離公式是:

| AB| = \sqrt{\left ( a_{1}- b_{1} \right )^{2}+\left ( a_{2}- b_{2} \right )^{2}+\left ( a_{3}- b_{3} \right )^{2}+...+\left ( a_{n}- b_{n} \right )^{2}}=\sqrt{\sum_{i=1}^{n}\left ( a_{i}- b_{i} \right )^{2}}

這就是歐式距離公式

再回到本節最初的分類問題:

我們可以用歐式距離公式得到點A到散點圖中每一個點的距離。

得到距離之後呢?請看下一節的講解。

 

總結

散點圖的直觀解決思路:找距離更近的點。

歐式距離公式:

| AB| = \sqrt{\left ( a_{1}- b_{1} \right )^{2}+\left ( a_{2}- b_{2} \right )^{2}+\left ( a_{3}- b_{3} \right )^{2}+...+\left ( a_{n}- b_{n} \right )^{2}}=\sqrt{\sum_{i=1}^{n}\left ( a_{i}- b_{i} \right )^{2}}

一維情況下:

| AB| = | a - b|

二維情況下:

| AB| = \sqrt{\left ( a_{x}- b_{x} \right )^{2}+\left ( a_{y}- b_{y} \right )^{2}}

三維情況下:

| AB| = \sqrt{\left ( a_{x}- b_{x} \right )^{2}+\left ( a_{y}- b_{y} \right )^{2}+\left ( a_{z}- b_{z} \right )^{2}}

 

本人CSDN博客專欄:https://blog.csdn.net/yty_7

Github地址:https://github.com/yot777/

如果您覺得本篇本章對您有所幫助,歡迎關注、評論、點贊!Github歡迎您的Follow、Star!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章