等大小譜聚類

聚類是一種將具有相似特征的數據點進行分組的方法。它廣泛應用于探索性數據分析,并已被證明在模式識別、市場和客戶細分、推薦系統、數據壓縮以及生物數據分析等許多應用中都發揮著重要作用。

盡管聚類算法種類繁多,但沒有一種能夠生成點數均衡的聚類。這種大小均衡的聚類在某些領域非常重要,例如在“最后一英里”配送領域,大量訂單可以聚合成大小均衡的組,從而優化配送路線并最大限度地提高車輛利用率。

考慮到需要實現等大小的聚類,我和幾位同事擴展了所謂的譜聚類,以生成點數均衡的聚類。這種新算法基于數據點的地理信息構建具有相似點數的聚類。

完整代碼可在此GitHub 倉庫中找到。它旨在為數據科學社區做出貢獻。如果您需要在地圖上創建相等的點簇,不妨嘗試一下!

等大小譜聚類:算法

等大小聚類由三個步驟組成:聚類初始化、計算每個聚類的鄰居以及平衡每個聚類中的點。讓我們詳細回顧一下每個步驟。

聚類初始化

第一步,我們使用Scikit-learn 的譜聚類算法實現來創建聚類。譜聚類在聚合空間數據方面非常強大,因為它可以根據連接節點的邊來識別圖中節點的社群。譜聚類算法在對遵循圓對稱性的點進行聚類時尤其有用。如果您想了解更多關于此方法的信息,可以閱讀 William Fleshman 撰寫的這篇精彩文章:

譜聚類

基礎與應用

towardsdatascience.com

進行聚類初始化需要兩個超參數:nclusters表示?所需聚類的數量;nneighbors表示每個數據點的鄰居數量。譜聚類使用最后一個參數來構建親和度矩陣。 的良好值nneighbors?介于數據點的 7% 到 15% 之間。

步驟1:利用譜聚類算法創建聚類。這些聚類中的點數并不相等。

計算每個聚類的鄰居

創建聚類后,算法的第二步是計算每個聚類的鄰居。這個計算是如何進行的呢?通過估計每個數據點最近鄰居的聚類標簽的眾數。例如,如果點x屬于聚類A,而其大多數最近鄰居屬于聚類B,則意味著聚類B是聚類A的鄰居。

每個簇的鄰居的計算極其重要,因為簇的平衡是通過在相鄰簇之間交換點來實現的。

步驟2:左圖:估計每個聚類的鄰居。在此示例中,我們可以看到聚類 A 和 B 是聚類 C 的鄰居。右圖:通過在相鄰聚類之間交換點來實現聚類的平衡。

平衡每個聚類上的點

算法的最后一步是平衡每個聚類中的點。如上所述,我們通過在相鄰聚類之間交換點來實現這一點。較大的聚類會將點轉移到較小的相鄰聚類。在平衡過程中,我們的目標是使聚類大小大致等于N /ncluster,其中N是數據點的總數。

為了平衡簇的大小,我們定義了超參數equity_fractionequity_fraction是一個定義在區間 (0,1] 內的數字,它限制了生成的簇必須達到的相等程度。如果equity_fraction為零,則簇將保持相同的初始大小。如果equity_fraction為一,則生成的簇的大小大致等于N /ncluster

步驟 3:最終的聚類規模取決于 equity_fraction。左圖:如果 equity_fraction 為 0,聚類將保持其初始規模。右圖:如果 equity_fraction 為 1,聚類的點數大致相同。

讓我們用一個小括號來定義一個叫做簇離散度(cluster diffraction)的量。簇離散度定義為簇內點距離的標準差。你可以把它看作是簇內距離的稍微修改版本。

equity_fraction會影響初始聚類分散度,因為點的交換會增加聚類內點之間的距離。在這種情況下,我建議您使用優化算法來找到最小化聚類分散度的最佳聚類超參數。在下一節中,我將討論如何從 Python 代碼中去除聚類分散度。

其他功能

