sklearn 筆記:neighbors.NearestNeighbors 自定義metric

1 數據

假設我們有這樣的一個數據tst_lst,表示的是5條軌跡的墨卡托坐標,我們希望算出逐點的曼哈頓距離之和,作為兩條軌跡的距離

[array([[11549759.51313693,   148744.89246911],[11549751.49813359,   148732.97804463],[11549757.62070558,   148738.21148336],[11549877.73443613,   148886.64075531],[11549855.1365795 ,   148900.67083319]]),array([[11556428.51911408,   145454.58226351],[11557035.91165162,   145493.83259114],[11557310.50343952,   145408.66217089],[11557748.16714946,   145339.9824732 ],[11558124.96136184,   145498.27539452]]),array([[11560299.60987809,   143642.48133694],[11560236.88134503,   143437.08940241],[11560254.26944949,   143331.75455279],[11560222.79942945,   143349.26953089],[11560224.0350758 ,   143354.70329418]]),array([[11559757.30584681,   143885.2194761 ],[11560304.02926187,   143639.87580025],[11560743.21804884,   143750.12120076],[11560626.52182665,   144103.28312704],[11560722.44583186,   144272.53199179]]),array([[11569978.06036478,   151723.38135785],[11569938.73118869,   151248.5811628 ],[11569616.11617246,   150791.67584703],[11569571.34347327,   150687.55191842],[11569688.57402901,   150674.10077112]])]

2 處理原始數據

2.1 直接喂入的問題

如果直接將上面的數據fit入NearestNeighbors,是會報錯的:

from sklearn.neighbors import NearestNeighborscellKDtree=NearestNeighbors().fit(tst_lst)
cellKDtree
'''
ValueError: Found array with dim 3. NearestNeighbors expected <= 2.
'''

ValueError 是由于嘗試在 NearestNeighbors 對象上使用三維數組導致的。NearestNeighbors 期望的輸入是一個二維數組,其中每行代表一個數據點,每列代表一個特征

2.2 修改數據形狀

每一個軌跡二維矩陣轉化成一個一維向量

tst_lst=np.array(tst_lst)
tst_lst_new=[]for i in range(len(tst_lst)):tst_lst_new.append(np.hstack(tst_lst[i]).tolist())
tst_lst_new'''
[[11549759.513136925,148744.89246911363,11549751.49813359,148732.97804463338,11549757.620705582,148738.2114833576,11549877.734436132,148886.6407553058,11549855.136579504,148900.67083319122],[11556428.519114085,145454.58226351053,11557035.911651615,145493.83259113596,11557310.503439516,145408.66217089174,11557748.167149458,145339.9824731981,11558124.961361844,145498.2753945235],[11560299.609878086,143642.48133694328,11560236.881345032,143437.0894024146,11560254.269449493,143331.75455278732,11560222.79942945,143349.26953088713,11560224.035075797,143354.7032941798],[11559757.305846812,143885.21947610297,11560304.02926187,143639.8758002481,11560743.218048835,143750.12120075937,11560626.521826653,144103.28312704086,11560722.445831856,144272.53199179273],[11569978.060364777,151723.38135785353,11569938.731188687,151248.58116280191,11569616.116172463,150791.67584703089,11569571.343473272,150687.55191841844,11569688.57402901,150674.1007711226]]
'''

此時送入NearestNeighbor已經可以了

from sklearn.neighbors import NearestNeighborscellKDtree=NearestNeighbors().fit(tst_lst_new)
cellKDtree

3 自定義函數

from scipy.spatial.distance import *
import numpy as np
def disfunc(x,y):#每次比較fit入Nearest Neighbor 的矩陣的兩行x_points=np.array([(x[i],x[i+1]) for i in range(0,len(x),2)])y_points=np.array([(y[i],y[i+1]) for i in range(0,len(y),2)])#提取經緯度,將每一行一維向量改成二維矩陣return float(np.sum(np.diag(cdist(x_points,y_points,metric='cityblock'))))'''cdist(x_points,y_points,metric='cityblock') 將得到一個二維矩陣,表示x每一個元素和y每一個元素的曼哈頓距離np.diag是取二維矩陣的對角元素,表示x和y對應位置元素的距離求和就是兩條軌跡的距離'''

