kNN -?K-nearest neighbor 定義
kNN(即 k 最近鄰算法)是一種機(jī)器學(xué)習(xí)算法,它使用鄰近度將一個(gè)數(shù)據(jù)點(diǎn)與其訓(xùn)練并記憶的一組數(shù)據(jù)進(jìn)行比較以進(jìn)行預(yù)測。 這種基于實(shí)例的學(xué)習(xí)為 kNN 提供了 “惰性學(xué)習(xí)(lazy learning)” 名稱,并使算法能夠執(zhí)行分類或回歸問題。 kNN 的假設(shè)是相似的點(diǎn)可以在彼此附近找到 —— 物以類聚。
作為一種分類算法,kNN 將新數(shù)據(jù)點(diǎn)分配給其鄰居中的多數(shù)集。 作為一種回歸算法,kNN 根據(jù)最接近查詢點(diǎn)的值的平均值進(jìn)行預(yù)測。
kNN 是一種監(jiān)督學(xué)習(xí)算法,其中 “k” 代表分類或回歸問題中考慮的最近鄰的數(shù)量,“NN”代表為 k 選擇的數(shù)量的最近鄰。
kNN 算法簡史
kNN 最初由 Evelyn Fix 和 Joseph Hodges 于 1951 年在為美國軍方進(jìn)行的研究中開發(fā)。 他們發(fā)表了一篇解釋判別分析的論文,這是一種非參數(shù)分類方法。 1967 年,Thomas Cover 和 Peter Hart 對(duì)非參數(shù)分類方法進(jìn)行了擴(kuò)展,并發(fā)表了他們的 “最近鄰模式分類” 論文。 大約 20 年后,詹姆斯·凱勒 (James Keller) 對(duì)該算法進(jìn)行了改進(jìn),他開發(fā)了一種 “模糊 KNN”,可以產(chǎn)生較低的錯(cuò)誤率。
如今,kNN 算法是使用最廣泛的算法,因?yàn)樗m用于從遺傳學(xué)到金融和客戶服務(wù)的大多數(shù)領(lǐng)域。
kNN 是如何工作的?
kNN 算法作為一種監(jiān)督學(xué)習(xí)算法,這意味著它會(huì)被輸入它記憶的訓(xùn)練數(shù)據(jù)集。 它依賴于這個(gè)標(biāo)記的輸入數(shù)據(jù)來學(xué)習(xí)一個(gè)函數(shù),該函數(shù)在給定新的未標(biāo)記數(shù)據(jù)時(shí)產(chǎn)生適當(dāng)?shù)妮敵觥?/p>
這使得算法能夠解決分類或回歸問題。 雖然 kNN 的計(jì)算發(fā)生在查詢期間而不是訓(xùn)練階段,但它具有重要的數(shù)據(jù)存儲(chǔ)要求,因此嚴(yán)重依賴內(nèi)存。
對(duì)于分類問題,KNN 算法將根據(jù)多數(shù)分配類標(biāo)簽,這意味著它將使用給定數(shù)據(jù)點(diǎn)周圍最常出現(xiàn)的標(biāo)簽。 換句話說,分類問題的輸出是最近鄰的眾數(shù)。
區(qū)別:多數(shù)投票與相對(duì)多數(shù)投票
多數(shù)投票(majority voting)表示超過 50% 的票數(shù)為多數(shù)。 如果考慮兩個(gè)類標(biāo)簽,則這適用。 但是,如果考慮多個(gè)類別標(biāo)簽,則適用相對(duì)多數(shù)投票(plurality voting)。 在這些情況下,超過 33.3% 的任何值都足以表示多數(shù),從而提供預(yù)測。 因此,相對(duì)多數(shù)投票(plurality voting)是定義 kNN 模式的更準(zhǔn)確術(shù)語。
如果我們要說明這種區(qū)別:
二元預(yù)測
Y: ????????????????
多數(shù)投票: ??
相對(duì)多少投票: ??
多類別設(shè)置
Y: ?????????????????
多數(shù)投票:沒有
相對(duì)多數(shù)投票:??
回歸問題使用最近鄰的平均值來預(yù)測分類。 回歸問題將產(chǎn)生實(shí)數(shù)作為查詢輸出。
例如,如果你要制作一個(gè)圖表來根據(jù)某人的身高來預(yù)測其體重,則表示身高的值將是獨(dú)立的,而體重的值將是相關(guān)的。 通過計(jì)算平均身高體重比,你可以根據(jù)某人的身高(自變量)估計(jì)其體重(因變量)。
4 種計(jì)算 kNN 距離度量的類型
kNN 算法的關(guān)鍵是確定查詢點(diǎn)與其他數(shù)據(jù)點(diǎn)之間的距離。 確定距離度量可以實(shí)現(xiàn)決策邊界。 這些邊界創(chuàng)建不同的數(shù)據(jù)點(diǎn)區(qū)域。 有不同的方法用于計(jì)算距離:
- 歐幾里得距離(Euclidean distance)是最常見的距離度量,它測量查詢點(diǎn)和其他被測量點(diǎn)之間的直線。
- 曼哈頓距離(Manhattan distance?)也是一種流行的距離度量,它度量兩點(diǎn)之間的絕對(duì)值。 它以網(wǎng)格表示,通常稱為出租車幾何形狀 - 如何從 A 點(diǎn)(你的查詢點(diǎn))行駛到 B 點(diǎn)(被測量點(diǎn))?
- 閔可夫斯基距離(Minkowski distance)是歐幾里得距離度量和曼哈頓距離度量的推廣,它可以創(chuàng)建其他距離度量。 它是在賦范向量空間中計(jì)算的。 在 Minkowski 距離中,p 是定義計(jì)算中使用的距離類型的參數(shù)。 如果 p=1,則使用曼哈頓距離。 如果 p=2,則使用歐幾里德距離。
- 漢明距離(Hamming distance),也稱為重疊度量,是一種與布爾向量或字符串向量一起使用的技術(shù),用于識(shí)別向量不匹配的位置。 換句話說,它測量兩個(gè)長度相等的字符串之間的距離。 它對(duì)于錯(cuò)誤檢測和糾錯(cuò)碼特別有用。
如何選擇最佳的 k 值
要選擇最佳 k 值(考慮的最近鄰的數(shù)量),你必須嘗試幾個(gè)值,以找到能夠生成最準(zhǔn)確的預(yù)測且誤差最少的 k 值。 確定最佳值是一種平衡行為:
-
低 k 值會(huì)使預(yù)測不穩(wěn)定
- 舉個(gè)例子:一個(gè)查詢點(diǎn)被 2 個(gè)綠點(diǎn)和 1 個(gè)紅色三角形包圍。 如果 k=1 并且最接近查詢點(diǎn)的點(diǎn)恰好是綠點(diǎn)之一,則算法將錯(cuò)誤地將綠點(diǎn)預(yù)測為查詢結(jié)果。 低 k 值意味著高方差(模型與訓(xùn)練數(shù)據(jù)擬合得太緊密)、高復(fù)雜性和低偏差(模型足夠復(fù)雜,可以很好地?cái)M合訓(xùn)練數(shù)據(jù))。
-
高 k 值有噪音
- 較高的 k 值將提高預(yù)測的準(zhǔn)確性,因?yàn)樾枰?jì)算眾數(shù)或平均值的數(shù)量更多。 但是,如果 k 值太高,則可能會(huì)導(dǎo)致低方差、低復(fù)雜性和高偏差(模型不夠復(fù)雜,無法很好地?cái)M合訓(xùn)練數(shù)據(jù))。
理想情況下,你希望找到一個(gè)介于高方差和高偏差之間的 k 值。 還建議為 k 選擇奇數(shù),以避免分類分析中出現(xiàn)平局。
正確的 k 值也與你的數(shù)據(jù)集相關(guān)。 要選擇該值,你可以嘗試查找 N 的平方根,其中 N 是訓(xùn)練數(shù)據(jù)集中的數(shù)據(jù)點(diǎn)數(shù)量。 交叉驗(yàn)證策略還可以幫助你選擇最適合你的數(shù)據(jù)集的 k 值。
kNN算法的優(yōu)點(diǎn)
kNN 算法通常被描述為 “最簡單” 的監(jiān)督學(xué)習(xí)算法,這導(dǎo)致了它的幾個(gè)優(yōu)點(diǎn):
- 簡單:kNN 非常簡單且準(zhǔn)確,因此很容易實(shí)現(xiàn)。 因此,它通常是數(shù)據(jù)科學(xué)家首先要學(xué)習(xí)的分類器之一。
- 適應(yīng)性強(qiáng):一旦將新的訓(xùn)練樣本添加到數(shù)據(jù)集中,kNN 算法就會(huì)調(diào)整其預(yù)測以包含新的訓(xùn)練數(shù)據(jù)。
- 易于編程:kNN 僅需要幾個(gè)超參數(shù) - k 值和距離度量。 這使得它成為一個(gè)相當(dāng)簡單的算法。
此外,kNN 算法不需要訓(xùn)練時(shí)間,因?yàn)樗鎯?chǔ)訓(xùn)練數(shù)據(jù),并且僅在進(jìn)行預(yù)測時(shí)使用其計(jì)算能力。
kNN 的挑戰(zhàn)和局限性
雖然 kNN 算法很簡單,但它也存在一系列挑戰(zhàn)和限制,部分原因在于它的簡單性:
- 難以擴(kuò)展:由于 kNN 占用大量內(nèi)存和數(shù)據(jù)存儲(chǔ),因此帶來了與存儲(chǔ)相關(guān)的費(fèi)用。 這種對(duì)內(nèi)存的依賴也意味著該算法是計(jì)算密集型的,這反過來又是資源密集型的。
- 維數(shù)災(zāi)難:這是指計(jì)算機(jī)科學(xué)中發(fā)生的一種現(xiàn)象,其中一組固定的訓(xùn)練示例受到維度數(shù)量不斷增加以及這些維度中特征值固有增加的挑戰(zhàn)。 換句話說,模型的訓(xùn)練數(shù)據(jù)無法跟上超空間維度的演變。 這意味著預(yù)測變得不太準(zhǔn)確,因?yàn)椴樵凕c(diǎn)和相似點(diǎn)之間的距離在其他維度上變得更寬。
- 過度擬合:如前所述,k 的值將影響算法的行為。 當(dāng) k 值太低時(shí)尤其可能發(fā)生這種情況。 較低的 k 值可能會(huì)過度擬合數(shù)據(jù),而較高的 k 值會(huì) “平滑” 預(yù)測值,因?yàn)樗惴〞?huì)在更大的區(qū)域內(nèi)對(duì)值進(jìn)行平均。
頂級(jí) kNN 用例
kNN 算法因其簡單性和準(zhǔn)確性而廣受歡迎,具有多種應(yīng)用,特別是用于分類分析時(shí)。
- 相關(guān)性排名:kNN 使用自然語言處理 (NLP) 算法來確定哪些結(jié)果與查詢最相關(guān)。
- 圖像或視頻的相似性搜索:圖像相似性搜索使用自然語言描述來查找與文本查詢匹配的圖像。
- 模式識(shí)別:kNN 可用于識(shí)別文本或數(shù)字分類中的模式。
- 金融:在金融領(lǐng)域,kNN可以用于股市預(yù)測、貨幣匯率等。
- 產(chǎn)品推薦和推薦引擎:想想 Netflix! “如果你喜歡這個(gè),我們認(rèn)為你也會(huì)喜歡……” 任何使用該句子版本的網(wǎng)站,無論是否公開,都可能使用 kNN 算法來為其推薦引擎提供動(dòng)力。
- 醫(yī)療保健:在醫(yī)學(xué)和醫(yī)學(xué)研究領(lǐng)域,kNN算法可用于遺傳學(xué)中計(jì)算某些基因表達(dá)的概率。 這使得醫(yī)生能夠預(yù)測癌癥、心臟病或任何其他遺傳性疾病的可能性。
- 數(shù)據(jù)預(yù)處理:kNN 算法可用于估計(jì)數(shù)據(jù)集中的缺失值。
使用 Elastic 進(jìn)行 kNN 搜索
Elasticsearch 使你能夠?qū)崿F(xiàn) kNN 搜索。 支持兩種方法:近似 kNN(approximate kNN)和精確(exact)、強(qiáng)力 kNN(brute-force)。 你可以在相似性搜索、基于 NLP 算法的相關(guān)性排名以及產(chǎn)品推薦和推薦引擎的上下文中使用 kNN 搜索。
使用 Elastic 實(shí)現(xiàn) kNN 搜索
K-最近鄰常見問題解答
何時(shí)使用 kNN?
使用 kNN 根據(jù)相似性進(jìn)行預(yù)測。 因此,你可以使用 kNN 在自然語言處理算法的上下文中進(jìn)行相關(guān)性排名、相似性搜索和推薦引擎或產(chǎn)品推薦。 請(qǐng)注意,當(dāng)數(shù)據(jù)集相對(duì)較小時(shí),kNN 非常有用。
kNN 是有監(jiān)督機(jī)器學(xué)習(xí)還是無監(jiān)督機(jī)器學(xué)習(xí)?
kNN 是監(jiān)督機(jī)器學(xué)習(xí)。 它被提供一組它存儲(chǔ)的數(shù)據(jù),并且僅在查詢時(shí)處理數(shù)據(jù)。
kNN 代表什么?
kNN 代表 k-近鄰算法,其中 k 表示分析中考慮的最近鄰的數(shù)量。
接下來你應(yīng)該做什么
只要你準(zhǔn)備好...我們可以通過以下 4 種方式幫助你將數(shù)據(jù)引入你的業(yè)務(wù):
- 開始免費(fèi)試用,看看 Elastic 如何幫助你的業(yè)務(wù)。
- 瀏覽我們的解決方案,了解 Elasticsearch 平臺(tái)的工作原理以及我們的解決方案如何滿足你的需求。
- 通過我們 45 分鐘的網(wǎng)絡(luò)研討會(huì),了解如何設(shè)置 Elasticsearch 集群并開始數(shù)據(jù)收集和攝取。
- 與你認(rèn)識(shí)并喜歡閱讀本文的人分享這篇文章。 通過電子郵件、LinkedIn、Twitter 或 Facebook 與他們分享。
更多閱讀:
-
Elasticsearch:介紹 kNN query,這是進(jìn)行 kNN 搜索的專家方法
-
Elasticsearch:探索 k-nearest neighbor (kNN) 搜索文章來源:http://www.zghlxwxcb.cn/news/detail-831104.html
-
增強(qiáng)常見問題解答搜索引擎:在 Elasticsearch 中利用 KNN 的力量文章來源地址http://www.zghlxwxcb.cn/news/detail-831104.html
到了這里,關(guān)于Elasticsearch:什么是 kNN?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!