dijkstra算法代碼_數據科學家需要知道的5種圖算法(附代碼)

在本文中,我將討論一些你應該知道的最重要的圖算法,以及如何使用Python實現它們。

作者:AI公園

a567603f9a123e1c4ff17f59d3ddb87d.png

導讀

因為圖分析是數據科學家的未來。

作為數據科學家,我們對pandas、SQL或任何其他關系數據庫非常熟悉。

我們習慣于將用戶的屬性以列的形式顯示在行中。但現實世界真的是這樣嗎?

在一個互聯的世界里,用戶不能被視為獨立的實體。它們之間有一定的關系,我們在建立機器學習模型的時候,有時也會考慮這些關系。

現在,雖然在關系數據庫中,我們不能在不同的行(用戶)之間使用這樣的關系,但是在圖形數據庫中,這樣做非常簡單。

在本文中,我將討論一些你應該知道的最重要的圖算法,以及如何使用Python實現它們。

1. 連通組件

8196d1bf7d94e0ffc70dd8aac0818268.png

一個包含3個連通組件的圖

我們都知道聚類是如何工作的。

你可以用外行人的術語來理解連通組件,它是一種硬聚類算法,可以在相關/連接的數據中找到聚類/島嶼

舉個具體的例子:假設你有連接世界上任何兩個城市的道路的數據。你需要找出世界上所有的大陸以及它們包含哪些城市

你將如何實現這一點?來想想吧。

我們使用的連通組件算法是基于BFS/DFS的特殊情況。我不會在這里過多地討論它是如何工作的,但是我們將看到如何使用Networkx編寫和運行代碼。

應用

從零售的角度來看:假設我們有很多客戶,使用很多賬戶。使用連通組件算法的一種方法是在數據集中找出明顯不同的家族。

我們可以根據相同的信用卡使用情況、相同的地址或相同的移動電話號碼等設定客戶ID之間的邊(路)。一旦我們有了這些連接,我們就可以運行連通組件算法來創建單獨的簇,然后我們可以為其分配一個家族ID。

然后,我們可以使用這些家族ID根據家族需求提供個性化的推薦。我們還可以使用這個家族ID,通過創建基于家族的分組特征來支持我們的分類算法。

從財務的角度來看:另一個用例是使用這些家族ID捕獲欺詐。如果一個賬戶在過去有過欺詐行為,關聯賬戶很可能也容易進行欺詐。

可能性只受你自己想象力的限制。

代碼

我們將使用Python中的Networkx模塊來創建和分析圖。

讓我們從一個示例圖開始,我們使用它來實現我們的目的。包含城市和城市之間的距離信息。

cb9cdfe2db69b93767b83e2a266930f8.png

使用隨機距離的圖

我們首先創建一個帶有距離的邊的列表,我們把距離作為邊的權重:

8686dcfaa92ff2efea74593d646ffc43.png

使用Networkx構建圖:

cdba2bbe0fe2936c9b428212c5c1401d.png

現在我們想從這張圖中找出不同的大陸及其包含的城市。

我們現在可以使用連通組件算法做到這一點:

c4131c0625956bcc0d7a3d8349c65b83.png

正如你所看到的,我們能夠在數據中找到不同的部分。只需要使用邊和頂點。這個算法可以在不同的數據上運行,以滿足我上面提到的任何用例。

2. 最短路徑

1185356fb4d7a2b1b69a16607cfcc0ad.png

繼續上面的例子,我們得到了一個德國城市的圖以及它們之間的距離。

你想知道如何從法蘭克福(起始節點)到慕尼黑的最短距離。

我們用來解決這個問題的算法叫做Dijkstra。用Dijkstra自己的話來說:

