1. 程式人生 > >完整的最簡單的譜聚類python程式碼

完整的最簡單的譜聚類python程式碼

針對karate_club資料集,做了譜聚類。由於是2-way clustering,比較簡單,得到了圖的新的表示空間之後,沒有做k-means,僅僅針對正規化後的拉普拉斯矩陣的第二特徵值做了符號判斷,這和 Spectral Clustering Tutorial 一文中的描述一致。

引用了numpy scipy matplotlib networkx包


#coding=utf-8 #MSC means Multiple Spectral Clustering  import numpy as np import scipy as sp import scipy.linalg as linalg import networkx as nx import matplotlib.pyplot as plt def getNormLaplacian(W):  """input matrix W=(w_ij)  "compute D=diag(d1,...dn)  "and L=D-W  "and Lbar=D^(-1/2)LD^(-1/2)  "return Lbar  """  d=[np.sum(row) for row in W]  D=np.diag(d)  L=D-W  #Dn=D^(-1/2)  Dn=np.power(np.linalg.matrix_power(D,-1),0.5)  Lbar=np.dot(np.dot(Dn,L),Dn)  return Lbar def getKSmallestEigVec(Lbar,k):  """input  "matrix Lbar and k  "return  "k smallest eigen values and their corresponding eigen vectors  """  eigval,eigvec=linalg.eig(Lbar)  dim=len(eigval)  #查詢前k小的eigval  dictEigval=dict(zip(eigval,range(0,dim)))  kEig=np.sort(eigval)[0:k]  ix=[dictEigval[k] for k in kEig]  return eigval[ix],eigvec[:,ix] def checkResult(Lbar,eigvec,eigval,k):  """  "input  "matrix Lbar and k eig values and k eig vectors  "print norm(Lbar*eigvec[:,i]-lamda[i]*eigvec[:,i])  """  check=[np.dot(Lbar,eigvec[:,i])-eigval[i]*eigvec[:,i] for i in range(0,k)]  length=[np.linalg.norm(e) for e in check]/np.spacing(1)  print("Lbar*v-lamda*v are %s*%s" % (length,np.spacing(1))) g=nx.karate_club_graph() nodeNum=len(g.nodes()) m=nx.to_numpy_matrix(g) Lbar=getNormLaplacian(m) k=2 kEigVal,kEigVec=getKSmallestEigVec(Lbar,k) print("k eig val are %s" % kEigVal) print("k eig vec are %s" % kEigVec) checkResult(Lbar,kEigVec,kEigVal,k) #跳過k means,用最簡單的符號判別的方法來求點的歸屬 clusterA=[i for i in range(0,nodeNum) if kEigVec[i,1]>0] clusterB=[i for i in range(0,nodeNum) if kEigVec[i,1]<0] #draw graph colList=dict.fromkeys(g.nodes()) for node,score in colList.items():  if node in clusterA:   colList[node]=0  else:   colList[node]=0.6 plt.figure(figsize=(8,8)) pos=nx.spring_layout(g) nx.draw_networkx_edges(g,pos,alpha=0.4) nx.draw_networkx_nodes(g,pos,nodelist=colList.keys(),   node_color=colList.values(),   cmap=plt.cm.Reds_r) nx.draw_networkx_labels(g,pos,font_size=10,font_family='sans-serif') plt.axis('off') plt.title("karate_club spectral clustering") plt.savefig("spectral_clustering_result.png") plt.show()

相關推薦

完整簡單python程式碼

針對karate_club資料集,做了譜聚類。由於是2-way clustering,比較簡單,得到了圖的新的表示空間之後,沒有做k-means,僅僅針對正規化後的拉普拉斯矩陣的第二特徵值做了符號判斷,這和 Spectral Clustering Tutorial 一

轉:完整簡單python代碼

得到 for details -c 簡單的 enum off ads odin http://blog.csdn.net/waleking/article/details/7584084 針對karate_club數據集,做了譜聚類。由於是2-way clusterin

python實踐

xlabel 部分 sample view from res fit float enume 聚類後: # -*- coding: utf-8 -*-"""Created on 09 05 2017@author: similarface"""imp

演算法入門教程(三)—— 求f^TLf的小值

在上一篇部落格中,我們知道目標函式變為 argmin⁡f∈R6fTLfarg \min \limits_{f \in \R^6} f^TLfargf∈R6min​fTLf,即找到一個fff,使得 fTLff^TLffTLf 取得最小值 這篇部落格將通過求導的方

14 演算法 - 程式碼案例六- (SC)演算法案例

13 聚類演算法 - 譜聚類 需求 使用scikit的相關API建立模擬資料,然後使用譜聚類演算法進行資料聚類操作,並比較演算法在不同引數情況下的聚類效果。 相關API:https://scikit-learn.org/stable/modules/generated/sklearn.cluster.

