chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

數(shù)據(jù)科學經(jīng)典算法 KNN 已被嫌慢,ANN 比它快 380 倍

工程師鄧生 ? 來源:towardsdatascience ? 作者:Marie Stephen Leo ? 2021-01-02 09:08 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

數(shù)據(jù)科學經(jīng)典算法 KNN 已被嫌慢,ANN 比它快 380 倍。

在模式識別領域中,K - 近鄰算法(K-Nearest Neighbor, KNN)是一種用于分類和回歸的非參數(shù)統(tǒng)計方法。K - 近鄰算法非常簡單而有效,它的模型表示就是整個訓練數(shù)據(jù)集。就原理而言,對新數(shù)據(jù)點的預測結果是通過在整個訓練集上搜索與該數(shù)據(jù)點最相似的 K 個實例(近鄰)并且總結這 K 個實例的輸出變量而得出的。KNN 可能需要大量的內(nèi)存或空間來存儲所有數(shù)據(jù),并且使用距離或接近程度的度量方法可能會在維度非常高的情況下(有許多輸入變量)崩潰,這可能會對算法在你的問題上的性能產(chǎn)生負面影響。這就是所謂的維數(shù)災難。

近似最近鄰算法(Approximate Nearest Neighbor, ANN)則是一種通過犧牲精度來換取時間和空間的方式從大量樣本中獲取最近鄰的方法,并以其存儲空間少、查找效率高等優(yōu)點引起了人們的廣泛關注。

近日,一家技術公司的數(shù)據(jù)科學主管 Marie Stephen Leo 撰文對 KNN 與 ANN 進行了比較,結果表明,在搜索到最近鄰的相似度為 99.3% 的情況下,ANN 比 sklearn 上的 KNN 快了 380 倍。

a2e271361afb4c5889683a90ecfef23a.png

作者表示,幾乎每門數(shù)據(jù)科學課程中都會講授 KNN 算法,但它正在走向「淘汰」!

KNN 簡述

機器學習社區(qū)中,找到給定項的「K」個相似項被稱為相似性搜索或最近鄰(NN)搜索。最廣為人知的 NN 搜索算法是 KNN 算法。在 KNN 中,給定諸如手機電商目錄之類的對象集合,則對于任何新的搜索查詢,我們都可以從整個目錄中找到少量(K 個)最近鄰。例如,在下面示例中,如果設置 K = 3,則每個「iPhone」的 3 個最近鄰是另一個「iPhone」。同樣,每個「Samsung」的 3 個最近鄰也都是「Samsung」。

3fdca620b30d40bca1be80fa1b392cb8.png

KNN 存在的問題

盡管 KNN 擅長查找相似項,但它使用詳細的成對距離計算來查找鄰居。如果你的數(shù)據(jù)包含 1000 個項,如若找出新產(chǎn)品的 K=3 最近鄰,則算法需要對數(shù)據(jù)庫中所有其他產(chǎn)品執(zhí)行 1000 次新產(chǎn)品距離計算。這還不算太糟糕,但是想象一下,現(xiàn)實世界中的客戶對客戶(Customer-to-Customer,C2C)市場,其中的數(shù)據(jù)庫包含數(shù)百萬種產(chǎn)品,每天可能會上傳數(shù)千種新產(chǎn)品。將每個新產(chǎn)品與全部數(shù)百萬種產(chǎn)品進行比較是不劃算的,而且耗時良久,也就是說這種方法根本無法擴展。

解決方案

將最近鄰算法擴展至大規(guī)模數(shù)據(jù)的方法是徹底避開暴力距離計算,使用 ANN 算法。

近似最近距離算法(ANN)

嚴格地講,ANN 是一種在 NN 搜索過程中允許少量誤差的算法。但在實際的 C2C 市場中,真實的鄰居數(shù)量比被搜索的 K 近鄰數(shù)量要多。與暴力 KNN 相比,人工神經(jīng)網(wǎng)絡可以在短時間內(nèi)獲得卓越的準確性。ANN 算法有以下幾種:

Spotify 的 ANNOY

Google 的 ScaNN

Facebook 的 Faiss

HNSW

分層的可導航小世界(Hierarchical Navigable Small World, HNSW)