從鹿特丹到[格羅寧根的最短路線是什么?一般來說,最短路徑的算法是這樣的,我花了大約20分鐘來設計它。一天早上我在阿姆斯特丹和我的年輕的未婚妻購物,累了,我們坐在咖啡館露臺喝一杯咖啡,我就在想我能不能想出這個最短路徑算法,然后我就想出來了。正如我所說,這是一個20分鐘的發明。事實上,它是在1959年出版的。三年后,還可以讀到,事實上,它相當不錯。它如此漂亮的原因之一是我不用鉛筆和紙來設計它。后來我了解到,不用鉛筆和紙設計的好處之一是,你幾乎不得不避免所有可以避免的復雜性。最終,令我大為驚訝的是,這個算法成了我成名的基石之一。

- Edsger Dijkstra,在對Philip L. Frana的采訪中

應用

Dijkstra算法的變體廣泛應用于谷歌地圖中,用于尋找最短路徑。

你在沃爾瑪,你有不同的通道和所有通道之間的距離。你想要提供從A通道到D通道到客戶的最短路徑。

5f9fe316e6be23e7b9e4bfecd598b74d.png

你可以看到LinkedIn如何顯示1級和2級的連接。幕后發生了什么?

3f9fea38ad162924154af974ebb2b599.png

代碼

3587419e555307ba0a76302b4b636694.png

你也可以找到所有的地點對之間的最短路徑:

3fac3eb50747ddaf175d827183d39402.png

3. 最小生成樹

7dc84c05d7dc08fe70895d9863b35381.png

現在我們有另一個問題。我們為一家水管鋪設公司或互聯網光纖公司工作。我們需要用最少的電線/管道連接圖中所有的城市,我們該怎么做?

38fd945475e389b92e5e541389b309e8.png

一個無向圖,右邊是它的最小生成樹

應用

最小生成樹直接應用于網絡設計,包括計算機網絡、電信網絡、交通網絡、供水網絡和電網(它們最初是為這些網絡而發明的)

MST用于逼近旅行商問題

聚類 — 首先構造MST,然后使用簇間距離和簇內距離確定MST中某些邊緣的分割閾值。

圖像分割 — 用于圖像分割,我們首先在一個圖上構造一個MST,其中像素是節點,像素之間的距離基于一些相似性度量(顏色、強度等)。

代碼

40fa8e326b7b40457757dc344d6d68cc.png
5fec14573fd3f1bbc4c6d0dfda1f2d02.png

我們的圖的最小生成樹

可以看到,上面就是我們需要鋪設的電線。

4. Pagerank

adaf5b1678f1cf672197f301869932f1.png

這就是長期以來支持谷歌的頁面排序算法。它根據輸入和輸出鏈接的數量和質量為頁面分配一個分數。

應用

Pagerank可以用于任何我們想要估計任何網絡中節點重要性的地方。

它被用來尋找最具影響力的論文使用引文。

被谷歌用來排列頁面

它可以用來把tweets-用戶和以及tweets-tweets當成節點進行排序。如果用戶A關注了用戶B,那么創建用戶之間的鏈接,如果用戶tweet/retwets一條tweet,則創建用戶和tweet之間的鏈接。

推薦引擎

代碼

在這個練習中,我們將使用Facebook數據。我們有一個facebook用戶之間的邊/鏈接文件。我們首先創建FB圖,使用:

a71249e5c7ac3961e20a5a871cae0b1b.png

它是這樣的:

e6974cbc9b65155e8508f2c0f356ffc2.png
8e9460eb2e176ddbc12e1bd4732001aa.png

FaceBook用戶圖

現在我們想要找到具有高影響力的用戶。

直觀地說,Pagerank算法會給有很多朋友的用戶打高分,而這些朋友又有很多facebook上的朋友。

d0809fd9f3dc23a12c29fb464f09ec58.png

我們可以用PageRank得到最有影響力的用戶排序:

4571e542b8feb1de145ecc8ea3ed3c84.png

以上id適用于最有影響力的用戶。

我們可以看到最具影響力用戶的子圖:

fa6692e96a0cfbfbfdf57216a130eccd.png
f9fdd1f6a55ad3a6160daa7d961c9a5d.png

最有影響力的用戶(黃色)

5. 中心度量

有許多中心度量,你都可以將其用作機器學習模型的特征。我將討論其中的兩個。

內中心:重要的不僅是擁有最多朋友的用戶,將一個地理位置與另一個地理位置連接起來的用戶也很重要,因為這讓用戶可以看到來自不同地理位置的內容。內中心度量了一個特定節點在另外兩個節點之間的最短路徑中出現的次數

度中心:它是節點的連接數。

應用

中心度量可以作為任何機器學習模型的一個特征。

代碼

面的代碼用于查找子圖的內中心。

e8f68ddd17733ae0620d4c75ec0c3360.png
74025e1e73e58a80b6bb90902f092f82.png

可以看到,在這里按它們的內中心值調整節點的大小。他們可以被認為是信息傳遞者。將具有高內中心的任何節點斷開將會將圖分成許多部分。

總結

在這篇文章中,我討論了一些最具影響力的圖算法,它們改變了我們的生活方式

隨著如此多的社會數據的出現,網絡分析可以在很大程度上幫助我們改進模型和產生價值。

甚至更多地了解這個世界。

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

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

相關文章

大暴搜 chess

仔細讀題,會發現吃掉敵人點對方案數的貢獻很神奇。如果走的空格相同,而走的敵人點不同,對答案無貢獻,而對于走的空格相同,但一種走了敵人點,另一種沒走,算兩個方案。。。。sb出題人語文簡直是和…

網站的SEO以及它和站長工具的之間秘密

博客遷移沒有注意 URL 地址的變化,導致百度和 google 這兩只爬蟲引擎短時間內找不到路。近段時間研究了下國內最大搜索引擎百度和國際最大搜索引擎google的站長工具,說下感受。 百度的站長工具地址:http://zhanzhang.baidu.com/dashboard/ind…

html 縮略圖點擊預覽,[每天進步一點點~] uni-app 點擊圖片實現預覽圖片列表

點擊圖片,實現預覽圖片功能,并且可循環預覽圖片列表!image.png一、多張圖片預覽html代碼js代碼data(){return {photos:[{ src: 圖片路徑1},{ src: 圖片路徑2},{ src: 圖片路徑3},……]}},methods: {// 預覽圖片previewImage(index) {let phot…

git ssh拉取代碼_阿里云搭建git服務器

一.搭建步驟,分為兩步搭建中心倉庫自動同步代碼到站點目錄二.詳細步驟如下1.先檢查一下服務器上有沒有安裝gitgit --version如果出現版本號,說明服務器已經安裝git,如圖所示:2.如果沒有版本信息,則先安裝git&#xff1…

Django REST framework 序列化

創建一個序列化類 使用序列化有四種方式 使用json模塊,完全手寫使用django自帶的序列化模塊 1,# from django.core import serializers 2,# dataserializers.serialize(“json”,book_list)使用REST framework 帶的序列化方法&#xff0c…

基于SIMD的AVS整數反變換算法設計與優化

基于SIMD 的AVS 整數反變換算法設計與優化王玲娟,張剛**作者簡介:王玲娟,(1987-),女,在讀碩士,主要研究方向:視頻解碼算法通信聯系人:張剛,&#…

Word -- 列表重新編號

Word -- 列表重新編號office一言:我小心翼翼地灌溉,一日復一日地期待,那么費力,植成參天的喬木,豈愿見你終有一日從容赴死?問題 word 文檔早就想解決的一個問題,這次遇到了就上網找解決掉了&…

非持久連接和持久連接

非持久連接和持久連接 HTTP既可以使用非持久連接(nonpersistent connection),也可以使用持久連接(persistent connection)。HTTP/1.0使用非持久連接,HTTP/1.1默認使用持久連接。 非持久連接 讓我們查看一下非持久連接情況下從服務器到客戶傳送一個Web頁面…

計算機開機鍵鼠無法識別,我得電腦一開機就檢測不到鍵盤和鼠標

2005-10-18 16:06:131、開機后當出現dos界面時,按一下pause鍵(這個鍵在四個方向鍵的上邊,仔細找就能找到),如果計算機啟動停止,說明你的鍵盤起作用,主板在開機時就已經檢測到了鼠標鍵盤。啟動后不能使用鼠標鍵盤&#…

vs2003 局部友元訪問私有不可訪問_C++ 類:重載運算符與友元

18.類中重載運算符與友元上次節中學習了如何在類中重新定義賦值()運算符,實際上在一個自定義類中除了賦值()運算符外,類的對象是不可以直接使用運算符的,比如你在main函數中寫這樣的代碼會報錯:如果想解決這些報錯問題&#xff0c…

oracle sqlldr (一) 最基本語法

-- Create table create table DEPT2 (DEPTNO NUMBER(2) not null,DNAME VARCHAR2(14),LOC VARCHAR2(1000) ); alter table DEPT2add constraint DEPT_PK primary key (DEPTNO);------demo.ctl LOAD DATA INFILE * --數據在控制文件中 INTO TABLE DEPT2 INSERT ---默認加…

Django REST framework 視圖

上一部分代碼在序列化部分 類繼承順序 ############### mixins.py ################ # 類中調用的方法均在 GenericAPIView 類中實現,所以下列類需要結合 GenericAPIView 使用 class ListModelMixin(object) # 查看繼承類def list(self, reque…

AVS軟件解碼器的優化

AVS軟件解碼器的優化 董斌 , 姜昱明 (西安 電子科技大學計算機學院,陜西 西安,710071)) 摘 要: 主要研究了AVS標準的視頻壓縮部分,指出了影響解碼速度的瓶頸并提出了一種優化方案.使用從程序結構入手結合使用SIMD指令集的方案來優化AVS軟件解碼器.實驗結果表明優化方案可行并且…

IOS7.1.1真的像網上流傳的那么好?沒有任何問題么??

IOS7.1.1推送更新之后到處看到網上說711好的~~ 那么IOS7.1.1真的像網上現在流傳的那么好么? 其實不然,IOS7.1.1目前眾多網友反映說升級ios7.1.1之后APPstore連接不上了,提示無法連接到APPstore。 這個問題也不難解決~還是之前的老辦法~ 那么今…

三校生計算機對口本科有哪些學校,寶山三校生五月對口高考報名

多次復習生活不可能像你想象得那么好,但也不會像你想象得那么糟。我覺得人的脆弱和堅強都超乎自己的想象。多種方式結合起來復習單一的復習方法,易產生消極情緒和疲勞,如果采用交談復習法、討論復習法、自我檢查復習法多樣化的復習方法&#…

localhost 已拒絕連接_【Python】MongoDB數據庫的連接和操作

安裝Python 要連接 MongoDB 需要 MongoDB 驅動。pip安裝:python3 -m pip3 install pymongo創建數據庫import pymongo myclient pymongo.MongoClient("mongodb://localhost:27017/")mydb myclient["loaderman"]注意: 在 MongoDB 中&#xff0c…

checkbox已設置為checked--true-但不勾選問題解決方法(只第一次勾選有效)

一、出現的問題及解決方法: 今天在寫一個table相關插件的時候無意中發現了這樣一個問題,記得以前在寫這種控制checkbox選中與非選中的代碼時并沒有這種bug,當時也是用的checked屬性,而現在卻行不通了。 于是乎做了以下測試&#x…

Python 錯誤和異常小結[轉]

原文鏈接 http://blog.csdn.net/sinchb/article/details/8392827 事先說明哦,這不是一篇關于Python異常的全面介紹的文章,這只是在學習Python異常后的一篇筆記式的記錄和小結性質的文章。什么?你還不知道什么是異常,額... 1.Py…

Django REST framework 認證、權限和頻率組件

認證與權限頻率組件 身份驗證是將傳入請求與一組標識憑據(例如請求來自的用戶或其簽名的令牌)相關聯的機制。然后 權限 和 限制 組件決定是否拒絕這個請求。 簡單來說就是: 認證確定了你是誰權限確定你能不能訪問某個接口限制確定你訪問某…

高速率AVS整數變換的匯編實現與優化

1 引言 AVS標準Ⅲ采用的8x8整數變換在獲得較H.264更高的壓縮率和主觀圖像質量的同時,增加了算法的實現復雜性和時間開銷。本文重點研究AVS編解碼器的整數變換模塊,針對不同的算法實現模式,在原有Visual C6.0整數變換模…