Slide 118
Slide 118 text
import …
def cols = ["Body", "Sweetness", "Smoky", "Medicinal", "Tobacco", "Honey",
"Spicy", "Winey", "Nutty", "Malty", "Fruity", "Floral"]
def numClusters = 5
def loader = new CSVLoader(file: 'whiskey.csv')
def clusterer = new SimpleKMeans(numClusters: numClusters, preserveInstancesOrder: true)
def instances = loader.dataSet
instances.deleteAttributeAt(0) // remove RowID
clusterer.buildClusterer(instances)
println ' ' + cols.join(', ')
def dataset = new DefaultCategoryDataset()
clusterer.clusterCentroids.eachWithIndex{ Instance ctrd, num ->
print "Cluster ${num+1}: "
println ((1..cols.size()).collect{ sprintf '%.3f', ctrd.value(it) }.join(', '))
(1..cols.size()).each { idx ->
dataset.addValue(ctrd.value(idx), "Cluster ${num+1}", cols[idx-1]) }
}
def clusters = (0..
clusters[cnum] << instances.get(idx).stringValue(0) }
clusters.each { k, v ->
println "Cluster ${k+1}:"
println v.join(', ')
}
def plot = new SpiderWebPlot(dataset: dataset)
def chart = new JFreeChart('Whiskey clusters', plot)
SwingUtil.show(new ChartPanel(chart))
Whiskey – clustering with radar plot and weka
Body, Sweetness, Smoky, Medicinal, Tobacco, Honey, Spicy, Winey, Nutty, Malty, Fruity, Floral
Cluster 1: 3.800, 1.600, 3.600, 3.600, 0.600, 0.200, 1.600, 0.600, 1.000, 1.400, 1.200, 0.000
Cluster 2: 2.773, 2.409, 1.545, 0.045, 0.000, 1.818, 1.591, 2.000, 2.091, 2.136, 2.136, 1.591
Cluster 3: 1.773, 2.455, 1.318, 0.636, 0.000, 0.636, 1.000, 0.409, 1.636, 1.364, 1.591, 1.591
Cluster 4: 1.500, 2.233, 1.267, 0.267, 0.000, 1.533, 1.400, 0.700, 1.000, 1.900, 1.900, 2.133
Cluster 5: 2.000, 2.143, 1.857, 0.857, 1.000, 0.857, 1.714, 1.000, 1.286, 2.000, 1.429, 1.714
Cluster 1:
Ardbeg, Clynelish, Lagavulin, Laphroig, Talisker
Cluster 2:
Aberfeldy, Aberlour, Ardmore, Auchroisk, Balmenach, BenNevis, Benrinnes, Benromach,
BlairAthol, Dailuaine, Dalmore, Edradour, Glendronach, Glendullan, Glenfarclas,
Glenrothes, Glenturret, Longmorn, Macallan, Mortlach, RoyalLochnagar, Strathisla
Cluster 3:
ArranIsleOf, Aultmore, Balblair, Cardhu, Craigganmore, Dufftown, GlenGrant, GlenKeith,
GlenScotia, GlenSpey, Glenfiddich, Glenmorangie, Isle of Jura, Mannochmore, Miltonduff,
Oban, Speyside, Springbank, Strathmill, Tamnavulin, Teaninich, Tomore
Cluster 4:
AnCnoc, Auchentoshan, Belvenie, Benriach, Bladnoch, Bowmore, Bruichladdich, Bunnahabhain,
Dalwhinnie, Deanston, GlenElgin, GlenGarioch, GlenMoray, GlenOrd, Glenallachie, Glengoyne,
Glenkinchie, Glenlivet, Glenlossie, Highland Park, Inchgower, Knochando, Linkwood,
Loch Lomond, Scapa, Speyburn, Tamdhu, Tobermory, Tomatin, Tomintoul
Cluster 5:
Caol Ila, Craigallechie, GlenDeveronMacduff, OldFettercairn,
OldPulteney, RoyalBrackla, Tullibardine