在機器學習的世界裡打怪升級——KNN算法篇

2020-12-07 騰訊網

「全文約2000字,閱讀時間約6分鐘」

來自機器學習世界裡的勇士,你剛走出新手村,還沒完全武裝自己,就碰到了旅途中第一個小boss——KNN算法。

不過也別害怕,這是入門機器學習zui簡單、也zui容易理解的一個算法。

boss技能綜述

先來看看該boss的整體技能(原理)綜述:

要想預測一個新數據,只需把它放到訓練數據集中(「舊數據」),看它離哪些數據近,就把它預測為這些數據的類別(分類);或者把它預測為這些數據的均值(回歸)。

所以k近鄰算法既可以做分類,又可以做回歸(限於篇幅,本文只介紹分類)。

我們說,機器學習可以看做是一個函數,輸入訓練數據集,輸出預測值。在k近鄰算法中,給定一個數據集D:

其中,x為n維向量,代表每一個樣本的特徵數量;y代表有p個類別;右上角的角標從1到N,代表有N個樣本。

我們的目標是:

當給定一個新的實例x,模型通過學習數據集D,輸出實例x對應的類別y。

boss詳細攻略

該算法的步驟很簡單,主要有以下兩步:

1.找到與x距離最近(如何衡量最近?下文會有介紹)的k個點,k近鄰算法中的k就是這個含義。

2.根據「少數服從多數」的原則,決定x的類別y。換句話說,這k個點中最多的那個類別,就是新的實例x的類別。用公式表示為:

那這公式是啥意思呢?

我們從括號內部開始看起。

首先,y[i]表示k個點所對應的類別,a[j]就表示數據集D中的所有類別,j的取值為1到p(上文介紹過,一共有p個類別)。

其次,I()叫做指示函數。

它的含義是,當括號內的條件為真(True)時,函數返回的值是1;當括號內的條件為假(False)時,函數返回0。

在公式(1)中,當y[i]=a[j]時,返回1。

我們來看下公式(1)運行的過程:

首先取第1個類別a[1],讓k個點對應的y[i]都跟a[1]比較,計算指示函數並求和。

接下來從第2個類別a[2]開始循環上面的步驟,直到第p個類別a[p]。

由於每次循環返回一個值,我們需要找出其中的最大值,那麼這個最大值對應的類別,就是我們要求的實例x對應的類別y。

距離的衡量

k近鄰算法中,向量和向量之間的距離,我們一般用L2範數來衡量。即

a[i]就表示a中的第i個維度(特徵),總共有n個維度(特徵)。

分類的規則

最後我們來看下為什麼「少數服從多數」的規則是可行的。

我們做一個分類問題的目標是什麼?

當然是分錯的數量越少越好了。

假設我們預測的類別為y',實際的類別為y,顯然,我們分錯的概率為

當我們找到離x最近的k個點之後,分錯的概率就是

我們希望分錯的概率越小越好,那麼就意味著(3)式中的

越大越好,而這正是我們公式(1)所表示的內容。

因此,多數「投票」的規則就等價於分錯概率最小化。

boss技能介紹

Python在機器學習領域有著得天獨厚的優勢,下面我們就來看看KNN算法在Python中是如何被調用的(調包俠)。

分類

我們來看下它的參數。

1.algorithm

該參數指在尋找最近鄰時所採用的算法,默認為auto,意為自動進行選擇。可供選擇的算法主要有下面三種:kd_tree,ball_tree,brute。

2.leaf_size

指葉子節點的數目,默認為30。

3.metric

指採用何種方式進行距離度量,默認為minkowski(閔可夫斯基距離),也就是我們之前介紹過的範數。

4.metric_params

指距離度量的相關參數,一般無需進行設置。

5.n_neighbors

指最近鄰點的個數,默認為5個。

6.p

當p=1時,即L1範數,採用曼哈頓距離;當p=2時,意為L2範數,採用歐氏距離。

7.weights

指分類時的權重類型,默認是uniform,即k個近鄰點的權重相等;還可以選擇distance,意為近鄰點的權重與預測點之間的距離有關,一般是反比的關係。

回歸

在scikit-learn中可以按如下方式實現:

可以看到,回歸模型的參數與分類模型的一模一樣,大家可以進行參考,這裡就不再贅述了。

boss戰

終於,我們要直面KNN算法這個小boss了。

Python的scikit-learn庫中自帶了很多公開的數據集,這裡用乳腺癌數據集來說明k近鄰算法。

首先,加載該數據集

然後,把該數據集分成兩部分。一部分用來訓練我們的模型,另一部分用來測試模型的精度。

其中,train_test_split可以將數據按25%的比例分成訓練集和測試集。X_train、y_train為訓練樣本和標籤,佔75%;X_test、y_test為測試樣本和標籤,佔比25%。

接著,加載我們的模型

這裡的n_neighbors和k的含義一樣,都是指鄰居的個數。也就是說,我們要找到最近的3個鄰居,來對預測做出判斷。

然後,把數據「餵」給我們的模型,讓模型得到訓練。

訓練完成後,我們測試一下模型的精度

也就是說,模型的精度達到了91.6%。

呼,boss終於倒下了,但剛才的過程有點驚險,我們還需要做一些任務來補充實力。

任務1:模型的泛化能力

我們用數據訓練模型的目的,就是希望它在未知的新數據集中有很好的表現,我們把這種能力就叫做泛化。

我們總是希望泛化精度儘可能高,但有時候,你對舊數據進行過度訓練,模型在訓練集中表現的非常好,以至於將一些無關的噪聲點都擬合了進來。

這時,模型的泛化能力反而會降低,我們稱之為過擬合。

與此同時,假如你沒有對數據進行有效的訓練,產生的模型也比較粗糙,那麼對於新的數據集,模型同樣不會有好的結果。我們稱之為欠擬合。

在模型訓練過程中,既不能訓練過少,也不能過度訓練。過擬合和欠擬合都是需要我們避免的。

任務2:模型的優缺點

優點:模型易於理解,不需要什麼數學基礎。參數也不多,調參很容易。

缺點:如果訓練數據的特徵很多,而且樣本也很大,那麼k近鄰算法的預測速度和精度都會有大幅下降。

恭喜你,勇士!經過這一場戰鬥,你獲得了以下屬性提升:

武力+1%,技能熟練度+1%,智慧+1%

前方還有更多未知的冒險在等著你,繼續前進吧,勇士!