4 使用NearestNeighbor

注:似乎algorithm只能選擇默認的brute,KD_tree和ball_tree都不行

from sklearn.neighbors import *cellKDtree=NearestNeighbors(metric=disfunc).fit(tst_lst_new)
cellKDtree

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/207123.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/207123.shtml
英文地址,請注明出處:http://en.pswp.cn/news/207123.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 常用命令匯總

1 linux定時任務 查看定時任務&#xff1a;crontab -l 每晚一點半執行定時任務&#xff1a; 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定時任務&#xff1a;crontab -e 2 linux 內核版本查詢 cat /etc/r…

P5744 【深基7.習9】培訓

題目描述 某培訓機構的學員有如下信息&#xff1a; 姓名&#xff08;字符串&#xff09;年齡&#xff08;周歲&#xff0c;整數&#xff09;去年 NOIP 成績&#xff08;整數&#xff0c;且保證是 5 5 5 的倍數&#xff09; 經過為期一年的培訓&#xff0c;所有同學的成績都…

學習-java多線程

線程的創建 *繼承Tread,重寫run *實現Runnable接口,重寫run() [匿名內部類] *實現callable接口(有結果返回) 線程的常用方法 調用join保證這個方法先執行完成, 線程安全 并發編程 進程&#xff1a;就相當一個程序的實例線程&#xff1a;就是指令流&#xff08;一個進程包含多…

無重復字符的最長子串-中等

leetcode地址 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長子串 的長度。 示例 1:輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc"&#xff0c;所以其長度為 3。 示例 2:輸入: s "bbbbb" 輸出: 1 …

我有才打造私域流量的知識付費小程序平臺

在當今數字化時代&#xff0c;知識付費市場正在迅速崛起&#xff0c;而私域流量的概念也日益受到重視。私域流量指的是企業通過自有渠道獲取的、能夠自由支配的流量&#xff0c;這種流量具有更高的用戶粘性和轉化率。因此&#xff0c;打造一個基于私域流量的知識付費小程序平臺…

實現:切換頁面切換標題,擴展 vue-router 的類型

布局容器-頁面標題 網址&#xff1a;https://router.vuejs.org/zh/guide/advanced/meta 給每一個路由添加 元信息 數據 router/index.ts const router createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{ path: /login, component: () > im…

問題:數組對象去重

問題&#xff1a;數組對象去重 var arr [{name: ‘a’,id: 1}, {name: ‘a’,id: 2}, {name: ‘b’,id: 3}, {name: ‘c’,id: 4}, {name: ‘c’,id: 6}, {name: ‘b’,id: 6}, {name: ‘d’,id: 7}]; 對數組對象name進行去重處理&#xff0c; 結果顯示為&#xff1a; [{name…

第一啟富金:新添澳大利亞(ASIC)牌照

第一啟富金&#xff1a;澳大利亞證券及投資委員會&#xff08;ASIC&#xff09; GOLDWELL GLOBAL PTY LTD 是 WHOLESALE INVESTOR SERVICES PTY LTD&#xff08;CAR 編號 001304943&#xff09;的企業授權代表開發澳大利亞客戶&#xff0c;WHOLESALE INVESTOR SERVICES PTY LT…

XML是什么

XML是是什么&#xff1f; XML&#xff08;Extensible Markup Language&#xff09;&#xff0c;中文是可擴展標記語言&#xff0c;是標準通用標記語言的子集。它是一種標記語言&#xff0c;用于標記電子文檔&#xff0c;使其結構化。 XML可以用來標記數據&#xff0c;定義數據…

【軟件推薦】文本轉語音,語音轉wav,導入ue5

文字轉語音 在線免費文字轉語音 - TTSMaker官網 | 馬克配音https://ttsmaker.cn/ 文件轉換器 語音轉wav Convertio — 文件轉換器https://convertio.co/zh/

