日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Weka学习二(聚类算法)

發布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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学习二(聚类算法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。