原創(chuàng)|使用教程|編輯:鄭恭琳|2016-05-25 18:03:18.000|閱讀 415 次
概述:聚類是根據(jù)相關(guān)的個(gè)別項(xiàng)目自動(dòng)分組數(shù)據(jù)的過(guò)程。作為一種無(wú)監(jiān)督算法,其廣泛應(yīng)用于數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、B.I.(商業(yè)智能)應(yīng)用程序。下面我將為大家親試講解TeeChart如何執(zhí)行數(shù)據(jù)“集群”,并使用圖表“Tool”組件來(lái)選擇性地可視化結(jié)果。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
TeeChart Pro包括類和組件來(lái)執(zhí)行數(shù)據(jù)“集群”,并使用圖表“Tool”組件來(lái)選擇性地可視化結(jié)果。
聚類是根據(jù)相關(guān)的個(gè)別項(xiàng)目自動(dòng)分組數(shù)據(jù)的過(guò)程。
作為一種無(wú)監(jiān)督算法,其廣泛應(yīng)用于數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)、B.I.(商業(yè)智能)應(yīng)用程序。

一個(gè)可執(zhí)行的例子:
›› 點(diǎn)擊下載完整資源TeeChart_Clustering.zip
聚類算法可以處理自定義數(shù)據(jù),而不一定非得是TeeChart“Series”數(shù)據(jù)。
VCL和Firemonkey 的TeeClustering.pas單位包含抽象的“engine”類,執(zhí)行聚類算法。
這里提供三種不同的聚類方法:
這些類都來(lái)自一個(gè)共同的抽象類:TBaseClustering。
每個(gè)聚類方法都有自己的屬性,確定如何計(jì)算集群。計(jì)算之后,您可以訪問(wèn)集群屬性,這是TList TCluster對(duì)象。
TCluster包含子集群(Items[ ]),所以您可以檢查哪些輸入的數(shù)據(jù)項(xiàng)屬于集群,或在等級(jí)類型的情況下,訪問(wèn)樹形結(jié)構(gòu)(集群和子集群)。
上面的類不包含輸入的數(shù)據(jù)(您自己的數(shù)據(jù))。
數(shù)據(jù)通過(guò)一個(gè)“provider”類傳遞給聚類引擎。目前有一種數(shù)據(jù)提供者(TSeriesProvider)集群XY或XYZ系列點(diǎn)。
這個(gè)類在TeeClusteringTool.pas單位實(shí)現(xiàn),連同一個(gè)圖表工具類(TClusteringTool)使操作更容易也更自動(dòng)化。
示例運(yùn)行時(shí)代碼(也可以在設(shè)計(jì)時(shí)運(yùn)行,無(wú)需編碼):
uses TeeClusteringTool; var tool : TClusteringTool; tool:=TClusteringTool.Create(Self); tool.ParentChart:=Chart1; tool.Series:=Series1; // your series tool.Method:=cmKMeans; tool.KMeans.NumClusters:=5; tool.Execute;
執(zhí)行后,您可以在生成的輸出集群進(jìn)行循環(huán),例如:
var t : Integer; for t:=0 to tool.Clusters.Count-1 do Memo1.Lines.Add( ‘Cluster: ‘+IntToStr(t)+’ contains: ‘+ IntToStr(tool.Clusters[t].Count)+’ points’ );
該工具使用選擇的方法和參數(shù)自動(dòng)執(zhí)行集群,并可選擇性地用不同顏色來(lái)描繪每個(gè)源系列點(diǎn),顯示他們所屬的集群,同時(shí)或者在每組集群項(xiàng)目的周邊繪制多邊形,等等。
屬性:
ClusteringTool1.Method := cmHierarchical; ClusteringTool1.ColorEach := True; // paint Series with one color per cluster ClusteringTool1.ShowBounds := True; // draws convex polygons bounding each cluster points ClusteringTool1.Centers.Visible := True; // shows cluster centers ClusteringTool1.Centroids.Visible := True; // shows cluster centroids
其他屬性包括涂刷、畫筆和透明度,在繪制集群多邊形邊界時(shí)使用。
方法:
這里提供一些輔助方法:
// Obtain cluster’s center and centroid XY points in Series scales: var P : TPointFloat; P:=ClusteringTool1.GetClusterCenter( ClusteringTool1.Clusters[3] ); P:=ClusteringTool1.GetClusterCentroid( ClusteringTool1.Clusters[2] ); // Obtain an array of XY points (in screen pixel coordinates), that belong to cluster: var PP : TPointArray; ClusteringTool1.GetClusterPoints( ClusteringTool1.Clusters[4], PP); … PP:=nil; // Get cluster statistics: var S : TClusterStats; S:=ClusteringTool1.GetStats( ClusteringTool1.Clusters[0] );
每一個(gè)聚類算法需要不同的參數(shù):
K-Means:
ClusteringTool1.KMeans.NumClusters := 10; // Number of minimum clusters (“K”) ClusteringTool1.KMeans.MaxIterations := 1000; // Maximum number of iterations before stopping
Hierarchical:
ClusteringTool1.Hierarchical.NumClusters := 8; // Number of tree root clusters
QT:
ClusteringTool1.QTClustering.MinCount := 30; // Minimum number of points to form a cluster ClusteringTool1.QTClustering.MaxDiameter := 100; // Maximum “diameter” a cluster can grow
距離
集群計(jì)算是基于數(shù)據(jù)項(xiàng)和其他數(shù)據(jù)項(xiàng)之間的“距離”。有幾種方法來(lái)計(jì)算項(xiàng)目之間的“距離”。
算法是不可知論者,它們調(diào)用Provider(例如:Series provider)來(lái)獲得距離。
例如,在XY散點(diǎn)圖上,點(diǎn)之間的距離可以像是斜邊(畢達(dá)哥拉斯定理),也就是說(shuō),點(diǎn)XY和另一個(gè)XY之間的簡(jiǎn)單的歐幾里得距離(歐氏距離)。
距離計(jì)算的實(shí)現(xiàn):
例子:
ClusteringTool1.Distance := dmMinkowski; ClusteringTool1.MinkowskiLambda := 4;
鏈接
當(dāng)一個(gè)或兩個(gè)集群有一個(gè)以上的項(xiàng)目時(shí),有多種方法可以計(jì)算集群之間的“距離”。
這就是所謂的“鏈接”。
最簡(jiǎn)單的方法是使用每個(gè)集群“中心”(這意味著沒(méi)有發(fā)生聯(lián)系)。
其他鏈接方式的實(shí)現(xiàn):
lmSingle
也被稱為“minimum”。
集群A和B之間的距離是集群A的所有項(xiàng)目和集群B的所有項(xiàng)目之間的最小距離。
lmComplete
也稱為“maximum”。
集群A和B之間的距離是集群A的所有項(xiàng)目和集群B的所有項(xiàng)目之間的最大距離。
lmAverage
集群A和B之間的距離是集群A的所有項(xiàng)目和集群B的所有項(xiàng)目之間的平均距離。
lmWard
當(dāng)添加集群B項(xiàng)目到集群A時(shí),其結(jié)果是增加“誤差平方和”。
計(jì)算速度
集群的本質(zhì)是一個(gè)緩慢的過(guò)程。每個(gè)聚類方法有不同的性能瓶頸,與輸入數(shù)據(jù)項(xiàng)的數(shù)量成正比。
TeeClustering.pas單位大大地調(diào)整優(yōu)化了每個(gè)算法的速度,即使很多工作是需要找到更先進(jìn)的技術(shù),需要更少的CPU周期。
當(dāng)多個(gè)cpu可以一起使用時(shí),QT閾值算法有著并行性的好處。
速度的例子(重新審視):
(Time in milliseconds, Windows 8.1 x64 on Intel i7 4770 @ 3.4Ghz)
IDE XE8 Delphi, Win32, 5000 data points
| Algorithm | Single CPU | Multiple CPU |
|---|---|---|
| K-Means | 47 | 31 |
| Hierarchical | 4328 | 4156 |
| QT | 2859 | 703 |
注釋:
x64位可執(zhí)行文件速度稍快于32位。
速度也非常依賴“距離”的計(jì)算方法,用于比較數(shù)據(jù)。由于其計(jì)算了兩個(gè)數(shù)據(jù)XY值對(duì)之間的斜邊,默認(rèn)的歐幾里得計(jì)算有一個(gè)相當(dāng)大的CPU成本。
》》》
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自:慧都控件網(wǎng)