Classification
為什麼我們需要擬合 k 最近鄰分類器?
據我了解,k-NN 是一種惰性學習算法,不需要訓練階段。那麼為什麼我們需要使用
.fit()
sklearn 以及使用它時會發生什麼?
在概念層面
擬合分類器意味著將數據集作為輸入,然後輸出一個分類器,該分類器是從可能的分類器空間中選擇的。在許多情況下,分類器是通過一組參數來識別的——也就是說,與其他可能的分類器區分開來。通常通過解決優化問題或其他一些數值程序來選擇參數。但是,在 knn 的情況下,分類器由訓練數據本身標識。因此,在抽象層面上,擬合 knn 分類器只需要存儲訓練集。
在執行層面
在新數據點上評估 knn 分類器需要在訓練集中搜索其最近的鄰居,當訓練集很大時,這可能是一項昂貴的操作。正如 RUser 所提到的,有多種技巧可以加快搜索速度,通常通過基於訓練集創建各種數據結構來工作。總體思路是,對新點進行分類所需的一些計算工作實際上是跨點通用的。因此,這項工作可以提前完成,然後重複使用,而不是為每個新實例重複。使用這些技巧的 knn 實現將在訓練階段完成這項工作。例如,scikit-learn 可以在調用
fit()
函數期間構造 kd 樹或球樹。選擇和距離度量
鄰居數距離度量是 knn 分類器的超參數。通常可以通過選擇它們來適應問題來提高性能。但是,最佳設置通常不會提前知道,我們必須在訓練過程中搜索它們。這種搜索相當於解決優化問題,類似於其他方法的超參數調整。