**小狼狗的knn面試問題的總結
1.簡述一下knn演算法的原理
knn既可以用於分類,也可以用於回歸。本身沒有顯示的模型訓練,多數情況用於分類演算法。knn演算法我們主要要考慮三個重要的要素,對於固定的訓練集,只要這三點確定了,演算法的**方式也就決定了。這三個最終的要素是k值的選取,距離度量的方式和分類決策規則。
1,k值的選擇一般選擇乙個較小的值,這取決於資料量的大小和資料維度。通常k為3~10.一種常見的做法就是設定k等於訓練集中樣本數量的平方根。但是呢這個不一定有交叉驗 證出來的好,所以呀,資料量不大,在電腦可以跑得動的前提下還是乖乖用交叉驗證吧。
選擇較小的k值,就相當於用較小的領域中的訓練例項進行**,訓練誤差會減小,只有與輸入例項較近或相似的訓練例項才會對**結果起作用,與此同時帶來的問題是泛化誤差會增大,換句話說,k值的減小就意味著整體模型變得複雜,容易發生過擬合;
選擇較大的k值,就相當於用較大領域中的訓練例項進行**,其優點是可以減少泛化誤差,但缺點是訓練誤差會增大。這時候,與輸入例項較遠(不相似的)訓練例項也會對**器作用,使**發生錯誤,且k值的增大就意味著整體的模型變得簡單。
乙個極端是k等於樣本數m,則完全沒有分類,此時無論輸入例項是什麼,都只是簡單的**它屬於在訓練例項中最多的類,模型過於簡單。
2,距離度量的方式有很多,歐式距離是閔可夫斯基距離距離在p=2時的特例,而曼哈頓距離是p=1時的特例。不做詳細接招
3,決策規則,在分類中一般用投票,回歸中一般用均值。
knn的暴力破解法:在**樣本的時候,將計算**樣本和所有訓練集中的樣本的距離,然後計算出最小的k個距離即可,接著多數表決,很容易做出**。這個方法的確簡單直接,在樣本量少,樣本特徵少的時候有效。但是在實際運用中很多時候用不上,為什麼呢?因為我們經常碰到樣本的特徵數有上千以上,樣本量有幾十萬以上,如果我們這要去**少量的測試集樣本,演算法的時間效率很成問題。因此,這個方法我們一般稱之為蠻力實現。比較適合於少量樣本的簡單模型的時候用。
2.knn演算法有哪些優點和缺點?
優:1,該演算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種演算法比較容易產生誤分
2,由於knn方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,knn方法較其他方法更為適合
3,可用於非線性分類
4, 訓練時間複雜度比支援向量機之類的演算法低,僅為o(n)
5,和樸素貝葉斯之類的演算法比,對資料沒有假設,準確度高,對異常點不敏感
缺:1,計算量大,尤其是特徵數非常多的時候
2,樣本不平衡的時候,對稀有類別的**準確率低
3,kd樹,球樹之類的模型建立需要大量的記憶體
4,使用懶散學習方法,基本上不學習,導致**時速度比起邏輯回歸之類的演算法慢
5,相比決策樹模型,knn模型可解釋性不強
3.k-d樹實現原理
參考k近鄰法(knn)原理小結
缺點: 如果例項點是隨機分布的,那麼kd樹搜尋的平均計算複雜度是o(logn),這裡的n是訓練例項樹。所以說,kd樹更適用於訓練例項數遠大於空間維數時的k近鄰搜尋,當空間維數接近訓練例項數時,它的效率會迅速下降,一降降到「解放前」:線性掃瞄的速度。 也正因為上述k最近鄰搜尋演算法的第4個步驟中的所述:「回退到根結點時,搜尋結束」,每個最近鄰點的查詢比較完成過程最終都要回退到根結點而結束,而導致了許多不必要回溯訪問和比較到的結點,這些多餘的損耗在高維度資料查詢的時候,搜尋效率將變得相當之低下
4.基於k-d樹缺點改進的bbf演算法
bbf演算法是在k-d樹建立好的基礎上,在我們搜尋的過程中加入乙個佇列。
為了便於說明,這裡例乙個簡單的例子
以上面的查詢(2,4.5)為例,搜尋的演算法流程為:
1,將(7,2)壓人優先佇列中;
2,提取優先佇列中的(7,2),由於(2,4.5)位於(7,2)分割超平面的左側,所以檢索其左子結點(5,4)。同時,根據bbf機制」搜尋左/右子樹,就把對應這一層的兄弟結點即右/左結點存進佇列」,將其(5,4)對應的兄弟結點即右子結點(9,6)壓人優先佇列中,此時優先隊列為,最佳點為(7,2);然後一直檢索到葉子結點(4,7),此時優先隊列為,「最佳點」則為(5,4);
3,提取優先順序最高的結點(2,3),重複步驟2,直到優先隊列為空。
5.不平衡的樣本可以給knn的**結果造成哪些問題,有沒有什麼好的解決方式?
6.為了解決knn演算法計算量過大的問題,可以使用分組的方式進行計算,簡述一下該方式的原理。
7.kd樹建立過程中切分維度的順序是否可以優化?
可以先對每一維度求方差,方差大說明資料分布越分散,則從方差大的維度來逐步切分,可以取得更好的切分效果及樹的平衡性。
8.kd樹每一次繼續切分都要計算該子區間在需切分維度上的中值,計算量很大,有什麼方法可以對其進行優化?
在構建kd樹前,依據每一維度先排序,在之後的切分中直接使用
9.為了防止某一維度的資料較大(50,100),而另外一維度的資料較小(0.1,0.2)而產生的距離計算的問題,需要進行歸一化。
10.knn總結
11.簡述knn最近鄰分類演算法的過程?
機器學習面試題之KNN
1.簡述一下knn演算法的原理 knn演算法利用訓練資料集對特徵向量空間進行劃分。knn演算法的核心思想是在乙個含未知樣本的空間,可以根據樣本最近的k個樣本的資料型別來確定未知樣本的資料型別。該演算法涉及的3個主要因素是 k值選擇,距離度量,分類決策。2.如何理解knn中的k的取值?選取較小的k值時...
面試題之六
什麼是tcp連線的三次握手?第一次握手 客戶端傳送syn包 syn j 到伺服器,並進入syn send狀態,等待伺服器確認 第二次握手 伺服器收到syn包,必須確認客戶的syn ack j 1 同時自己也傳送乙個syn包 syn k 即syn ack包,此時伺服器進入syn recv狀態 第三次握...
機器學習面試題
答 設計乙個分類模型,首先要給它設定乙個學習目標。在支援向量機中,這個目標是max margin 在adaboost中,目標是優化乙個指數損失函式。那麼在logistic regression lr 中,這個目標是什麼呢?最大化條件似然度。考慮乙個二值分類問題,訓練資料是一堆 特徵,標記 組合,x1...