日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

Weka学习二(聚类算法)

發(fā)布時(shí)間:2025/3/21 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Weka学习二(聚类算法) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

http://liouwei20051000285.blog.163.com/blog/static/25236742009101610445275/

上次我介紹了分類器的使用方法,這次我來(lái)介紹一下聚類算法。聚類算法在數(shù)據(jù)挖掘里面被稱之為無(wú)監(jiān)督學(xué)習(xí)(unsupervised learning),這是與分類算法(supervised learning)相對(duì)的。在它們兩者之間還一種叫做半監(jiān)督學(xué)習(xí)(semi-supervised learning)這個(gè)我會(huì)在后面的文章中重點(diǎn)介紹。所謂無(wú)監(jiān)督學(xué)習(xí)就是在預(yù)先不知道樣本類別的情況下,由聚類算法來(lái)判別樣本的類別的一種學(xué)習(xí)方法。

聚類算法的一般過(guò)程分為:

1.?????? 讀入需預(yù)測(cè)樣本

2.?????? 初始化聚類算法(并設(shè)置參數(shù))

3.?????? 使用聚類算法對(duì)樣本進(jìn)行聚類

4.?????? 打印聚類結(jié)果

我們來(lái)看下面的一個(gè)實(shí)例:

package com.csdn;

?

import java.io.File;

?

import weka.clusterers.SimpleKMeans;

import weka.core.DistanceFunction;

import weka.core.EuclideanDistance;

import weka.core.Instances;

import weka.core.converters.ArffLoader;

?

/*

?* Date: 2009.4.2

?* by: Wang Yi

?* Email: wangyi19840906@yahoo.com.cn

?* QQ: 270135367

?*

?*/

public class SimpleCluster {

?

??? /**

??? ?* @param args

??? ?*/

??? public static void main(String[] args) {

?????? // TODO Auto-generated method stub

?????? Instances ins = null;

?????? Instances tempIns = null;

??????

?????? SimpleKMeans KM = null;

?????? DistanceFunction disFun = null;

?????? try{

?????????? /*

?????????? ?* 1.讀入樣本

?????????? ?*/

?????????? File file= new File("C://Program Files//Weka-3-6//data//contact-lenses.arff");

?????????? ArffLoader loader = new ArffLoader();

?????????? loader.setFile(file);

?????????? ins = loader.getDataSet();

??????????

?????????? /*

?????????? ?* 2.初始化聚類器

?????????? ?* 3.6版本可以通過(guò)setDistanceFunction(DistanceFunction df)

?????????? ?* 函數(shù)設(shè)置聚類算法內(nèi)部的距離計(jì)算方式

?????????? ?* 而在3.5版本里面默認(rèn)的采用了歐幾里得距離

?????????? ?*/

?????????? KM = new SimpleKMeans();???????

?????????? //設(shè)置聚類要得到的類別數(shù)量

?????????? KM.setNumClusters(2);

??????????

?????????? /*

?????????? ?* 3.使用聚類算法對(duì)樣本進(jìn)行聚類

?????????? ?*/

?????????? KM.buildClusterer(ins);

??????????

?????????? /*

?????????? ?* 4.打印聚類結(jié)果

?????????? ?*/

?????????? tempIns = KM.getClusterCentroids();

?????????? System.out.println("CentroIds: " + tempIns);

??????????

??????????

?????? }catch(Exception e){

?????????? e.printStackTrace();

?????? }

??? }

}

我們可以看到讀入樣本的過(guò)程是與上一節(jié)的一樣的方法。在構(gòu)建聚類器時(shí)也是通過(guò)現(xiàn)有的類來(lái)實(shí)現(xiàn)的。現(xiàn)在weka的聚類算法有11種之多,我所了解的也就是一兩種算法而已。SimpleKMean是最簡(jiǎn)單的KMeans算法,因?yàn)榫垲愃惴ǖ暮诵氖峭ㄟ^(guò)距離來(lái)得到類別(類間相異,類內(nèi)相似),所以需要有一個(gè)計(jì)算距離的公式常見(jiàn)的就是歐幾里得距離了。在3.5版本中weka沒(méi)有考慮其它距離公式的情況,將SimpleKMean計(jì)算距離的方法默認(rèn)為歐幾里得距離。在3.6中就weka提供了setDistanceFunction(DistanceFunction df)的接口可以方便我們?cè)O(shè)置自己的距離計(jì)算方法。

有一點(diǎn)要注意,在上面的聚類過(guò)程中,我們將樣本的類別屬性也放在里面了,這樣做是不符合常識(shí)的,因?yàn)闃颖绢悇e屬性包含了大量的類別信息,可以誘導(dǎo)聚類算法得到很好的效果。但是這與我們的初衷是相背離的,所以在聚類之前我們要記住刪除掉類別屬性。

在第四步打印聚類結(jié)果是一個(gè)很簡(jiǎn)單的信息,里面包括了聚類的幾個(gè)中心點(diǎn)。在我們寫(xiě)程序時(shí),可以使用ClusterEvaluation類來(lái)打印更多的信息。

總結(jié)

以上是生活随笔為你收集整理的Weka学习二(聚类算法)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。