1. 程式人生 > >機器學習:K-NN分類

機器學習:K-NN分類

一、定義

        1、K-NN分類全稱為K近鄰法(k-nearest neighbor),是一種基本回歸與分類方法:給定一個訓練資料集,對新的輸入例項,在訓練資料集中找到與該例項最近的k個例項,這k個例項中多數例項屬於某一類,就把該輸入例項分為這一類。

        2、好比說,你周圍的同學大都是些好學生,你也會被認為是好學生;你周圍大都是些混混,那你也會被認為是混混。(其實這只是一種誤解哈哈哈)

二、解決什麼問題?

        1、根據已有的分類情況,對未知型別的資料進行分類。

        2、舉個例子

        

            這是一些球員的職業生涯資料,其中包括場均得分和場均助攻,大家知道現在的控衛和傳統控衛有很多不同,現在的控衛進攻能力更強,而傳統控衛更偏向於組織串聯球隊。兩種風格的控衛在資料上有很明顯的區別,得分型控衛得分更高,傳統控衛助攻更多,而一些身材高大的控衛比如西蒙斯、鮑爾則更加全面,此處就不涉及討論。那麼對於林書豪來說,針對他的資料就不好一眼看出他是哪種型別的控衛,這裡我們就可以用k-近鄰演算法進行分類。

三、具體步驟

        度量球員與球員之間的距離最明顯的就是直接對比球員之間各個資料的差值,比如球員A場均20+10,球員B場均19+9,那麼就認為這兩個球員及其相似了。而我們所要計算的就是球員之間,各個資料的差值的總和,計算差值的方式很多種。

        1、匯入球員資料,將球員的資料和分類記為:[場均得分,場均助攻,型別]

                    

        2、計算歐式距離(令A為已知型別球員A,B為待分類球員B),其中X上標i是球員的各類資料:

                  

        3、重複2,將每個已知分類球員與待分類球員的距離求出

        4、求出所有距離後,做一次排序,取距離最近的K個球員,統計這K個球員的型別,其中型別最多的,就把這個型別當做是待分類球員的型別

四、Python實現

        1、先看資料,格式為csv

            

        2、匯入資料

           

           

        3、計算距離

        

        歐式距離,注意資料型別

        

        4、分類

       

        5、執行效果

        

五、拓展

        1、通俗來說,K-NN演算法讓被測目標去尋找它的同類,這個同類的判斷依據就是,比較的兩個物件,它們的各個屬性(特徵)的差別總和。取到與被測物件差別最小的K個物件,這K個物件中,絕大部分應該是屬於同一類的,如果這K個物件所屬的類別不符合這個規律,那麼要考慮K值的選取以及比較的屬性(特徵)是否真正能反應不同類別之間的差距。

        2、K值的選取

            K值的選取會對結果產生重大影響,當K值較小時,學習的近似誤差會減小,只有與輸入例項較近的訓練例項才會對預測結果起作用,但學習的估計誤差會增大,預測結果對近鄰的例項點非常敏感。K的減小會使整體模型變得複雜,容易發生過擬合。

            K值較大時,估計誤差減小,近似誤差增大,這時與輸入例項較遠的訓練例項也會對預測起作用,使預測錯誤。K值增大意味著整體模型變得簡單。

            實際應用中,K值一般取一個比較小的值

        3、距離公式除歐式以外還有很多,這是曼哈頓距離