在 HNSW 中,作者描述了一種使用多層圖的 ANN 算法。在插入元素階段,通過指數(shù)衰減概率分布隨機選擇每個元素的最大層,逐步構建 HNSW 圖。這確保 layer=0 時有很多元素能夠?qū)崿F(xiàn)精細搜索,而 layer=2 時支持粗放搜索的元素數(shù)量少了 e^-2。最近鄰搜索從最上層開始進行粗略搜索,然后逐步向下處理,直至最底層。使用貪心圖路徑算法遍歷圖,并找到所需鄰居數(shù)量。

7666da0523e947aa9d1330d5e601650d.png

HNSW 圖結構。最近鄰搜索從最頂層開始(粗放搜索),在最底層結束(精細搜索)。

HNSW Python

整個 HNSW 算法代碼已經(jīng)用帶有 Python 綁定的 C++ 實現(xiàn)了,用戶可以通過鍵入以下命令將其安裝在機器上:pip install hnswlib。安裝并導入軟件包之后,創(chuàng)建 HNSW 圖需要執(zhí)行一些步驟,這些步驟已經(jīng)被封裝到了以下函數(shù)中:

importhnswlib importnumpy asnpdef fit_hnsw_index(features, ef= 100, M= 16, save_index_file= False): # Convenience function to create HNSW graph # features : list of lists containing the embeddings # ef, M: parameters to tune the HNSW algorithm num_elements = len(features) labels_index = np.arange(num_elements) EMBEDDING_SIZE = len(features[ 0]) # Declaring index # possible space options are l2, cosine or ip p = hnswlib.Index(space= ‘l2’, dim=EMBEDDING_SIZE) # Initing index - the maximum number of elements should be known p.init_index(max_elements=num_elements, ef_construction=ef, M=M) # Element insertion int_labels = p.add_items(features, labels_index) # Controlling the recall by setting ef # ef should always be 》 k p.set_ef(ef) # If you want to save the graph to a file ifsave_index_file: p.save_index(save_index_file) returnp

創(chuàng)建 HNSW 索引后,查詢「K」個最近鄰就僅需以下這一行代碼:

ann_neighbor_indices, ann_distances = p.knn_query(features, k)

KNN 和 ANN 基準實驗

計劃

首先下載一個 500K + 行的大型數(shù)據(jù)集。然后將使用預訓練 fasttext 句子向量將文本列轉(zhuǎn)換為 300d 嵌入向量。然后將在不同長度的輸入數(shù)據(jù) [1000. 10000, 100000, len(data)] 上訓練 KNN 和 HNSW ANN 模型,以度量數(shù)據(jù)大小對速度的影響。最后將查詢兩個模型中的 K=10 和 K=100 時的最近鄰,以度量「K」對速度的影響。首先導入必要的包和模型。這需要一些時間,因為需要從網(wǎng)絡上下載 fasttext 模型。

# Imports # For input data pre-processing importjson importgzip importpandas aspd importnumpy asnp importmatplotlib.pyplot asplt importfasttext.util fasttext.util.download_model( ‘en’, if_exists= ‘ignore’) # English pre-trained model ft = fasttext.load_model( ‘cc.en.300.bin’) # For KNN vs ANN benchmarking fromdatetime importdatetime fromtqdm importtqdm fromsklearn.neighbors importNearestNeighbors importhnswlib

數(shù)據(jù)

使用亞[馬遜產(chǎn)品數(shù)據(jù)集],其中包含「手機及配件」類別中的 527000 種產(chǎn)品。然后運行以下代碼將其轉(zhuǎn)換為數(shù)據(jù)框架。記住僅需要產(chǎn)品 title 列,因為將使用它來搜索相似的產(chǎn)品。

# Data: http://deepyeti.ucsd.edu/jianmo/amazon/ data = [] withgzip.open( ‘meta_Cell_Phones_and_Accessories.json.gz’) asf: forl inf: data.append(json.loads(l.strip)) # Pre-Processing: https://colab.research.google.com/drive/1Zv6MARGQcrBbLHyjPVVMZVnRWsRnVMpV#scrollTo=LgWrDtZ94w89 # Convert list into pandas dataframe df = pd.DataFrame.from_dict( data) df.fillna( ‘’, inplace= True) # Filter unformatted rows df = df[~df.title.str.contains( ‘getTime’)] # Restrict to just ‘Cell Phones and Accessories’ df = df[df[ ‘main_cat’]== ‘Cell Phones & Accessories’] # Reset index df.reset_index(inplace= True, drop= True) # Only keep the title columns df = df[[ ‘title’]] # Check the df print(df.shape) df.head

