1. 程式人生 > >問題與不足(KNN演算法)

問題與不足(KNN演算法)

問題與不足

論文題目:k-NearestNeighbors on Road Networks: A Journey in Experimentation and In-MemoryImplementation 

該論文主要研究了K Nearest Neighbor演算法在主存中的應用,介紹了五種解決KNN演算法的經典演算法,分別是Incremental NetworkExpansion (INE)演算法,Incremental Euclidean Restriction(IER)演算法,Distance Browsing演算法,Route Overlay and AssociationDirectory(ROAD)演算法以及G-tree演算法。

本人通過查閱一系列資料對上述演算法有了一定了解,並總結了上訴演算法在實際應用的某些方面中存在的問題。

二、演算法中存在的問題

1.Incremental Network Expansion

Incremental Network Expansion(INE)採用了Dijkstra演算法中的貪心思想,通過不斷搜尋與節點q最近的節點來擴充套件答案。INE演算法的優點是思路清晰,實現簡單,在資料量較小的情況下可以快速解決問題,並具有較高的準確性。但是該演算法在面對海量資料時顯得力不從心。特別是實際生活中物體之間的距離大多數需要用歐式距離來描述,遇到與複雜街區中的建築物相關問題時,衡量建築物之間的距離本身就是一個複雜的問題,所以難以比較網路中點的“實際距離”。其次,實際生活中抽象出的圖往往是極其稠密的完全圖,此時INE演算法將難以使用優先佇列來優化時間複雜度,因為採用儲存優先佇列儲存其他頂點到目標節點q距離時,該演算法時間複雜度可以達到O(|W|log|V|),其中V為圖中頂點的數量,W為圖中邊的數量,此時W與V2

的數量級相同,優化後的演算法複雜度反而高過了樸素演算法O(V2)的時間複雜度。

2.Incremental Euclidean Restriction

Incremental Euclidean Restriction (IER) 演算法藉助了R-tree之類的資料結構來進行預處理,是INE演算法的一種優化演算法。IER演算法在實際資料的測試結果中快於普通的INE演算法,但是IER演算法無法保證R-tree預處理出來的集合一定包含優化解,極端情況下可能不包含所有的優化解,此時達到演算法的最差時間複雜度,其最差時間複雜度與INR演算法相同。也就是說,在實際應用中,IER演算法可能出現不穩定的情況。

3.Distance Browsing

Distance Browsing(DisBrw)演算法利用SILC索引減少了大量的優先佇列插入操作,因而有更高的效率。但是採用優先佇列儲存其他頂點到目標節點q距離時,DisBrw演算法依然無法避免部分節點多次重複入隊出隊的操作,使得部分情況下DisBrw演算法對INE演算法的優化不明顯。

4.Route Overlay & Association Directory

Route Overlay and Association Directory (ROAD)演算法通過劃分冗餘網路子系統和排除無效子系統的搜尋剪枝優化了INE演算法巨大的搜尋空間,時空效率比INE有了明顯的提升。

ROAD演算法利用捷徑的概念避免了INE中大量沒有必要的搜尋,在一般情況下,ROAD演算法具有良好的平均時空複雜度,但是ROAD演算法的效率依賴於圖劃分的優劣,也具有一定的不穩定性。

5.G-tree

       G-tree演算法提供了一種新的圖區域劃分和層次劃分方法,並就圖的層次結構建立了一顆平穩的G-tree樹,擁有穩定而高效的時間複雜度,同時該樹空間複雜度也很穩定,為O(|V|log|V|),其中V為頂點數量。

G-tree演算法的主要問題在於其使用了複雜的資料結構和模型,其時間效率與演算法本身距離矩陣的實現方式密切相關,針對不同規模和分佈的資料使用不同的雜湊表擁有不同的效率,這意味著G-tree演算法的實際應用較為複雜。

相關推薦

問題不足KNN演算法

問題與不足 論文題目:k-NearestNeighbors on Road Networks: A Journey in Experimentation and In-MemoryImplementation  該論文主要研究了K Nearest Neighbor演算法在

小白python學習——機器學習篇——k-近鄰演算法KNN演算法

一、演算法理解 一般給你一資料集,作為該題目的資料(一個矩陣,每一行是所有特徵),而且每一組資料都是分了類,然後給你一個數據,讓這個你預測這組資料屬於什麼類別。你需要對資料集進行處理,如:歸一化數值。處理後可以用matplotlib繪製出影象,一般選兩個特徵繪製x,y軸,然後核心是計算出預測點到

第k短路 演算法詳解圖解模板A* 演算法

老規矩,先放模板,有時間放圖解 #include <map> #include <queue> #include <cstdlib> #include <cma

K-近鄰法KNN演算法

1、kNN演算法(K 最近鄰(k-Nearest Neighbors))描述 簡單地說,k-近鄰演算法採用測量不同特徵值之間的距離方法進行分類。 k-近鄰演算法是一種基本分類與迴歸方法;它是是監督學習中分類方法的一種,屬於懶散學習法(惰性學習方法)。 給定一個訓練集

sklearn實戰:糖尿病預測knn演算法

%matplotlib inline import matplotlib.pyplot as plt import numpy as np import pandas as pd # 載入資料 data = pd.read_csv('datas

無向圖的割頂tarjan演算法

