Weka学习二(聚类算法)
http://liouwei20051000285.blog.163.com/blog/static/25236742009101610445275/
上次我介紹了分類器的使用方法,這次我來介紹一下聚類算法。聚類算法在數據挖掘里面被稱之為無監督學習(unsupervised learning),這是與分類算法(supervised learning)相對的。在它們兩者之間還一種叫做半監督學習(semi-supervised learning)這個我會在后面的文章中重點介紹。所謂無監督學習就是在預先不知道樣本類別的情況下,由聚類算法來判別樣本的類別的一種學習方法。
聚類算法的一般過程分為:
1.?????? 讀入需預測樣本
2.?????? 初始化聚類算法(并設置參數)
3.?????? 使用聚類算法對樣本進行聚類
4.?????? 打印聚類結果
我們來看下面的一個實例:
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版本可以通過setDistanceFunction(DistanceFunction df)
?????????? ?* 函數設置聚類算法內部的距離計算方式
?????????? ?* 而在3.5版本里面默認的采用了歐幾里得距離
?????????? ?*/
?????????? KM = new SimpleKMeans();???????
?????????? //設置聚類要得到的類別數量
?????????? KM.setNumClusters(2);
??????????
?????????? /*
?????????? ?* 3.使用聚類算法對樣本進行聚類
?????????? ?*/
?????????? KM.buildClusterer(ins);
??????????
?????????? /*
?????????? ?* 4.打印聚類結果
?????????? ?*/
?????????? tempIns = KM.getClusterCentroids();
?????????? System.out.println("CentroIds: " + tempIns);
??????????
??????????
?????? }catch(Exception e){
?????????? e.printStackTrace();
?????? }
??? }
}
我們可以看到讀入樣本的過程是與上一節的一樣的方法。在構建聚類器時也是通過現有的類來實現的。現在weka的聚類算法有11種之多,我所了解的也就是一兩種算法而已。SimpleKMean是最簡單的KMeans算法,因為聚類算法的核心是通過距離來得到類別(類間相異,類內相似),所以需要有一個計算距離的公式常見的就是歐幾里得距離了。在3.5版本中weka沒有考慮其它距離公式的情況,將SimpleKMean計算距離的方法默認為歐幾里得距離。在3.6中就weka提供了setDistanceFunction(DistanceFunction df)的接口可以方便我們設置自己的距離計算方法。
有一點要注意,在上面的聚類過程中,我們將樣本的類別屬性也放在里面了,這樣做是不符合常識的,因為樣本類別屬性包含了大量的類別信息,可以誘導聚類算法得到很好的效果。但是這與我們的初衷是相背離的,所以在聚類之前我們要記住刪除掉類別屬性。
在第四步打印聚類結果是一個很簡單的信息,里面包括了聚類的幾個中心點。在我們寫程序時,可以使用ClusterEvaluation類來打印更多的信息。
總結
以上是生活随笔為你收集整理的Weka学习二(聚类算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Weka学习一(分类器算法)
- 下一篇: Weka学习三(ensemble算法)