1.knn
K最近鄰(k-Nearest Neighbor,KNN)分類算法,在給定一個已經作好分類的數據集以後,k近鄰能夠學習其中的分類信息,並能夠自動地給將來沒有分類的數據分好類。
咱們能夠把用戶分爲兩類:「高信譽用戶」和「低信譽用戶」,酒店則能夠分爲:「五星」,「四星」,「三星」,「兩星」,「一星」。
這些可使用線性迴歸作分類嗎?
答案:能作,但不建議使用,線性模型的輸出值是連續性的實數值,而分類模型的任務要求是獲得分類型的模型輸出結果。從這一點上看,線性模型不適合用於分類問題。
咱們換一個思路,這裏用「閾值」概念,也就是將連續性數值離散化,好比信譽預測中,咱們能夠把閾值定爲700,高於700的爲高信譽用戶,低於700的爲低信譽用戶,這裏咱們把連續性變量轉換成一個「二元變量」,固然也可使用更多「閾值」,好比能夠分爲,低信譽,中等信譽,高信譽。
###############################################################
迴歸與分類的不一樣
1.迴歸問題的應用場景(預測的結果是連續的,例如預測明天的溫度,23,24,25度)
迴歸問題一般是用來預測一個值,如預測房價、將來的天氣狀況等等,例如一個產品的實際價格爲500元,經過迴歸分析預測值爲499元,咱們認爲這是一個比較好的迴歸分析。一個比較常見的迴歸算法是線性迴歸算法(LR)。另外,迴歸分析用在神經網絡上,其最上層是不須要加上softmax函數的,而是直接對前一層累加便可。迴歸是對真實值的一種逼近預測。
2.分類問題的應用場景(預測的結果是離散的,例如預測明每天氣-陰,晴,雨)
分類問題是用於將事物打上一個標籤,一般結果爲離散值。例如判斷一幅圖片上的動物是一隻貓仍是一隻狗,分類一般是創建在迴歸之上,分類的最後一層一般要使用softmax函數進行判斷其所屬類別。分類並無逼近的概念,最終正確結果只有一個,錯誤的就是錯誤的,不會有相近的概念。最多見的分類方法是邏輯迴歸,或者叫邏輯分類。
############################################################
以下圖所示,咱們想要知道綠色點要被決定賦予哪一個類,是紅色三角形仍是藍色正方形?咱們利用KNN思想,若是假設K=3,選取三個距離最近的類別點,因爲紅色三角形所佔比例爲2/3,所以綠色點被賦予紅色三角形類別。若是假設K=5,因爲藍色正方形所佔比例爲3/5,所以綠色點被賦予藍色正方形類別。
從上面實例,咱們能夠總結下KNN算法過程
1.1. 計算測試數據與各個訓練數據之間的距離。
1.2. 按照距離的遞增關係進行排序,選取距離最小的K個點。
1.3. 肯定前K個點所在類別的出現頻率,返回前K個點中出現頻率最高的類別做爲測試數據的預測分類。
從KNN算法流程中,咱們也可以看出KNN算法三個重要特徵,即距離度量方式、K值的選取和分類決策規則。
1.1距離:
KNN算法經常使用歐式距離度量方式,固然咱們也能夠採用其餘距離度量方式,如曼哈頓距離
歐氏距離是最容易直觀理解的距離度量方法,兩個點在空間中的距離通常都是指歐氏距離。算法
1.2 K值的選取: KNN算法決策結果很大程度上取決於K值的選擇。選擇較小的K值至關於用較小領域中的訓練實例進行預測,訓練偏差會減少,但同時總體模型變得複雜,容易過擬合。選擇較大的K值至關於用較大領域中訓練實例進行預測,能夠減少泛化偏差,但同時總體模型變得簡單,預測偏差會增大。
1.3 分類決策規則:k值中對象們「投票」,哪類對象「投票」數多就屬於哪類,若是「投票」數同樣多,那麼隨機抽選出一個類。
2.1knn KD樹
咱們舉例來講明KD樹構建過程,假若有二維樣本6個,分別爲{(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},KD樹過程構建過程以下
2.1.1尋找劃分特徵: 6個數據點在x,y維度上方差分別爲6.97,5.37,x軸上方差更大,用x軸特徵建樹。
######################################################
方差或表達爲:
######################################################
2.1.2Node-data = (7,2)。具體是:根據x維上的值將數據排序,6個數據的中值(所謂 中值,即中間大小的值)爲7,因此Node-data域位數據點(7,2)。這樣,該節點的分割超平面就是經過(7,2)並垂直於:split=x軸的直線x=7
2.1.3左子空間和右子空間。具體是:分割超平面x=7將整個空間分爲兩部分:x<=7的部分爲左子空間,包含3個節點={(2,3),(5,4),(4,7)};另外一部分爲右子空間,包含2個節點={(9,6),(8,1)};
2.1.4遞歸構建KD樹:用一樣的方法劃分左子樹{(2,3),(5,4),(4,7)}和右子樹{(9,6),(8,1)},最終獲得KD樹。
如左子樹{(2,3),(5,4),(4,7)} x軸方差 2.3,y軸方差4.3,全部使用y軸進行分割
重複上面2.1,2.2,2.3 步驟 ,中值爲5.4
首先,粗黑線將空間一分爲二,而後在兩個子空間中,細黑直線又將整個空間劃分爲四部分,最後虛黑直線將這四部分進一步劃分。
網絡
2.2 KD樹搜索最近鄰
當咱們生成KD樹後,就能夠預測測試樣本集裏面的樣本目標點。
1 二叉搜索:對於目標點,經過二叉搜索,可以很快在KD樹裏面找到包含目標點的葉子節點。
2回溯:爲找到最近鄰,還須要進行回溯操做,算法沿搜索路徑反向查找是否有距離查詢點更近的數據點。以目標點爲圓心,目標點到葉子節點的距離爲半徑,獲得一個超球體,最鄰近點必定在這個超球體內部。
3更新最近鄰:返回葉子節點的父節點,檢查另外一葉子節點包含的超矩形體是否和超球體相交,若是相交就到這個子節點中尋找是否有更近的最近鄰,有的話就更新最近鄰。若是不相交就直接返回父節點的父節點,在另外一子樹繼續搜索最近鄰。當回溯到根節點時,算法結束,此時保存的最近鄰節點就是最終的最近鄰。
2.3KD樹預測
根據KD樹搜索最近鄰的方法,咱們可以獲得第一個最近鄰數據點,而後把它置爲已選。而後忽略置爲已選的樣本,從新選擇最近鄰,這樣運行K次,就能獲得K個最近鄰。若是是KNN分類,根據多數表決法,預測結果爲K個最近鄰類別中有最多類別數的類別。若是是KNN迴歸,根據平均法,預測結果爲K個最近鄰樣本輸出的平均值。
函數