1. 程式人生 > >《機器學習實戰》—— KNN(K近鄰演算法)

《機器學習實戰》—— KNN(K近鄰演算法)

《機器學習實戰》可以說是學習ML的必備書籍,連載本書中的重點演算法。重點在演算法和思想,避免涉及數學和理論推導。
由於現在已經有現成的庫,不管是Sklearn還是keras,所以演算法基本不需要我們自己去寫,呼叫庫就可以,但是必須要知道如何要去調參,也就是每個演算法涉及到的引數,如何調整,能效果更好。

1.基本概念:

k近鄰作為監督學習的入門演算法,是資料分析不可缺少的一部分。
適用情況:對於一系列有標籤的資料D1,我們想對某個或某些資料D2進行分類。我們首先,分別計算D2與D1各個資料的距離(此處多種度量方法),計算得出距離,然後對這些資料按距離遠近排序,距離小在前面。然後,選擇排在前k(即KNN中的k)個的資料,作為參考物件。對於前k個數據,統計每個類別出現的頻率,頻率大的(也就是出現次數多的)作為該資料D2的預測類別。

2.演算法虛擬碼:

演算法-對未知型別的資料集中的點執行下列操作:
    1>分別計算改點與已經型別資料集中的每個點之間的距離;
    2>按距離遞增排序;
    3>選取距離最小的前k個點;
    4>統計這k個點,對應類別,每個類別出現的頻率;
    5>這k個點,對應類別,出現頻率最高的作為當前點的預測分類;

3. 演算法注意點:

3.1 歸一化數值:

在使用knn對資料進行預測之前,我們首先要對資料做歸一化,因為每個特徵的大小差很多,例如有的特徵值1000多,有的個位數,如果不歸一化,不同特徵的權重會差很多。同時會影響到收斂速度。當然在進行資料分析的時候,並不是每個特徵對分類的貢獻完全相同。我們可以分析特徵,對特徵賦予不同的特徵值。

3.2 演算法優缺點:

優點
簡單好用,容易理解,精度高,理論成熟,既可以用來做分類也可以用來做迴歸;
可用於數值型資料和離散型資料;
訓練時間複雜度為O(n);無資料輸入假定;
對異常值不敏感。

缺點:
計算複雜性高;空間複雜性高;
樣本不平衡問題(即有些類別的樣本數量很多,而其它樣本的數量很少);
一般數值很大的時候不用這個,計算量太大。但是單個樣本又不能太少,否則容易發生誤分。
最大的缺點是無法給出資料的內在含義,即沒有顯式的訓練過程,我們不知道式根據哪些特徵,如何做出的預測。

4.演算法實戰

接下來的每個演算法,我們都會說明如何呼叫Sklearn來實現,說明sklearn各個引數的含義。括號內的均為預設值。
image.png

4.1 引數:

  • n_neighbors:預設為5,就是k-NN的k的值,選取最近的k個點。
  • weights:預設是uniform,引數可以是uniform、distance,也可以是使用者自己定義的函式。uniform是均等的權重,就說所有的鄰近點的權重都是相等的。distance是不均等的權重,距離近的點比距離遠的點的影響大。使用者自定義的函式,接收距離的陣列,返回一組維數相同的權重。
  • algorithm:快速k近鄰搜尋演算法,預設引數為auto,可以理解為演算法自己決定合適的搜尋演算法。除此之外,使用者也可以自己指定搜尋演算法ball_tree、kd_tree、brute方法進行搜尋,brute是蠻力搜尋,也就是線性掃描,當訓練集很大時,計算非常耗時。kd_tree,構造kd樹儲存資料以便對其進行快速檢索的樹形資料結構,kd樹也就是資料結構中的二叉樹。以中值切分構造的樹,每個結點是一個超矩形,在維數小於20時效率高。ball tree是為了克服kd樹高緯失效而發明的,其構造過程是以質心C和半徑r分割樣本空間,每個節點是一個超球體。
  • leaf_size:預設是30,這個是構造的kd樹和ball樹的大小。這個值的設定會影響樹構建的速度和搜尋速度,同樣也影響著儲存樹所需的記憶體大小。需要根據問題的性質選擇最優的大小。
  • metric:用於距離度量,預設度量是minkowski,也就是p=2的歐氏距離(歐幾里德度量)。
  • p:距離度量公式。在上小結,我們使用歐氏距離公式進行距離度量。除此之外,還有其他的度量方法,例如曼哈頓距離。這個引數預設為2,也就是預設使用歐式距離公式進行距離度量。也可以設定為1,使用曼哈頓距離公式進行距離度量。
  • metric_params:距離公式的其他關鍵引數,這個可以不管,使用預設的None即可。
  • n_jobs:並行處理設定。預設為1,臨近點搜尋並行工作數。如果為-1,那麼CPU的所有cores都用於並行工作。