如果全部都可以運行精細搜索,你將看到如下輸出:

e76823475ea0447c8dab3b17ecbb982b.png

亞馬遜產(chǎn)品數(shù)據(jù)集。

嵌入

要對文本數(shù)據(jù)進行相似性搜索,則必須首先將其轉(zhuǎn)換為數(shù)字向量。一種快速便捷的方法是使用經(jīng)過預訓練的網(wǎng)絡嵌入層,例如 Facebook [FastText] 提供的嵌入層。由于希望所有行都具有相同的長度向量,而與 title 中的單詞數(shù)目無關,所以將在 df 中的 title 列調(diào)用 get_sentence_vector 方法。

嵌入完成后,將 emb 列作為一個 list 輸入到 NN 算法中。理想情況下可以在此步驟之前進行一些文本清理預處理。同樣,使用微調(diào)的嵌入模型也是一個好主意。

# Title Embedding using FastText Sentence Embedding df[ ‘emb’] = df[ ‘title’].apply(ft.get_sentence_vector) # Extract out the embeddings column as a list of lists for input to our NN algos X = [item.tolist foritem indf[ ‘emb’].values]

基準

有了算法的輸入,下一步進行基準測試。具體而言,在搜索空間中的產(chǎn)品數(shù)量和正在搜索的 K 個最近鄰之間進行循環(huán)測試。在每次迭代中,除了記錄每種算法的耗時以外,還要檢查 pct_overlap,因為一定比例的 KNN 最近鄰也被挑選為 ANN 最近鄰。

注意整個測試在一臺全天候運行的 8 核、30GB RAM 機器上運行大約 6 天,這有些耗時。理想情況下,你可以通過多進程來加快運行速度,因為每次運行都相互獨立。

# Number of products for benchmark loop n_products = [ 1000, 10000, 100000, len(X)] # Number of neighbors for benchmark loop n_neighbors = [ 10, 100] # Dictionary to save metric results for each iteration metrics = { ‘products’:[], ‘k’:[], ‘knn_time’:[], ‘a(chǎn)nn_time’:[], ‘pct_overlap’:[]} forproducts intqdm(n_products): # “products” number of products included in the search space features = X[ :products] fork intqdm(n_neighbors): # “K” Nearest Neighbor search # KNN knn_start = datetime.now nbrs = NearestNeighbors(n_neighbors=k, metric= ‘euclidean’).fit(features) knn_distances, knn_neighbor_indices = nbrs.kneighbors(X) knn_end = datetime.now metrics[ ‘knn_time’].append((knn_end - knn_start).total_seconds) # HNSW ANN ann_start = datetime.now p = fit_hnsw_index(features, ef=k* 10) ann_neighbor_indices, ann_distances = p.knn_query(features, k) ann_end = datetime.now metrics[ ‘a(chǎn)nn_time’].append((ann_end - ann_start).total_seconds) # Average Percent Overlap in Nearest Neighbors across all “products” metrics[ ‘pct_overlap’].append(np.mean([len(np.intersect1d(knn_neighbor_indices[i], ann_neighbor_indices[i]))/k fori inrange(len(features))])) metrics[ ‘products’].append(products) metrics[ ‘k’].append(k) metrics_df = pd.DataFrame(metrics) metrics_df.to_csv( ‘metrics_df.csv’, index=False) metrics_df

運行結束時輸出如下所示。從表中已經(jīng)能夠看出,HNSW ANN 完全超越了 KNN。

2ae31eb61e2443cd9a11c5262fd24267.png

以表格形式呈現(xiàn)的結果。

結果