需要記住的是,等大小譜聚類可用于創建空間點的聚合。存儲庫附帶繪圖功能,可在您擁有數據點坐標的情況下使用。在下一節中,我們將看到此功能的實際應用。

用例:阿姆斯特丹的餐館集群

假設您是荷蘭一家農場的主人,您想將新鮮優質的食材配送到阿姆斯特丹的眾多餐廳。您有6輛容量相同的車輛,這意味著它們能夠配送到大致相同數量的餐廳。

為了充分利用車輛的容量,您可以使用等大小聚類對餐廳進行分組,以便每輛車不會從一家餐廳行駛到另一家餐廳太多。

我們先來看看餐廳的位置:

restaurants_in_amsterdam.csv文件包含阿姆斯特丹中央火車站周圍 8 公里范圍內餐廳位置的列表。您可以在GitHub 倉庫的datasets文件夾中找到此文件。

根據數據框中列出的位置coords,可以估算出一個包含每對點之間行程距離的矩陣。該矩陣的形狀為 (n_samples, n_samples),并且必須是對稱的。該矩陣是等大小聚類的輸入。

現在我們可以運行等大小譜聚類了。這就像調用類一樣簡單SpectralEqualSizeClustering

在此示例中,我們創建了 6 個聚類。我們選擇鄰居數量nneighbors為輸入數據集中點數的 10%。由于我們希望聚類盡可能均等,因此我們將 設置?equity_fraction為 1。

您可以看到如何通過調用該方法獲取每個數據點的聚類標簽fit重要提示:用于預測原始數據中不存在的點的聚類標簽的函數尚未實現。如果您覺得此代碼對您的工作有用,我鼓勵您開發此功能!

可以將上面獲得的聚類標簽添加到數據框中,coords以便在地圖上繪制生成的聚類:

通過運行上面的代碼,我們得到一個包含所有聚類的交互式圖,如圖所示:

使用等大小譜聚類代碼創建的聚類。

在該圖中,您可以選擇每個集群以分別進行可視化:

?

在上述用例中,超參數優化并非必需。然而,正如我之前提到的,如果需要,可以使用優化方法。在這種情況下,您可以將屬性clustering.total_cluster_dispersion(即所有聚類離散度的總和)用作優化指標。通過最小化該量,?生成的聚類將更加緊湊。

帶回家的信息

在這篇博客中,我介紹了一種譜聚類代碼的修改,它可以生成點數均衡的聚類。該算法可以用來生成空間點的均等聚合,并且可能有助于改進“最后一英里”配送領域的某些流程。

等大小譜聚類的重要考慮因素如下:

  • 輸入數據必須是與數據點坐標相關的對稱距離矩陣。
  • 聚類代碼的超參數包括所需聚類的數量 (?nclusters)、每個數據點的鄰居數量 (?nneighbors) 以及決定聚類大小均勻程度的分數 (?equity_fraction)。您可以使用任何優化算法來找到最小化總體聚類離散度 ( ) 的最佳參數total_cluster_dispersion
  • 等大小聚類也可用于非空間數據,但尚未針對此目的進行測試。如果您想嘗試一下,請定義一個度量來創建代碼所需的對稱距離矩陣作為輸入。請務必先對變量進行歸一化或標準化。
  • 該代碼還沒有prediction方法,但如果您發現該代碼有用,歡迎您做出貢獻。

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

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

相關文章

〔從零搭建〕數據湖平臺部署指南

🔥🔥 AllData大數據產品是可定義數據中臺,以數據平臺為底座,以數據中臺為橋梁,以機器學習平臺為中層框架,以大模型應用為上游產品,提供全鏈路數字化解決方案。 ?杭州奧零數據科技官網&#xff…

Java 導出pdf 寫出demo 1、需要設置自定義頁眉和文字 2、可以插入表格 3、可以插入圖片

以下是一個使用 iText 7 庫實現 PDF 導出的 Java 示例&#xff0c;包含自定義頁眉、文字、表格和圖片功能&#xff1a; 添加 Maven 依賴 <dependencies><!-- iText 7 Core --><dependency><groupId>com.itextpdf</groupId><artifactId>ite…

