大數據算法:分類算法
圖中,紅藍綠三種顏色的點為樣本數據,分屬三種類別 、 、 。對於待分類點 ,計算和它距離最近的5個點(即K為5),這5個點最多歸屬的類別為 (4個點歸屬 ,1個點歸屬 ),那麽 的類別被分類為 。
KNN的算法流程也非常簡單,請看下面的流程圖。
KNN算法是壹種非常簡單實用的分類算法,可用於各種分類的場景,比如新聞分類、商品分類等,甚至可用於簡單的文字識別。對於新聞分類,可以提前對若幹新聞進行人工標註,標好新聞類別,計算好特征向量。對於壹篇未分類的新聞,計算其特征向量後,跟所有已標註新聞進行距離計算,然後進壹步利用KNN算法進行自動分類。
讀到這妳肯定會問,如何計算數據的距離呢?如何獲得新聞的特征向量呢?
KNN算法的關鍵是要比較需要分類的數據與樣本數據之間的距離,這在機器學習中通常的做法是:提取數據的特征值,根據特征值組成壹個n維實數向量空間(這個空間也被稱作特征空間),然後計算向量之間的空間距離。空間之間的距離計算方法有很多種,常用的有歐氏距離、余弦距離等。
對於數據 和 ,若其特征空間為n維實數向量空間 ,即 , ,則其歐氏距離計算公式為
這個歐式距離公式其實我們在初中的時候就學過,平面幾何和立體幾何裏兩個點之間的距離,也是用這個公式計算出來的,只是平面幾何(二維幾何)裏的n=2,立體幾何(三維幾何)裏的n=3,而機器學習需要面對的每個數據都可能有n維的維度,即每個數據有n個特征值。但是不管特征值n是多少,兩個數據之間的空間距離的計算公式還是這個歐氏計算公式。大多數機器學習算法都需要計算數據之間的距離,因此掌握數據的距離計算公式是掌握機器學習算法的基礎。
歐氏距離是最常用的數據計算公式,但是在文本數據以及用戶評價數據的機器學習中,更常用的距離計算方法是余弦相似度。
余弦相似度的值越接近1表示其越相似,越接近0表示其差異越大,使用余弦相似度可以消除數據的某些冗余信息,某些情況下更貼近數據的本質。我舉個簡單的例子,比如兩篇文章的特征值都是:“大數據”“機器學習”和“極客時間”,A文章的特征向量為(3, 3, 3),即這三個詞出現次數都是3;B文章的特征向量為(6, 6, 6),即這三個詞出現次數都是6。如果光看特征向量,這兩個向量差別很大,如果用歐氏距離計算確實也很大,但是這兩篇文章其實非常相似,只是篇幅不同而已,它們的余弦相似度為1,表示非常相似。
余弦相似度其實是計算向量的夾角,而歐氏距離公式是計算空間距離。余弦相似度更關註數據的相似性,比如兩個用戶給兩件商品的打分分別是(3, 3)和(4, 4),那麽兩個用戶對兩件商品的喜好是相似的,這種情況下,余弦相似度比歐氏距離更合理。
我們知道了機器學習的算法需要計算距離,而計算距離需要還知道數據的特征向量,因此提取數據的特征向量是機器學習工程師們的重要工作,有時候甚至是最重要的工作。不同的數據以及不同的應用場景需要提取不同的特征值,我們以比較常見的文本數據為例,看看如何提取文本特征向量。
文本數據的特征值就是提取文本關鍵詞,TF-IDF算法是比較常用且直觀的壹種文本關鍵詞提取算法。這種算法是由TF和IDF兩部分構成。
TF是詞頻(Term Frequency),表示某個單詞在文檔中出現的頻率,壹個單詞在壹個文檔中出現的越頻繁,TF值越高。
詞頻:
IDF是逆文檔頻率(Inverse Document Frequency),表示這個單詞在所有文檔中的稀缺程度,越少文檔出現這個詞,IDF值越高。
逆文檔頻率:
TF與IDF的乘積就是TF-IDF。
所以如果壹個詞在某壹個文檔中頻繁出現,但在所有文檔中卻很少出現,那麽這個詞很可能就是這個文檔的關鍵詞。比如壹篇關於原子能的技術文章,“核裂變”“放射性”“半衰期”等詞匯會在這篇文檔中頻繁出現,即TF很高;但是在所有文檔中出現的頻率卻比較低,即IDF也比較高。因此這幾個詞的TF-IDF值就會很高,就可能是這篇文檔的關鍵詞。如果這是壹篇關於中國原子能的文章,也許“中國”這個詞也會頻繁出現,即TF也很高,但是“中國”也在很多文檔中出現,那麽IDF就會比較低,最後“中國”這個詞的TF-IDF就很低,不會成為這個文檔的關鍵詞。
提取出關鍵詞以後,就可以利用關鍵詞的詞頻構造特征向量,比如上面例子關於原子能的文章,“核裂變”“放射性”“半衰期”這三個詞是特征值,分別出現次數為12、9、4。那麽這篇文章的特征向量就是(12, 9, 4),再利用前面提到的空間距離計算公式計算與其他文檔的距離,結合KNN算法就可以實現文檔的自動分類。
貝葉斯公式是壹種基於條件概率的分類算法,如果我們已經知道A和B的發生概率,並且知道了B發生情況下A發生的概率,可以用貝葉斯公式計算A發生的情況下B發生的概率。事實上,我們可以根據A的情況,即輸入數據,判斷B的概率,即B的可能性,進而進行分類。
舉個例子:假設壹所學校裏男生占60%,女生占40%。男生總是穿長褲,女生則壹半穿長褲壹半穿裙子。假設妳走在校園中,迎面走來壹個穿長褲的學生,妳能夠推斷出這個穿長褲學生是男生的概率是多少嗎?
答案是75%,具體算法是:
這個算法就利用了貝葉斯公式,貝葉斯公式的寫法是:
意思是A發生的條件下B發生的概率,等於B發生的條件下A發生的概率,乘以B發生的概率,除以A發生的概率。還是上面這個例子,如果我問妳迎面走來穿裙子的學生是女生的概率是多少。同樣帶入貝葉斯公式,可以計算出是女生的概率為100%。其實這個結果我們根據常識也能推斷出來,但是很多時候,常識受各種因素的幹擾,會出現偏差。比如有人看到壹篇博士生給初中學歷老板打工的新聞,就感嘆讀書無用。事實上,只是少見多怪,樣本量太少而已。而大量數據的統計規律則能準確反映事物的分類概率。
貝葉斯分類的壹個典型的應用場合是垃圾郵件分類,通過對樣本郵件的統計,我們知道每個詞在郵件中出現的概率 ,我們也知道正常郵件概率 和垃圾郵件的概率 ,還可以統計出垃圾郵件中各個詞的出現概率 ,那麽現在壹封新郵件到來,我們就可以根據郵件中出現的詞,計算 ,即得到這些詞出現情況下,郵件為垃圾郵件的概率,進而判斷郵件是否為垃圾郵件。
現實中,貝葉斯公式等號右邊的概率,我們可以通過對大數據的統計獲得,當有新的數據到來的時候,我們就可以帶入上面的貝葉斯公式計算其概率。而如果我們設定概率超過某個值就認為其會發生,那麽我們就對這個數據進行了分類和預測,具體過程如下圖所示。
訓練樣本就是我們的原始數據,有時候原始數據並不包含我們想要計算的維度數據,比如我們想用貝葉斯公式自動分類垃圾郵件,那麽首先要對原始郵件進行標註,需要標註哪些郵件是正常郵件、哪些郵件是垃圾郵件。這壹類需要對數據進行標註才能進行的機器學習訓練也叫作有監督的機器學習。