『壹』 用於數據挖掘的聚類演算法有哪些,各有何優勢
聚類方法的分類,主要分為層次化聚類演算法,劃分式聚類演算法,基於密度的聚類演算法,基於網格的聚類演算法,基於模型的聚類演算法等。
而衡量聚類演算法優劣的標准主要是這幾個方面:處理大的數據集的能力;處理任意形狀,包括有間隙的嵌套的數據的能力;演算法處理的結果與數據輸入的順序是否相關,也就是說演算法是否獨立於數據輸入順序;處理數據雜訊的能力;是否需要預先知道聚類個數,是否需要用戶給出領域知識;演算法處理有很多屬性數據的能力,也就是對數據維數是否敏感。
.聚類演算法主要有兩種演算法,一種是自下而上法(bottom-up),一種是自上而下法(top-down)。這兩種路徑本質上各有優勢,主要看實際應用的時候要根據數據適用於哪一種,Hierarchical methods中比較新的演算法有BIRCH主要是在數據體量很大的時候使用;ROCK優勢在於異常數據抗干擾性強……
關於數據挖掘的相關學習,推薦CDA數據師的相關課程,課程以項目調動學員數據挖掘實用能力的場景式教學為主,在講師設計的業務場景下由講師不斷提出業務問題,再由學員循序漸進思考並操作解決問題的過程中,幫助學員掌握真正過硬的解決業務問題的數據挖掘能力。這種教學方式能夠引發學員的獨立思考及主觀能動性,學員掌握的技能知識可以快速轉化為自身能夠靈活應用的技能,在面對不同場景時能夠自由發揮。點擊預約免費試聽課。
『貳』 不同解析度圖像的融合
遙感數據的融合是指採用一種復合模型結構,將不同感測器遙感影像數據源所提供的信息加以綜合,以獲取高質量的影像信息,同時消除各感測器信息間的信息冗餘和矛盾,加以互補,降低其不確定性,減少模糊度,以增強影像中信息清晰度,提高解譯精度、可靠性和使用率,以形成對目標相對完整一致的信息描述。
對地質礦產勘查而言,數據的融合目的主要是:①可以明顯地改善目標的顯示效果,將原始圖像中灰色調轉化為彩色調;②融合後圖像雜訊可以很好地被抑制,肉眼對地物判譯更加容易;③地物邊緣輪廓因彩色更加突出,地物紋理更加清晰。這些很明顯可以起到增強岩體、構造的可解性。
目前融合方法有:Lab變換、HIS變換、BROVEY變換、線形復合與乘積運算以及近幾年發展起來的小波變換等。這些融合方法在影像的處理上存在有不同偏向,因此要根據不同地物在影像的光譜表現上存在差異,採取不同的處理方法。
(一)微波遙感數據與TM數據融合處理
此次工作所採用的方法為可視化三維動態變換方法。
圖1-5 SAR圖像灰度拉伸關系圖
1.融合前的SAR數據特徵增強處理
為了突出SAR數據(彩圖1-5a)較高解析度的優勢,在融合前有必要對SAR進行灰度拉伸、紋理增強和細化處理減少雜訊等預處理。
(1)灰度線性拉伸
融合之前的拉伸方法不採用非線性拉伸,原因在於經過非線性拉伸後的圖像數據,原始灰度值的大小關系會發生變化,產生的灰度扭曲帶來了一些含義不明確的偽信息,影響解譯。因此,特別強調在增強局部灰度反差時保持原灰度關系的重要性。實驗表明,運用直觀而簡單的線性拉伸方法就可以達到反差增強的效果。其原理如圖1-5。
設A1、A2為輸入圖像的嵌位控制值,B1、B2為拉伸後圖像的最低和最高亮度值。
其輸入的圖像亮度值A1—A2被拉伸為B1—B2范圍,其中輸入亮度0—A1及A2—255分別被變換為B1、B2,如果B1=0、B2=255則拉大了輸入圖像的動態范圍,從而反差得到增強。這是嵌位控制的結果,從而保持了輸入圖像亮度的線性關系,即沒有改變A1到A2之間亮度值的大小關系,只是拉開了直方圖的動態范圍,從而加大了灰度間的差距,增強了影像的細微和突變結構。
(2)紋理能量增強
相鄰像元之間亮度值的差異(梯度)可作為紋理的測度。當差異大於一個閾值時,則認為該處存在著要考慮的紋理特徵;將此類特徵累積統計,則為紋理能量;當局部紋理特徵豐富時,則紋理能量大而表現為亮度值高。
SAR圖像主要提供的是空間信息,為了使融合後的圖像具有較高的空間分辨能力,對SAR圖像進行紋理增強及提取是必不可少的。為了突出地貌、線性構造等信息,採用直方圖偏度值法。其公式如下:
1∶25萬遙感地質填圖方法和技術
c(n)是對u進行壓縮或拉伸後的值。
利用此紋理值作為權重,對SAR進行高通濾波,可以突出紋理信息。
目前紋理能量增強主要靠模板(3×3、5×5、7×7等)實現,模板推移掃描對每個像元進行增強處理,考慮到增強紋理會帶來不必要的雜訊,模板的尺寸不易過大,試驗表明使用3×3、5×5兩個模板的增強效果顯著。
2.參與融合的非SAR數據的處理
在融合圖像中,參與融合的非SAR數據的貢獻就是它們的光譜信息。融合前對它們的處理以彩色增強為主,調整其亮度、色度、飽和度,拉開不同地物之間的色彩反差。對局部紋理的要求不高,有時為了保證光譜色彩,還允許犧牲部分紋理信息來確保融合圖像的總體效果。
通常所說的圖像增強是一維圖像增強,即先在單波段上進行反差增強,然後把增強後的三個波段合成在一起。這種方法在有些地區,由於地表信息接近,波段間的相關性強,合成的圖像反差小,色彩不鮮艷。因此,我們在反復試驗的實踐中,摸索出三維反差增強方法,獲得了色彩鮮艷且保留原始影像信息的彩色圖像(彩圖1-5b)。
三維反差增強技術的實質是,擴大同名點像元在合成的三個波段上的灰度差異,使該同名點合成的色彩鮮艷,達到彩色增強的目的;使圖像上不同地物間的微小的灰度差異也能增強成明顯的色彩差異,從而達到增強圖像信息的效果。這是一種用顏色來突出地質、地理信息的方法,這種方法比單純用灰度差異突出地質、地理信息更加有效。
實現三維反差增強技術有兩個約束條件:其一,增強後的圖像同名點像元的灰度值在三個波段上的灰度值仍然保持原來大小的相對關系,也就是說原來灰度值小的增強以後還是小的,原來灰度值大的增強以後還是大的;其二,增強後的圖像同名點像元在三個波段上的灰度值之和保持不變,只是同名點像元在三個波段上的灰度值的差異擴大,使彩色合成後的色彩鮮艷、信息豐富並保持原來標准假彩色合成的特點。
為了擴大不同地質體的光譜信息的差異,還可採用波段特徵差異光譜加權方法,其演算法如下:
設R,G,B為經過三維反差增強後的紅、綠、藍三個彩色分量;R0,G0,B0為輸出圖像的三個分量;Gb,Bg為波段特徵差異;α,β為兩個常數。
1∶25萬遙感地質填圖方法和技術
將生成的三個新分量再進行彩色合成,擴大了地物間的色彩差異,減少了相關性。上述融合方法的最大優點是可以對隔合圖像的銳度、灰度、色彩等空間信息分離並進行動態跟蹤處理,直到獲取滿意的結果為止。
(二)不同解析度多光譜數據融合處理
在乾旱裸露地區,利用Landsat TM L7衛星影像製作影像圖,與L5不同,L7有一個全色波段 B8,它的空間解析度為15 m,為了提高圖像解譯的可識別性,在提高空間解析度的同時,又充分利用多光譜波段的波譜信息,將L7自身所有的30 m空間解析度的多光譜波段(彩圖1-6a)與15 m解析度的全色波段進行信息融合,可得到高解析度的彩色圖像(彩圖1-6b)。同時我們在植被覆蓋試驗區,利用高解析度 SPOT衛星圖像(彩圖1-6c)與TM圖像的多光譜波段進行融合(彩圖1-6d),進而提高遙感解譯的可靠性,得到 TM圖像和SPOT圖像的彩色模擬,它的原理是:
首先將兩種解析度的圖像進行配准,配准精度應在一個像元以內,我們在乾旱裸露試驗區進行的四景L7圖像配准,最大擬合誤差為0.85像元;SPOT圖像16景與TM圖像的配准誤差最大為0.95像元。L7自身配准時糾正函數選擇一次多項式,不同感測器圖像配准時選擇二次多項式。
然後選擇的三個波段(乾旱裸露試驗區:7,4,1;植被覆蓋試驗區:5,3,2作HIS變換得到三個分量,用高解析度的圖像替代I分量,在進行反變換,重新得到RGB圖像。這個模擬圖像既有高解析度圖像的較高空間解析度,又具有彩色圖像的光譜信息。
『叄』 多源異構數據融合技術要用到什麼演算法
經緯儀引導數據的數據融合可以採用參數估計融合演算法,即對8組引導數據,按照某種估計准則函數,利用引導數據序列對目標在空間的位置值作出估計,得到目標准確的位置值,消除引導過程中的不確定性。 為准確估計目標的位置值(以Y為例),對8組引導數據進行線性觀測,得到的引導值為Cj,Y,j=1,2,3,…,n,其中:Cj為常值。 由於觀測有誤差,實際所得的引導值為:Ej=CjY十cj,其中ej為觀測誤差,服從均值為0的正態分布。 依據Bayes後驗估計理論,可得到n個引導數據的狀態最優估計為: ^Yop,(E1E2E3...En)=maxP(Y│E1E2E3...En) (1) Y^ 即位置的數據融合問題,可以轉化為求出滿足Y的最大後驗概率maxP(Y│E)的估計值Y(E)的問題。在經緯儀實時測量中,對多路引導源的異構引導數據,採用分布圖法進行數據合理性檢測,採用參數估計的邏輯規則進行數據融合,消除各引導數據的不確定性,可以獲得更准確、更可靠的引導數據,從而提高整個測量系統的工作性能。即使某一個甚至幾個引導源工作同時不正常時,其他引導源不受影響獨立地提供信息,指揮中心仍可依據非失效的引導數據獲知目標的准確位置,將失效的經緯儀很快的引導到目標觀測點,降低了整個測量系統的脆弱程度。
『肆』 k-means演算法怎麼為對稱矩陣進行聚類
幾種典型的聚類融合演算法:
1.基於超圖劃分的聚類融合演算法
(1)Cluster-based Similarity Partitioning Algorithm(GSPA)
(2)Hyper Graph-Partitioning Algorithm(HGPA)
(3)Meta-Clustering Algorithm(MCLA)
2.基於關聯矩陣的聚類融合演算法
Voting-K-Means演算法。
3.基於投票策略的聚類融合演算法
w-vote是一種典型的基於加權投票的聚類融合演算法。
同時還有基於互信息的聚類融合演算法和基於有限混合模型的聚類融合演算法。
二、基於關聯矩陣的聚類融合演算法——Voting-K-Means演算法
Voting-K-Means演算法是一種基於關聯矩陣的聚類融合演算法,關聯矩陣的每一行和每一列代表一個數據點,關聯矩陣的元素表示數據集中數據點對共同出現在同一個簇中的概率。
演算法過程:
1.在一個數據集上得到若干個聚類成員;
2.依次掃描這些聚類成員,如果數據點i和j在某個聚類成員中被劃分到同一個簇中,那麼就在關聯矩陣對應的位置計數加1;關聯矩陣中的元素值越大,說明該元素對應的兩個數據點被劃分到同一個簇中的概率越大;
3.得到關聯矩陣之後,Voting-K-Means演算法依次檢查關聯矩陣中的每個元素,如果它的值大於演算法預先設定的閥值,就把這個元素對應的兩個數據點劃分到同一個簇中。
Voting-K-Means演算法的優缺點:
Voting-K-Means演算法不需要設置任何參數,在聚類融合的過程中可以自動地的選擇簇的個數 並且可以處理任意形狀的簇。因為Voting-K-Means演算法在聚類融合過程中是根據兩個數據點共同出現在同一個簇中的可能性大小對它們進行劃分的,所以只要兩個數據點距離足夠近,它們就會被劃分到一個簇中。
Voting-K-Means演算法的缺點是時間復雜度較高,它的時間復雜度是O(n^2);需要較多的聚類成員,如果聚類成員達不到一定規模,那麼關聯矩陣就不能准確反映出兩個數據點出現在同一個簇的概率。
package clustering;import java.io.FileWriter;import weka.clusterers.ClusterEvaluation;import weka.clusterers.SimpleKMeans;import weka.core.DistanceFunction;import weka.core.EuclideanDistance;import weka.core.Instances;import weka.core.converters.ConverterUtils.DataSource;import weka.filters.unsupervised.attribute.Remove;public class Votingkmeans2 extends SimpleKMeans { /** 生成的序列號 */ private static final long serialVersionUID = 1557181390469997876L; /** 劃分的簇數 */ private int m_NumClusters; /** 每個劃分的簇中的實例的數量 */ public int[] m_ClusterSizes; /** 使用的距離函數,這里是歐幾里德距離 */ protected DistanceFunction m_DistanceFunction = new EuclideanDistance(); /** 實例的簇號賦值 */ protected int[] m_Assignments; /** 設定聚類成員融合閥值 */ private final static double THREASOD = 0.5; /** 生成一個聚類器 */ public void buildClusterer(Instances data) throws Exception{ final int numinst = data.numInstances(); // 數據集的大小 double [][]association = new double[numinst][numinst]; // 定義並初始化一個關聯矩陣 int numIteration = 40; // 設置生成的聚類成員數 final int k = (int)Math.sqrt(numinst); // 設置K-Means聚類演算法參數——簇數 for(int i = 0; i < numIteration; i++) { if(data.classIndex() == -1) data.setClassIndex(data.numAttributes() - 1); // 索引是從0開始 String[] filteroption = new String[2]; filteroption[0] = "-R"; filteroption[1] = String.valueOf(data.classIndex() + 1);// 索引是從1開始 Remove remove = new Remove(); remove.setOptions(filteroption); remove.setInputFormat(data); /* 使用過濾器模式生成新的數據集;新數據集是去掉類標簽之後的數據集 */ Instances newdata = weka.filters.Filter.useFilter(data, remove); /* 生成一個K-Means聚類器 */ SimpleKMeans sm = new SimpleKMeans(); sm.setNumClusters(k); sm.setPreserveInstancesOrder(true); // 保持數據集實例的原始順序 sm.setSeed(i); // 通過設置不同的種子,設置不同的簇初始中心點,從而得到不同的聚類結果 sm.buildClusterer(newdata); int[] assigm = sm.getAssignments(); // 得到數據集各個實例的賦值 /* 建立關聯矩陣 */ for(int j = 0; j < numinst; j++) { for(int m = j; m < numinst; m++) { if(assigm[j] == assigm[m]) { association[j][m] = association[j][m] + 1.0 / numIteration ; } } } } System.out.println(); /* 將生成的關聯矩陣寫入.txt文件(註:生成的txt文本文件在e:/result.txt中) */ FileWriter fw = new FileWriter("e://result.txt"); for(int j = 0; j < numinst; j++) { for(int m = j; m < numinst; m++) { //由於關聯矩陣是對稱的,為了改進演算法的效率,只計算矩陣的上三角 String number = String.format("%8.2f", association[j][m]); fw.write(number); } fw.write("\n"); } /* 處理關聯矩陣,分別考慮了兩種情況 :1.關聯矩陣中某個元素對應的兩個數據點已經被劃分到了不同的簇中 * 2.兩個數據點中有一個或者兩個都沒有被劃分到某個簇中。 */ int[] flag = new int[numinst]; int[] flagk = new int[k]; int[] finallabel = new int[numinst]; for(int m = 0; m < numinst; m++) { for(int n = m; n < numinst; n++) { if(association[m][n] > THREASOD) { if(flag[m] == 0 && flag[n] == 0) { // 兩個數據點都沒有被劃分到某個簇中, int i = 0; // 將他們劃分到同一個簇中即可 while (i < k && flagk[i] == 1) i = i + 1; finallabel[m] = i; finallabel[n] = i; flag[m] = 1; flag[n] = 1; flagk[i] = 1; } else if (flag[m] == 0 && flag[n] == 1) { // 兩個數據點中有一個沒有被劃分到某個簇中, finallabel[m] = finallabel[n]; // 將他們劃分到同一個簇中即可 flag[m] = 1; } else if (flag[m] == 1 && flag[n] == 0) { finallabel[n] = finallabel[m]; flag[n] = 1; } else if (flag[m] == 1 && flag[n] == 1 && finallabel[m] != finallabel[n]) { // 兩個數據點已被劃分到了不同的簇中, flagk[finallabel[n]] = 0; // 將它們所在的簇合並 int temp = finallabel[n]; for(int i = 0; i < numinst; i++) { if(finallabel[i] == temp) finallabel[i] = finallabel[m]; } } } } } m_Assignments = new int[numinst]; System.out.println("基於關聯矩陣的聚類融合演算法——Voting-K-Means演算法的最終聚類結果"); for(int i = 0; i < numinst; i++) { m_Assignments[i] = finallabel[i]; System.out.print(finallabel[i] + " "); if((i+1) % 50 == 0) System.out.println(); } for(int i = 0; i < k; i++) { if(flagk[i] == 1) m_NumClusters++; } } /** * return a string describing this clusterer * * @return a description of the clusterer as a string */ public String toString() { return "Voting-KMeans\n"; } public static void main(String []args) { try {String filename="e://weka-data//iris.arff"; Instances data = DataSource.read(filename); Votingkmeans2 vk = new Votingkmeans2(); vk.buildClusterer(data); /* 要生成Voting-K-Means的聚類評估結果包括准確率等需要覆蓋重寫toString()方法; * 因為沒有覆蓋重寫,所以這里生產的評估結果沒有具體內容。 */ ClusterEvaluation eval = new ClusterEvaluation(); eval.setClusterer(vk); eval.evaluateClusterer(new Instances(data)); System.out.println(eval.clusterResultsToString()); } catch (Exception e) { e.printStackTrace(); }}}
分析代碼時注意:得到的類成員變數m_Assignments就是最終Voting-K-Means聚類結果;由於是採用了開源機器學習軟體Weka中實現的SimpleKMeans聚類演算法,初始時要指定簇的個數,這里是數據集大小開根號向下取整;指定的閥值為0.5,即當關聯矩陣元素的值大於閥值時,才對該元素對應的兩個數據點進行融合,劃分到一個簇中,考慮兩種情況,代碼注釋已有,這里不再詳述。但聚類融合的實驗結果並不理想,鶯尾花數據集irsi.arff是數據挖掘實驗中最常用的數據集,原數據集共有三個類;但本實驗進行四十個聚類成員的融合,其最終聚類結果劃分成兩個簇;其原因可能有兩個:一是演算法本身的問題,需要使用其他更加優化的聚類融合演算法;二是實現上的問題,主要就在聚類結果的融合上,需要進行一步對照關聯矩陣進行邏輯上的分析,找出代碼中的問題。關聯矩陣文本文件http://download.csdn.net/detail/lhkaikai/7294323
---------------------
本文來自 Turingkk 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/lhkaikai/article/details/25004823?utm_source=