首先這個真的不怎麼好理解,自己花了兩天才弄明白,看書上寫的是很迷茫,又看了幾篇部落格還是沒怎麼完全理解但是逐漸的越來越明白了最後看了百度百科才完全弄明白(早知道就直接看百度百科了上面講的非常好) 百度百科連結----->https://baike.baidu.com/item/tarjan

微服務架構的優勢不足

頁面 中間 ima 直接 docke 連接 包含 後臺服務 駕駛 微處理架構——處理復雜事物   許多公司,比如Amazon、eBay和NetFlix,通過采用微處理結構模式解決了上述問題。其思路不是開發一個巨大的單體式的應用,而是將應用分解為小的、互相連接的微服務。   

微服務架構的優勢不足

均衡 如果 res 避免 分支 修改 分布式應用 微服務 改變 微服務架構的好處   微服務架構模式有很多好處。首先,通過分解巨大單體式應用為多個服務方法解決了復雜性問題。在功能不變的情況下,應用被分解為多個可管理的分支 或服務。每個服務都有一個用RPC-或者消息驅動API

資料結構演算法JavaScript描述讀書筆記3檢索演算法

列表中查詢資料有兩種方法:順序查詢和二分查詢。順序查詢使用於元素隨機排列的列表;二分查詢適用於元素已排序的列表。二分查詢效率高,但是必須花費額外時間將列表中的元素排序 順序查詢 時間複雜度:O(n) function seqSearch(arr,data){ for(var i=

演算法講解 -- 區間dp經典模型優化石子歸併

石子合併問題是最經典的DP問題。首先它有如下3種題型: PPT講解:點選開啟連結 (1)有N堆石子,現要將石子有序的合併成一堆,規定如下:每次只能移動任意的2堆石子合併,合併花費為新合成的一堆石子的數量。求將這N堆石子合併成一堆的總花費最小(或最大)。   分析:當然這種情

unity學習:尋路演算法AStar演算法簡單AI勢能場估價演算法

專案地址:https://github.com/kotomineshiki/AIFindPath 視訊地址:多重尋路 綜合尋路——包括攻擊考量的尋路演算法 GamePlay 這是一個《文明》+皇室戰爭的組合。 UI層使用狀態機來實現以下操作 1. 點選棋子再點選格子,

串的比較模式匹配BF演算法

串的比較 //標頭.h #include<iostream> #include<string> #include<cstdlib> using namespace std; typedef int Status; #defin

演算法設計分析十一

300. Longest Increasing Subsequence Given an unsorted array of integers, find the length of longest increasing subsequence. Example

Tarjan演算法:求解圖的割點割邊

簡介: 割邊和割點的定義僅限於無向圖中。我們可以通過定義以蠻力方式求解出無向圖的所有割點和割邊,但這樣的求解方式效率低。Tarjan提出了一種快速求解的方式,通過一次DFS就求解出圖中所有的割點和割邊。 歡迎探討,如有錯誤敬請指正 1. 割點與橋(割邊)的定義 在無向圖中才有割邊和割點的定義 割點:無

KNN演算法鄰近演算法

       演算法流程 1. 準備資料,對資料進行預處理 2. 選用合適的資料結構儲存訓練資料和測試元組 3. 設定引數,如k 4.維護一個大小為k的的按距離由大到小的優先順序佇列,用於儲存最近鄰訓練元組。隨機從訓練元組中選取k個元組作為初始的最近鄰元組,分別計算測試元組到這k個元組的距離,將訓練元組標號和

R語言機器學習學習筆記分類演算法1K-近鄰演算法

前言      最近在學習資料探勘,對資料探勘中的演算法比較感興趣,打算整理分享一下學習情況,順便利用R來實現一下資料探勘演算法。      資料探勘裡我打算整理的內容有:分類,聚類分析,關聯分析,異常檢測四大部分。其中分類演算法主要介紹:K-近鄰演算法,決策樹演算法,樸素

演算法設計分析題目練習四:井字棋啟發式演算法

井字棋又叫做三連棋或一連棋。顧名思義就是讓三顆棋子連成一條線就獲勝了。國外也有相似的玩法,名字叫tic-tac-toe #include <iostream> #include <string> using namespace std; /*

LeetCode初級演算法排序搜尋篇---第一個錯誤的版本

第一個錯誤的版本 題目 你是產品經理,目前正在帶領一個團隊開發新的產品。不幸的是,你的產品的最新版本沒有通過質量檢測。由於每個版本都是基於之前的版本開發的,所以錯誤的版本之後的所有版本都是錯的。 假設你有 n 個版本 [1, 2, ..., n],你想

R語言機器學習學習筆記分類演算法3樸素貝葉斯

演算法三:樸素貝葉斯演算法 在貝葉斯決策中,對於先驗概率p(y),分為已知和未知兩種情況。 1. p(y)已知,直接使用貝葉斯公式求後驗概率即可; 2. p(y)未知,可以使用聶曼-皮爾遜決策(N-P決策)來計算決策面。 而最大最小損失規則主要就是使用解決最小損失規則時先驗概率未知或難以計算的問題的

R語言機器學習學習筆記分類演算法2決策樹演算法

演算法二:決策樹演算法 決策樹定義 決策樹模型是基於特徵對例項進行分類的樹形結構。由結點和有向邊組成。結點包括內部結點和葉節點,內部結點為特徵或屬性,葉子節點表示一個類。 【優點】 模型具有可讀性,分類速度快。 以鳶尾花為例,觀察上圖,我們判決鳶尾花的思考過程可以這麼來描述:花瓣的長度