Ntfs!LfsReadRestart函數分析得到Ntfs!LFS_RESTART_PAGE_HEADER

第一部分&#xff1a;0: kd> p Ntfs!LfsPinOrMapData0x8c: f71797f6 ff15a40016f7 call dword ptr [Ntfs!_imp__CcPinRead (f71600a4)] 0: kd> t nt!CcPinRead: 80bf9a5a 6a2c push 2Ch 0: kd> kc# 00 nt!CcPinRead 01 Ntfs!LfsPinOrMapData 02 N…

skywalking-agent-docker鏡像

FROM centos:7.9.2009 USER root# 定義 Arthas 目錄環境變量 ENV ARTHAS_HOME/opt/arthas# 更改 YUM 源并清理緩存 RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak && \rm -rf /etc/yum.repos.d/* && \curl -o /etc/yum.rep…

數據庫開發運維的集成:彌合開發與運維之間的鴻溝

在傳統的軟件開發工作流程中&#xff0c;數據庫變更往往是事后才考慮的問題。應用程序代碼遵循定義明確的開發運維實踐&#xff0c;包括版本控制、自動測試和持續部署&#xff0c;而數據庫變更則經常是由數據庫管理員手動執行的高風險操作。這種脫節造成了瓶頸&#xff0c;帶來…

PiscTrace應用:從 YOLO-Pose 到深蹲與引體向上計數:實時健身動作分析與實現

隨著健身行業的發展&#xff0c;越來越多的智能應用涌現&#xff0c;用于幫助健身者更好地記錄和分析運動情況。特別是在體能訓練中&#xff0c;俯臥撐和引體向上是兩個非常常見的動作&#xff0c;它們通常用來鍛煉上半身力量和耐力。為了使訓練更加科學和高效&#xff0c;實時…

【unity】webCanvas.enabled = false;和webCanvas.gameObject.SetActive(false);的優缺點比較

在 Unity 中&#xff0c;webCanvas.gameObject.SetActive(false) 和 webCanvas.enabled false 是兩種不同的隱藏 UI 的方式&#xff0c;它們的核心區別在于作用范圍和對組件狀態的影響。理解這些差異能幫助你避免初始化失敗、性能問題和邏輯錯誤。 1核心區別 gameObject.SetAc…

深入探索 pnpm:高效磁盤利用與靈活的包管理解決方案

引言 在現代 JavaScript 開發中&#xff0c;依賴管理效率直接影響開發體驗。傳統工具如 npm 和 yarn 在大型項目中常面臨磁盤冗余和性能瓶頸。pnpm&#xff08;Performant npm&#xff09;通過創新的硬鏈接和符號鏈接機制&#xff0c;解決了這些痛點。本文將深入解析 pnpm 的核…

Hive MetaStore的實現和優化

在大數據領域&#xff0c;數據管理與存儲至關重要&#xff0c;Hive MetaStore&#xff08;HMS&#xff09;作為 Hive 數據倉庫的核心組件&#xff0c;承擔著元數據管理的關鍵職責。隨著數據規模不斷膨脹&#xff0c;其性能與穩定性面臨挑戰。本文將深入剖析 HMS 的實現機制&…

一文讀懂動態規劃:多種經典問題和思路

一、動態規劃算法的思想與核心概念框架 1. 動態規劃的基本思想 動態規劃&#xff08;Dynamic Programming, DP&#xff09;是一種通過將復雜問題分解為重疊子問題&#xff0c;并利用子問題的解來高效解決原問題的方法。其核心思想是避免重復計算&#xff0c;通過存儲中間結果&a…

阿幸課堂隨機點名

代碼功能 這個是一個HTML網頁端&#xff0c;簡單來說就是可以雙擊之后運行進行點名。 當然&#xff0c;不局限于課堂點名 代碼功能 Excel 導入增強&#xff1a; 增加了列選擇器&#xff0c;可以指定從哪一列讀取學生姓名 增加了起始行選擇器&#xff0c;可以跳過標題行或其…

