我想使用 KNN 創建一個訓練模型(我也會使用其他 ML 模型),但我只是想知道......
我有大約 6 個功能,總共有 60.000(6 萬)個參考點(因此,每個功能我有大約 10.000 個參考點)。
我知道從計算的角度來看,這并不理想(對于像 KNN 這樣的演算法),所以我應該使用例如 KD-Trees(或者 KNN 對于這個數量的特征/參考點是否可以)?因為..如果我必須計算我的測驗點和所有參考點之間的距離(例如歐幾里得距離,對于多維模型)......我可以想象這將需要相當長的時間...... ?
我知道其他(監督)ML 演算法可能更有效,但 KNN 只是我將使用的演算法之一。
uj5u.com熱心網友回復:
(樸素)KNN 的時間復雜度將是在您的情況O(kdn)下d為 6 的維度,在您的情況下n是點數,即 60,000。
n同時,從點構建 KD 樹是O(dnlogn),隨后的最近鄰查找需要O(klogn)時間。這肯定要好得多:您預先犧牲了一點時間來構建 KD 樹,但是以后每次 KNN 查找要快得多。
這一切都假設您的積分以“良好”的方式分布(有關更多詳細資訊,請參見:https ://en.wikipedia.org/wiki/K-d_tree#Degradation_in_performance_when_the_query_point_is_far_from_points_in_the_k-d_tree )。如果它們沒有以“好”的方式分布,那么 KNN 通常可能不是要走的路。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/531545.html
上一篇:Java組合異步編程(2)