4.2 方法:

  • fit(X, y):使用X作為訓練資料,y作為訓練標籤(目標值)來擬合模型(分類器)
  • get_params([deep]):得到分類器的引數
  • kneighbors([X, n_neighbors, return_distanced]):返回一個點的k近鄰
  • kneighbors_graph([X, neighbors, mode]):
  • predict(X):預測類別未知資料X的類別
  • predict_proba(X):返回資料X預測的各類別的概率
  • score(X,y[,sample_weight]):對於測試資料,返回預測的得分結果
  • set_params( **params):設定分類器的引數
    用到最多的便是,fit、predict、score

參考資料:

1。《機器學習實戰》
2。《機器學習》-周志華
3。http://blog.csdn.net/c406495762/article/details/75172850#41-knn演算法的優缺點
建議閱讀大神的部落格,《機器學習實戰》中程式碼有些過時,而且講解不夠明白,他的部落格給出了詳細的過程和解釋,再參閱西瓜書和《機器學習實戰》可以事半功倍。

相關推薦

機器學習實戰K近鄰演算法--學習筆記

一、KNN的工作原理 假設有一個帶有標籤的樣本資料集(訓練樣本集),其中包含每條資料與所屬分類的對應關係。 輸入沒有標籤的新資料後,將新資料的每個特徵與樣本集中資料對應的特徵進行比較。 1) 計算新資料與樣本資料集中每條資料的距離。 2) 對求得的所有距離進

機器學習實戰筆記-K近鄰演算法2(改進約會網站的配對效果)

案例二.:使用K-近鄰演算法改進約會網站的配對效果 案例分析: 海倫收集的資料集有三類特徵,分別是每年獲得的飛行常客里程數、玩視訊遊戲所耗時間百分比、 每週消費的冰淇淋公升數。我們需要將新資

機器學習實戰k-近鄰演算法(3)---如何視覺化資料

關於視覺化: 《機器學習實戰》書中的一個小錯誤,P22的datingTestSet.txt這個檔案,根據網上的原始碼,應該選擇datingTestSet2.txt這個檔案。主要的區別是最後的標籤,作者原來使用字串‘veryLike’作為標籤,但是Python轉換會出現Val

機器學習實戰》——k-近鄰演算法Python實現問題記錄

《機器學習實戰》第二章k-近鄰演算法,自己實現時遇到的問題,以及解決方法。做個記錄。 1.寫一個kNN.py儲存了之後,需要重新匯入這個kNN模組。報錯:no module named kNN. 解決方法:1.將.py檔案放到 site_packages 目錄下     

機器學習實戰K-近鄰演算法總結和程式碼解析

            機器學習實戰是入手機器學習和python實戰的比較好的書,可惜我現在才開始練習程式碼!先宣告:本人菜鳥一枚,機器學習的理論知識剛看了一部分,python的知識也沒學很多,所以寫程式碼除錯的過程很痛可!但是還是挨個找出了問題所在,蠻開心的!看了很多大牛

py2.7 : 《機器學習實戰k-近鄰演算法 11.19 更新完畢

主要有幾個總結的: 1.python支援檔案模組化,所以在同一個目錄下import就可以呼叫了; 2.中文註釋要加上 # -*- coding: utf-8 -*- 3.import numpy 和 from numpy import * 區別是, 對於前者,呼叫的時候需要

機器學習實戰-kNN(k-近鄰)】python3實現-書本知識【1】

說明: 本文內容為【Peter Harrington -機器學習實戰】一書的學習總結筆記。 基本概念: kNN是聚類演算法中一種使用歐式定理計算各個特徵之間的距離而進行分類的基礎演算法,歐式定理:

機器學習實戰k-近鄰演算法(4)--- 如何歸一化資料