LeetCode 560: 和為K的子數組

題目描述給定一個整數數組 nums 和一個整數 k&#xff0c;請統計并返回該數組中和為 k 的連續子數組的個數。示例 1&#xff1a;輸入&#xff1a;nums [1,1,1], k 2 輸出&#xff1a;2示例 2&#xff1a;輸入&#xff1a;nums [1,2,3], k 3 輸出&#xff1a;2提示&#xff…

微軟官方C++構建工具:歷史演變、核心組件與現代實踐指南

引言&#xff1a;C構建工具的戰略意義 在Windows生態系統中&#xff0c;??微軟C構建工具??&#xff08;Microsoft C Build Tools&#xff09;構成了數百萬開發者和應用程序的技術基石。從早期的MS-DOS命令行工具到如今支持??跨平臺開發??的現代化工具鏈&#xff0c;微…

探索Cocos_CoilTheRope:一款創新的游戲引擎擴展項目

探索Cocos_CoilTheRope&#xff1a;一款創新的游戲引擎擴展項目 去發現同類優質開源項目:https://gitcode.com/ 是一個基于Cocos2d-x游戲引擎的擴展庫&#xff0c;旨在為開發者提供一種簡便的方法來實現繩子纏繞和物理交互效果。該項目由DreamLXW開發并維護&#xff0c;為游戲…

爬蟲-正則表達式

在線正則表達式測試OSCHINA.NET在線工具,ostools為開發設計人員提供在線工具&#xff0c;提供jsbin在線 CSS、JS 調試&#xff0c;在線 Java API文檔,在線 PHP API文檔,在線 Node.js API文檔,Less CSS編譯器&#xff0c;MarkDown編譯器等其他在線工具https://tool.oschina.net/…

【BTC】數據結構

目錄 那比特幣區塊鏈的組織形式到底是以鏈表的形式&#xff0c;還是樹的形式呢&#xff1f; 區塊頭和區塊體與默克爾樹的關系 默克爾證明詳解 區塊鏈和鏈表最大的區別就是區塊鏈用哈希指針代替了普通指針。 鏈表的指針就是指向一個結構體在內存中的地址&#xff0c;而哈希指…

飛算 JavaAI:讓 Java 開發效率飆升的智能助手,日常開發全場景應用指南

飛算 JavaAI&#xff1a;讓 Java 開發效率飆升的智能助手 &#xff0c;日常開發全場景應用指南 在 Java 開發的日常工作中&#xff0c;開發者常常面臨各類重復性勞動與邏輯復雜度挑戰。飛算 JavaAI 作為專注于 Java 領域的智能開發助手&#xff0c;能夠覆蓋從代碼生成到項目維護…

8.2 文檔預處理模塊(二)

一、從0開始&#xff1a;簡易RAG實現 在構建更復雜的 RAG 架構之前&#xff0c;我們先從最基礎的版本入手。整個流程可以分為以下幾個關鍵步驟&#xff1a; 1.數據導入&#xff1a;加載并預處理原始文本數據&#xff0c;為后續處理做好準備。 2.文本分塊&#xff1a;將長文本…

【系統與工具】Linux——Linux簡介、安裝、簡單使用

計算機概論與Linux簡介 計算機概論Linux介紹與版本 Linux的規劃與安裝 Linux與硬件平臺密切相關規劃硬件與Linux安裝 主機規劃與磁盤分區安裝CentOS、多重引導 簡單使用 幫助手冊文本編輯器關機 0. Linux介紹與版本 操作系統&#xff08;Linux&#xff09;&#xff1a;高效…

從視頻數據到數字孿生:如何構建虛擬與現實的橋梁?

概述 視頻數據與三維場景融合渲染技術通過將動態視頻與靜態三維模型結合&#xff0c;利用GPU加速、WebGL渲染、數字孿生等技術&#xff0c;實現虛擬與現實的交互式融合。該技術廣泛應用于智慧城市、工業監控、虛擬現實、游戲特效等領域&#xff0c;能夠提升場景的直觀性和用戶沉…