相關焦點

  • 機器學習:基於Knn算法的用戶屬性判斷方案設計
    本文作者通過Knn算法進行了一次用戶判斷預測的流程,文章為作者根據自身經驗所做出的總結,希望通過此文能夠加深你對Knn算法的認識。knn算法簡介K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。
  • KNN算法中的K有多重要
    K-最近鄰(KNN)是一種有監督的機器學習算法,可用於解決分類和回歸問題。它基於一個非常簡單的想法,數據點的值由它周圍的數據點決定。考慮的數據點數量由k值確定。因此,k值是算法的核心。KNN分類器根據多數表決原則確定數據點的類別。如果k設置為5,則檢查5個最近點的類別。也可以根據多數類進行回歸預測,同樣,KNN回歸取5個最近點的平均值。
  • 機器學習算法一覽(附python和R代碼)
    之所以關鍵,並不是因為已經取得的成就,而是未來幾年裡我們即將要獲得的進步和成就。 對我來說,如今最令我激動的就是計算技術和工具的普及,從而帶來了計算的春天。作為一名數據科學家,我可以建造一個數據處理系統來進行複雜的算法運算,這樣每小時能賺幾美金。可是學習這些算法卻花了我無數個日日夜夜。 那麼誰能從這篇文章裡收益最多呢?
  • 比KNN快380倍!我們有了新選擇
    KNN背景尋找與給定項目的K個相似項的做法在機器學習界被廣泛稱為「相似」搜索或「最近鄰」(NN)搜索。最廣為人知的最近鄰搜索算法便是K最近鄰(KNN)算法。它的用途很廣,在已有的物品集如手機電商目錄中,運用KNN,便可以從這一整個目錄中找到一個少數(K)最近鄰來發起新的搜索請求。
  • 最好的Python機器學習庫
    引言毫無疑問,神經網絡和機器學習在過去幾年一直是高科技領域最熱門的話題之一。這一點很容易看出,因為它們解決了很多真正有趣的用例,如語音識別、圖像識別、甚至是樂曲譜寫。因此,在這篇文章,我決定編制一份囊括一些很好的Python機器學習庫的清單,並將其張貼在下面。
  • 百度多篇論文入選NeurIPS 2020,機器學習領先算法、理論「強輸出」
    此次大會中,百度研究院參會並發表了多篇高質量論文,論文聚焦大規模稀疏學習的加速求解、新發現物種數量預測、隨機非凸優化、高維數據判別分析等問題,分別提出了創新算法及理論,突破原有算法在實際應用中泛化效果差、優化效率低等限制,有效提升AI技術在自然生態學、統計學習理論等領域中的應用價值,同時也彰顯出百度在人工智慧與機器學習領域的持續技術創新力。
  • 教你用OpenCV實現機器學習最簡單的k-NN算法
    這個有些愚蠢的例子準確說明了監督學習算法可以解決的一類問題。我們有一些觀察信息(房屋、房屋的地點和他們支持球隊的顏色)組成了訓練數據。可以使用這些數據來從經驗裡學習,這樣當面對預測新房子的主人支持的球隊顏色這一任務時,就可以有足夠的信息做出評估。正如前面所說,紅隊的球迷對他們的球隊非常狂熱,因此他們絕不可能成為藍隊球迷的鄰居。
  • 「機器學習」機器學習算法優缺點對比(匯總篇)
    主要回顧下幾個常用算法的適應場景及其優缺點!機器學習算法太多了,分類、回歸、聚類、推薦、圖像識別領域等等,要想找到一個合適算法真的不容易,所以在實際應用中,我們一般都是採用啟發式學習方式來實驗。但是如果你只是在尋找一個「足夠好」的算法來解決你的問題,或者這裡有些技巧可以參考,下面來分析下各個算法的優缺點,基於算法的優缺點,更易於我們去選擇它。天下沒有免費的午餐在機器學習領域,一個基本的定理就是「沒有免費的午餐」。
  • 兩篇西幻小說推薦:女主變成一座地下城,努力升級養怪開闢新世界
    別人打怪升級刷聲望,她升級養怪刷仇恨。別人和勇者/賢者/國王/魔王談戀愛……親,你想和違章建築談戀愛嗎?塔砂穿了,她穿成了一座半死不活的地下城。對,就是遊戲裡養著一個怪物生態圈,藏著寶箱,等著英雄來刷的那種。位面戰爭後第四百年,空間裂縫斬斷了神界、深淵和人間的聯繫,龍和精靈早已離開了大陸,移山倒海的英雄已成為傳說,停滯在人間的異類與混血都成了喪家之犬。
  • 教你學Python26-knn臨近算法
    KNN 概述k-近鄰(kNN, k-NearestNeighbor)算法是一種基本分類與回歸方法,我們這裡只討論分類問題中的 k-近鄰算法。一句話總結:近朱者赤近墨者黑!輸入沒有標籤的新數據後,將新的數據的每個特徵與樣本集中數據對應的特徵進行比較,然後算法提取樣本最相似數據(最近鄰)的分類標籤。一般來說,我們只選擇樣本數據集中前k個最相似的數據,這就是k-近鄰算法中k的出處,通常k是不大於20的整數。最後,選擇k個最相似數據中出現次數最多的分類,作為新數據的分類。k近鄰算法的輸入為實例的特徵向量,對應於特徵空間的點;輸出為實例的類別,可以取多類。
  • 機器學習萌新必學的Top10算法
    原作 James LeRoot 編譯自 KDuggets量子位 報導 | 公眾號 QbitAI在機器學習領域裡,不存在一種萬能的算法可以完美解決所有問題,尤其是像預測建模的監督學習裡。大的原則不過呢,對於所有預測建模的監督學習算法來說,還是有一些通用的底層原則的。機器學習算法,指的是要學習一個目標函數,能夠儘可能地還原輸入和輸出之間的關係。然後根據新的輸入值X,來預測出輸出值Y。精準地預測結果是機器學習建模的任務。
  • 機器學習算法的基本知識(使用Python和R代碼)
    創建本指南背後的理念是簡化全球有抱負的數據科學家和機器學習愛好者的旅程。 本指南能夠使你在研究機器學習問題的過程中獲取經驗。 我提供了關於各種機器學習算法以及R&Python代碼的高級理解以及運行它們,這些應該足以使你得心順手。
  • 解讀騰訊優圖ICCV2017 12篇論文:全球首個AI卸妝效果的算法等
    今年,即將於2017年11月8日在北京國家會議中心舉辦的AI World 2017世界人工智慧大會上,我們請到了騰訊優圖實驗室傑出科學家賈佳亞教授發表演講。 想了解更多關於騰訊優圖和計算機視覺的前沿動態?點擊文末閱讀原文,馬上參會!
  • Talk預告|谷歌梁辰:AutoML-Zero,從0開始搜索機器學習算法
    他與大家分享的主題是AutoML-Zero: 從0開始搜索機器學習算法,將介紹如何用進化算法重新發現包括反向傳播在內的各種機器學習算法。Talk·信息主題:AutoML-Zero, 從0開始搜索機器學習算法嘉賓:Google Brain研究員 梁辰上線時間:北京時間 5月13日 (周三) 20:00地點:將門TechBeat技術社區Talk·提綱自動機器學習(AutoML)取得了很多的成功應用,但是目前的方法因為依賴於人工設計的搜索空間和模塊而不夠自動化
  • 《魔獸世界》9.0前夕不打怪怎麼滿級 不打怪滿級方法教學
    ,具體是怎麼做到的,來看下邊的魔獸世界9.0前夕不打怪滿級方法吧。9.0前夕不打怪滿級方法 ... 魔獸世界9.0前夕已經上線,很多玩家準備好練一些小號,而在萬聖節活動中練得小號可以不用打怪就可以輕鬆滿級,具體是怎麼做到的,來看下邊的魔獸世界9.0前夕不打怪滿級方法吧。
  • 盤點:十大機器學習算法及其應用
    毫無疑問,過去兩年中,機器學習和人工智慧的普及度得到了大幅提升。如果你想學習機器算法,要從何下手呢?以我為例,我是在哥本哈根留學期間,學習AI課程入門的。我們用的教科書是一本AI經典:《Peter Norvig’s Artificial Intelligence?—?A Modern Approach》。
  • 流行的機器學習算法總結,幫助你開啟機器學習算法學習之旅
    機器學習算法概述「機器智能是人類永遠需要的一項發明。」— Nick Bostrom.如果您可以回顧幾年前的AI並將其與現在的AI進行比較,您會驚訝地發現AI的發展速度隨著時間的增長呈指數級增長。它已擴展到各種領域,例如ML,Expert Systems,NLP等數十個領域。
  • 小白學數據:教你用Python實現簡單監督學習算法
    監督學習作為運用最廣泛的機器學習方法,一直以來都是從數據挖掘信息的重要手段。即便是在無監督學習興起的近日,監督學習也依舊是入門機器學習的鑰匙。這篇監督學習教程適用於剛入門機器學習的小白。當然了,如果你已經熟練掌握監督學習,也不妨快速瀏覽這篇教程,檢驗一下自己的理解程度~什麼是監督學習?
  • KNN分類算法的python實現
    前言 K最近鄰(k-Nearest Neighbor,KNN)分類算法,是一個理論上比較成熟的方法,也是最簡單的機器學習算法之一。該方法的思路是:在特徵空間中,如果一個樣本附近的k個最近(即特徵空間中最鄰近)樣本的大多數屬於某一個類別,則該樣本也屬於這個類別。。
  • 機器學習——K最鄰近(KNN)算法詳解
    KNN算法全稱是:K-NearestNeighbor,中文翻譯就是:K最鄰近。它屬於機器學習中最簡單、最基本的分類和回歸算法。那麼什麼叫K最鄰近呢?圖五現在我們假定綠色和紅色屬於一類,那麼如果當K = 1(綠色圈)或6(黑色虛線圈)時,這個算法會把綠色和藍色歸為一類,而當K = 3時,才是正確的結果。