歸一化的公式: newValue = (oldValue - min) / (max - min) 就是把資料歸一化到[0, 1]區間上。 好處: 防止某一維度的資料的數值大小對距離就算產生影響。多個維度的特徵是等權重的,所以不能被數值大小影響。 下面是歸一化特徵值的程式碼

機器學習實戰精讀--------K-近鄰算法

機器學習 knn算法 k-近鄰算法對機器學習實戰的課本和代碼進行精讀,幫助自己進步。#coding:utf-8 from numpy import * import operator #運算符模塊 from os import listdir #os.listdir() 方法用於返回指定的文件夾包含的

機器學習實戰(一)k-近鄰算法

復雜 ssi bsp 體重 工具 等級 lap 問題 種類   轉載請註明源出處:http://www.cnblogs.com/lighten/p/7593656.html 1.原理   本章介紹機器學習實戰的第一個算法——k近鄰算法(k Nearest Neighbor

機器學習實戰K近鄰改進的約會網站程式碼及手寫字型識別程式碼

from numpy import * import operator import os def createDataSet(): group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) labels=['A','A','B','B']

機器學習實戰——1.1K近鄰演算法

宣告:參考書目《機器學習實戰》作者: Peter Harrington 出版社: 人民郵電出版社 譯者: 李銳 / 李鵬 / 曲亞東 / 王斌  參考部落格 Jack-Cui  作者個人網站:http://cuijiahua.com/ 公式: K近鄰演算法的

2、python機器學習基礎教程——K近鄰演算法鳶尾花分類

一、第一個K近鄰演算法應用:鳶尾花分類 import numpy as np from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split from sklearn.neighbors

機器學習筆記(3)---K-近鄰演算法(1)---約會物件魅力程度分類

參考資料 《機器學習實戰》,Machine Learning in Action,本文中簡稱MLiA 《機器學習》周志華,本文簡稱西瓜書 《Web安全之機器學習》劉焱著,本文中簡稱WSML(Web Security in Machine Learning,

機器學習系列之K-近鄰演算法(監督學習-分類問題)

''' @description : 演算法優點: a簡單、易於理解、易於實現、無需估計引數、無需訓練 演算法缺點: a懶惰演算法,對測試樣本分類時計算量大,記憶體開銷大 b必須制定k值,k值得選擇

機器學習實戰k-臨近演算法(二)

海倫一直在使用線上約會網站尋找合適自己的約會物件,經過一番總結,海倫整理了以下資料,希望我們的分類軟體可以更好地幫助她將匹配物件劃分到確切的分類中 1、收集資料 40920 8.326976 0.953952 largeDoses 14488 7.153469 1.673

機器學習實戰2--K近鄰

本部落格基於機器學習實戰這本書,主要是對機器學習的演算法原理及python實現進行詳細解釋,若是有些沒有闡述清楚的,看到的請指出。 第二章的K近鄰演算法是一個簡單的機器學習演算法。 K近鄰演算法: 原理:收集一個樣本資料集合,並且樣本集中每個資料都存在標籤

機器學習筆記1-k近鄰演算法的實現

k_近鄰演算法:採用測量不同特徵值之間的距離方法進行分類. 優點:精度高,對異常值不明感,無資料輸入假定 缺點:計算複雜度高,空間複雜度高 適用資料範圍:數值型和標稱型 步驟如下: 1.計算一直類別資料集中的點御當前點之間的距離 2.按照距離的遞增次序排序 3.選取當前的點距

機器學習 | 淺談K-近鄰演算法

K-近鄰(KNN)演算法是解決分類問題的演算法。既可以解決二分類,也可以解決多分類問題。 其實它也可以解決迴歸問題。     K-近鄰原理:   某個樣本的類別,由與之最相近的K個鄰居投票所決定。   例子:   現在有一個樣本集,其中所有資料都已經標記好類別,假設有一個未

機器學習實戰》—— KNN(K近鄰演算法)

《機器學習實戰》可以說是學習ML的必備書籍,連載本書中的重點演算法。重點在演算法和思想,避免涉及數學和理論推導。 由於現在已經有現成的庫,不管是Sklearn還是keras,所以演算法基本不需要我們自己去寫,呼叫庫就可以,但是必須要知道如何要去調參,也就是每個