簡單說明sklearn KNN 演算法差異
2023 年 4 月 20 日
sklearn.neighbors.NearestNeighbors
這次的主題 https://scikit-learn.org/stable/modules/generated/sklearn.neighbors.NearestNeighbors.html
Scikit-learn中k近傍演算法(K-Nearest Neighbors, KNN)的參數algorithm的說明。KNN是一種監督式學習的演算法,用於分類和回歸問題。在KNN中,將新的樣本與訓練集中的所有樣本進行距離計算,選擇與新樣本最近的k個樣本,然後根據這k個樣本的標籤進行分類或回歸預測。
在Scikit-learn的KNeighborsClassifier和KNeighborsRegressor中,algorithm參數控制用於在訓練數據中搜尋最近鄰居的算法,具體選擇哪個算法取決於樣本數量、維度和稀疏度等因素。
KNN會根據最接近的K個已知樣本,來預測新樣本的類別。
以下是這些演算法的詳細說明:
- BallTree:Ball Tree是一種根據球形體積(Ball)來組織數據的數據結構,可以用來搜索最近鄰。BallTree相比於Brute-Force搜索,可以在高維度數據集上更快地找到最近鄰,但在低維數據集上表現較差。
- KDTree:KDTree是一種用於搜索k維空間的數據結構,能夠快速搜索最近鄰。KDTree通過將數據集劃分為多個子區域,進而生成一棵二叉樹,然後利用這棵樹來快速搜索最近鄰。與BallTree相比,在低維數據集上表現較好,在高維數據集上則表現較差。
- Brute-Force:Brute-Force搜索是一種暴力搜索的方法,它將所有樣本進行比較,找到最接近的樣本。在數據集較小的時候,Brute-Force搜索是一種有效的方法,但在大型數據集上表現較差。
- Auto:Auto根據數據集的大小和維度,自動選擇最佳的算法。Auto算法通常在大多數情況下都能夠選擇出最適合的算法,因此是一個方便的選擇。
總體來說,BallTree和KDTree都比Brute-Force搜索快,但在不同維度和數據集大小的情況下表現有所不同。Auto算法可以自動選擇最佳的算法,因此是一個方便的選擇。因此,選擇哪種演算法取決於您的數據集大小和維度。