以圖表的形式查看基準測試的結果,以真正了解二者之間的差異,其中使用標準的 matplotlib 代碼來繪制這些圖表。這種差距是驚人的。根據(jù)查詢 K=10 和 K=100 最近鄰所需的時間,HNSW ANN 將 KNN 徹底淘汰。當搜索空間包含約 50 萬個產(chǎn)品時,在 ANN 上搜索 100 個最近鄰的速度是 KNN 的 380 倍,同時兩者搜索到最近鄰的相似度為 99.3%。

72f62f2539154d1ab460c64bf2f653c4.png

在搜索空間包含 500K 個元素,搜索空間中每個元素找到 K=100 最近鄰時,HNSW ANN 的速度比 Sklearn 的 KNN 快 380 倍。

0203f1a11cb044cfa5f81724957cc9a1.png

在搜索空間包含 500K 個元素,搜索空間中每個元素找到 K=100 最近鄰時,HNSW ANN 和 KNN 搜索到最近鄰的相似度為 99.3%。

基于以上結果,作者認為可以大膽地說:「KNN 已死」。

責任編輯:PSY

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)

    關注

    8

    文章

    7317

    瀏覽量

    94108
  • 算法
    +關注

    關注

    23

    文章

    4763

    瀏覽量

    97287
  • KNN
    KNN
    +關注

    關注

    0

    文章

    22

    瀏覽量

    11165
  • ANN
    ANN
    +關注

    關注

    0

    文章

    23

    瀏覽量

    9467
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    AI算法開發(fā),SpeedDP打輔助!不止10效率

    。而那些能夠帶來10工作效率的AI自然能夠輕松取代人類。當然這也是相對的,不是每個領域都適用,廚師再快,也無法讓實物10熟;醫(yī)生再優(yōu)秀,也不可能讓病人10
    的頭像 發(fā)表于 11-20 18:09 ?412次閱讀
    AI<b class='flag-5'>算法</b>開發(fā),SpeedDP打輔助!不止10<b class='flag-5'>倍</b>效率

    450000000!超導量子計算機“天衍-287”建成

    平臺誕生,處理特定問題的速度較當前最快超級計算機4.5億,成為全球量子計算實用化進程中的關鍵里程碑。 ? ? “天衍-287”的核心競爭力源于其量子計算優(yōu)越性。所謂量子計算優(yōu)越性,是指量子計算系統(tǒng)特定任務上展現(xiàn)出遠超經(jīng)典超級
    的頭像 發(fā)表于 11-18 08:40 ?8215次閱讀
    <b class='flag-5'>快</b>450000000<b class='flag-5'>倍</b>!超導量子計算機“天衍-287”建成

    谷歌芯片實現(xiàn)量子計算新突破,比超算13000

    在特定任務上的運行速度比傳統(tǒng)超級計算機13000,并且這種算法可以在類似平臺上得到重現(xiàn)。 ? 量子比特極易受到環(huán)境干擾,導致計算錯誤,這成為量子計算走向?qū)嵱玫囊淮笞璧K。而谷歌的Willow芯片成功實現(xiàn)了低于表面碼閾值的量子糾
    的頭像 發(fā)表于 10-27 06:51 ?9186次閱讀

    加密算法的應用

    加密算法和非對稱加密算法兩類。 對稱加密是一種加密方式,也稱為共享密鑰加密。加密和解密使用同一個密鑰。這種加密算法的優(yōu)點是加密和解密速度,適用于數(shù)
    發(fā)表于 10-24 08:03

    今日看點:谷歌芯片實現(xiàn)量子計算比經(jīng)典超算13000;NFC 技術突破:讀取距離從 5 毫米提升至 20 毫米

    谷歌芯片實現(xiàn)量子計算比經(jīng)典超算13000 近日,谷歌在《自然》雜志披露與Willow芯片相關的量子計算突破性研究成果。該公司稱這是歷史上首次證明量子計算機可以在硬件上成功運行一項可驗證算法
    發(fā)表于 10-23 10:20 ?1262次閱讀

    【「AI芯片:科技探索與AGI愿景」閱讀體驗】+AI的科學應用

    AI被賦予了人的智能,科學家們希望在沒有人類的引導下,AI自主的提出科學假設,諾貝爾獎級別的假設哦。 AI驅(qū)動科學被認為是科學發(fā)現(xiàn)的第五個范式了,與實驗
    發(fā)表于 09-17 11:45

    HUSB380B:零外圍雙Buck 2C和2C1A,功率分配So Easy!

    慧能泰推出的HUSB380B的玩法有很多,其中一個就是支持級聯(lián)功能??赏ㄟ^2個HUSB380B級聯(lián)實現(xiàn)雙Type-C口固定分配功率,例如實現(xiàn)單插65W、雙口同插45W+20W,或者單插45W、雙口同
    發(fā)表于 08-13 13:22

    慧能泰零外圍USB Type-C PD充芯片HUSB380B介紹

    答案就在今天要介紹給大家的神器——零外圍USB Type-C PD充芯片HUSB380B里!
    的頭像 發(fā)表于 07-18 14:11 ?1331次閱讀
    慧能泰零外圍USB Type-C PD<b class='flag-5'>快</b>充芯片HUSB<b class='flag-5'>380</b>B介紹

    中科采象邀您共同研討高速數(shù)據(jù)采集在超與X射線領域應用

    2025年超與X射線科學國際研討會時間:2025年5月9日-12日地點:上??萍即髮W會議中心簡介:2025年超與X射線科學國際研討會將聚焦阿秒物理極限探索、自由電子激光技術革新及量
    的頭像 發(fā)表于 05-09 14:05 ?435次閱讀
    中科采象邀您共同研討高速<b class='flag-5'>數(shù)據(jù)</b>采集在超<b class='flag-5'>快</b>與X射線領域應用

    DD50-380S24G2N4 DD50-380S24G2N4

    電子發(fā)燒友網(wǎng)為你提供AIPULNION(AIPULNION)DD50-380S24G2N4相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有DD50-380S24G2N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,DD50-
    發(fā)表于 03-21 18:31
    DD50-<b class='flag-5'>380</b>S24G2N4 DD50-<b class='flag-5'>380</b>S24G2N4

    FA10-380S24F2N4 FA10-380S24F2N4

    電子發(fā)燒友網(wǎng)為你提供AIPULNION(AIPULNION)FA10-380S24F2N4相關產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有FA10-380S24F2N4的引腳圖、接線圖、封裝手冊、中文資料、英文資料,F(xiàn)A10-
    發(fā)表于 03-18 18:50
    FA10-<b class='flag-5'>380</b>S24F2N4 FA10-<b class='flag-5'>380</b>S24F2N4

    保障數(shù)據(jù)機房安全與穩(wěn)定性:三相380V變208V380V隔離變壓器

    保障數(shù)據(jù)機房安全與穩(wěn)定性:卓爾凡電源三相 380V 變 208V/380V 隔離變壓器全解析,卓爾凡電源市場部方經(jīng)理 139*2926/3356 在數(shù)字化浪潮下,數(shù)據(jù)機房作為企業(yè)核心基
    的頭像 發(fā)表于 03-14 09:29 ?779次閱讀

    PID控制算法的C語言實現(xiàn):PID算法原理

    的是,在我所接觸的控制算法當中,PID 控制算法又是最簡單,最能體現(xiàn)反饋思想的控制算法,可謂經(jīng)典中的經(jīng)典
    發(fā)表于 02-26 15:24

    ANN神經(jīng)網(wǎng)絡——器件建模

    隨著半導體行業(yè)的新材料、新工藝、新器件的不斷發(fā)展,人工神經(jīng)網(wǎng)絡作為一種替代方法已經(jīng)被引入器件建模領域。本文介紹了ANN神經(jīng)網(wǎng)絡建模的起源、優(yōu)勢、實現(xiàn)方式和應用場景。 ? 隨著半導體行業(yè)的新材料
    的頭像 發(fā)表于 01-06 13:41 ?1720次閱讀
    <b class='flag-5'>ANN</b>神經(jīng)網(wǎng)絡——器件建模

    思氮化鎵充電器分享:Super GaN伸縮線充35W

    快節(jié)奏的時代,在旅游、辦公等場景下,一款高效、便捷的充電器可以讓我們的生活更便捷、高效。今天就給大家推薦一款思氮化鎵充電器——Super GaN伸縮線充35W。它具備多重亮點,可以滿足我們在許多場景下的充電需求,成為我們的得力助手。
    的頭像 發(fā)表于 01-04 09:41 ?1116次閱讀