C#應用:MQTT分析——CONNECT為例子

源代碼: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net.Sockets;namespace ConsoleApp1 {class Program{static void Main(string[] args){Connect();}/// <summary>/// 向…

HarmonyOS應用程序框架——UIAbility實操

UIAbility概述 UIAbility是一種包含用戶界面的應用組件&#xff0c;主要用于和用戶進行交互。UIAbility也是系統調度的單元&#xff0c;為應用提供窗口在其中繪制界面。 每一個UIAbility實例&#xff0c;都對應于一個最近任務列表中的任務。 一個應用可以有一個UIAbility&…

Leetcode—901.股票價格跨度【中等】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—901.股票價格跨度 算法思想 實現代碼 class StockSpanner { public:stack<pair<int, int>> st;int curday -1;StockSpanner() {st.emplace(-1, INT_MAX);}int next(int price) {while(price > st.top(…

油猴(Tampermonkey)瀏覽器插件簡單自定義腳本開發

介紹 瀏覽器插件&#xff0c;包括油猴插件和其他插件&#xff0c;通過它們可以實現瀏覽器網頁的定制化與功能增強。 其他插件一般只有某種具體的功能&#xff0c;且已經寫死而不能更改&#xff0c;比如Adblock插件只用于去廣告。 油猴插件是一款用于管理用戶腳本的插件&…

使用Rust 構建C 組件

協議解析&#xff0c;這不就很快了&#xff0c;而且原生的標準庫紅黑樹和avl 樹支持&#xff0c;異步tokio 這些庫&#xff0c;編寫應用組件就很快了 rust 標準庫不支持 unix 的消息隊列&#xff0c;但是支持 shm 和 uds&#xff0c;后者從多方面考慮都比&#xff0c;消息隊列更…

教育類直播介紹

教育類直播是一種在線教育形式&#xff0c;它允許學生和教師通過實時視頻通話進行互動學習。這種學習方式可以為學生提供更靈活的學習時間和地點&#xff0c;同時也可以幫助教師更好地與學生進行互動和指導。 在教育類直播中&#xff0c;學生可以通過網絡與教師和其他學生進行…

c/c++中一些不常用但有用的知識

1.變長數組 bool fun(int cnt) {unsigned char data[cnt];return true; } 在 C 語言中&#xff0c;變長數組&#xff08;Variable Length Arrays&#xff0c;VLA&#xff09;是 C99 標準引入的特性&#xff0c;允許使用變量來定義數組的長度。因此&#xff0c;在 C 版本的代碼…

快速在VMware虛擬機上運行Kali Linux(保姆級教程)

本期將演示如何在VMware虛擬機上快速、輕松地安裝Kali Linux。Kali Linux是一款專為滲透測試和網絡安全而設計的操作系統&#xff0c;擁有很多強大的工具和功能。 在運行任何虛擬機之前&#xff0c;一定要先確保已經打開主板BIOS上的虛擬化支持。 下載VMware 接著來到vmware的…

vue 一直運行 /sockjs-node/info?及 /sockjs-node/info報錯解決辦法

sockjs-node介紹 sockjs-node 是一個JavaScript庫&#xff0c;提供跨瀏覽器JavaScript的API&#xff0c;創建了一個低延遲、全雙工的瀏覽器和web服務器之間通信通道。 服務端&#xff1a;sockjs-node&#xff08;https://github.com/sockjs/sockjs-node&#xff09; 客戶端&a…

[全志Tina/Linux]全志修改bootlogo分區數據從而修改bootlogo

一、需求 在不進行鏡像燒錄的情況下&#xff0c;通過啟動項或腳本將已存在于主板的bootlogo文件更新到bootlogo分區中&#xff0c;從而實現bootlogo的更新 二、操作 1、在主板上查找bootlogo文件路徑 find -name bootlogo* 實機效果&#xff1a; 2、進入文件夾路徑 cd ./d…