原理簡述(含實驗程式碼

Spectral clustering(譜聚類) 是一種基於圖論的聚類方法,它能夠識別任意形狀的樣本空間並收斂於全域性最優解。其基本的思想是將樣本資料進行相似性計算得到相似度矩陣,然後將相似矩陣轉換到Laplacian 矩陣 (拉普拉斯矩陣),做 Laplacian 矩陣

Python進行無監督學習的幾種熱門的演算法

無監督學習是機器學習技術中的一類,用於發現數據中的模式。本文介紹用Python進行無監督學習的幾種聚類演算法,包括K-Means聚類、分層聚類、t-SNE聚類、DBSCAN聚類等。 無監督學習是機器學習技術中的一類,用於發現數據中的模式。無監督演算法的資料沒有標註,這意味著只提供輸入變數(X),

——演算法以及Python實現

譜聚類(spectral cluster)可以視為一種改進的Kmeans的聚類演算法。常用來進行影象分割。缺點是需要指定簇的個數,難以構建合適的相似度矩陣。優點是簡單易實現。相比Kmeans而言,處理高維資料更合適。 核心思想 構建樣本點的相似度矩陣(圖

(Spectral Clustering)原理及Python實現

譜聚類原理及Python實現 圖模型   無向帶權圖模型 G=<V,E> G =< V ,

演算法及其程式碼(Spectral Clustering)

簡介 文章將介紹譜聚類(spectral clustering)的基本演算法,以及在matlab下的程式碼實現。介紹內容將包括: 從圖分割角度直觀理解譜聚類譜聚類演算法步驟資料以及實現程式碼 本文將不會涉及細節化的證明和推導,如有興趣可參考july大

Ng演算法的Matlab簡單實現

請編寫一個譜聚類演算法,實現“Normalized Spectral Clustering—Algorithm 3 (Ng 演算法)” 結果如下 譜聚類演算法核心步驟都是相同的: •利用點對之間的相似性,構建親和度矩陣; •構建拉普拉斯矩陣; •求解拉普拉斯矩陣最小的

python實現

什麼是譜聚類? 就是找到一個合適的切割點將圖進行切割,核心思想就是: 使得切割的邊的權重和最小,對於無向圖而言就是切割的邊數最少,如上所示。但是,切割的時候可能會存在區域性最優,有以下兩種方法: (1)RatioCut:核心是要求劃分出來的子圖的節點數儘可能的大 分母變為子圖的節點的個數 。 (2)NC

分析之

空間聚類 family 數據集 .cn 存在 聚類算法 array 全局最優 傳統 聚類根據給定的樣本數據集定義一個描述成對數據點相似度的親合矩陣,並且計算矩陣的特征值和特征向量 , 然後選擇合適 的特征向量聚類不同的數據點。 譜聚類可以在任意形狀的樣本空間聚類,且

利用算法解決非完全圖的

out img 通過 ctr 技術 href 是我 sta 選擇   在處理非完全圖的聚類時候,很難找到一個有效的聚類算法去做聚類。   對於下圖來說,10號點和15號點的位置相隔並不是那麽近,如用普通聚類算法對下圖做聚類,通常會把10號點和15號點聚在一個類上,所以一般的

代碼驗證ncut和的系數

mark div dia source nes pos cnblogs 驗證 rand W = rand(30); W = W+W'; I = cell(3,1); I{1} = 1:10; I{2} = 11:20; I{3} = 21:30; vol

轉:

推導 end 常用 nal poi 但是 blog 正是 四個步驟 http://www.cnblogs.com/fengyan/archive/2012/06/21/2553999.html 譜聚類 給你博客園上若幹個博客,讓你將它們分成K類,你會怎樣做

算法總結】

logs 缺點 文字檢測 什麽 spa 公司 聚類 16px 總結 前言:以前只是調用過譜聚類算法,我也不懂為什麽各家公司都問我一做文字檢測的這個算法具體咋整的,沒整明白還給我掛了哇擦嘞?訊飛和百度都以這個理由刷本寶,今天一怒把它給整吧清楚了,下次誰再問來!說不暈你算我輸!

梯度下降法實現簡單線性迴歸問題python實現

梯度下降法是非常常見的優化方法,在神經網路的深度學習中更是必會方法,但是直接從深度學習去實現,會比較複雜。本文試圖使用梯度下降來優化最簡單的LSR線性迴歸問題,作為進一步學習的基礎。 import numpy as np import pandas as pd from numpy import *

thinkphp 5 自動生成模組,簡單方式,一句程式碼

  直接在專案入口檔案中加上最後一句就夠了     可以不依賴自動生成檔案,直接使用預設目錄生成模組,例如: // 定義應用目錄 define('APP_PATH', __DIR__ . '/../application/'); // 載入框架引

TensorFlow 安裝簡單的辦法 —— 針對 python 使用者

搞人工智慧不能不知道 TensorFlow ,知道 TensorFlow 你就必須得知道這個最簡單的辦法,不用苦苦查閱官方文件,一串命令即可完成所有安裝。 Anaconda 是一個 python 版本管理的軟體,同時支援很多 科學計算庫的安裝 安裝 GPU 版的 TensorFlow 指