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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

Weka学习一(分类器算法)

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Weka学习一(分类器算法) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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

從前年開始使用weka最數(shù)據(jù)挖掘方面的研究,到現(xiàn)在有一年半的時間了。看到我們同組的兄弟寫了關(guān)于weka方面的總結(jié),我也想整理一下。因為網(wǎng)上的資料實在是太少,記得剛接手的時候,真是硬著頭皮看代碼。不過到現(xiàn)在看來,也積累了很多的代碼了。希望能夠在這里跟大家分享一下學(xué)習(xí)weka的樂趣與經(jīng)驗。

Weka是來之新西蘭懷卡托大學(xué)的一款開源軟件,主要是數(shù)據(jù)挖掘方面的一些算法的集合。這款軟件大概是當前數(shù)據(jù)挖掘領(lǐng)域最好的開源軟件了,當然國外還有其它一些組織維護的有自己的開源軟件,但是只有這款軟件應(yīng)用是比較廣泛的了。具體關(guān)于weka的信息可以到官網(wǎng)去查看http://www.cs.waikato.ac.nz/ml/weka/ ,軟件的下載也可大家到官網(wǎng)去。

我是從weka1.4一直用到現(xiàn)在的1.6版本的,其間weka在圖形界面上有一些變動,但是底層的框架結(jié)構(gòu)沒有太大的變化,主要是添加一些新的算法什么的。總之大家可以放心的使用。我現(xiàn)在積累的代碼是從1.5版本積累下來的,到現(xiàn)在1.6版本,集成起來一點問題都沒有,這大概也是我喜歡weka的一個原因。

數(shù)據(jù)挖掘的過程一般如下:

1.?????? 讀入訓(xùn)練、測試樣本

2.?????? 初始化分類器

3.?????? 使用訓(xùn)練樣本訓(xùn)練分類器

4.?????? 使用測試樣本測試分類器的學(xué)習(xí)效果

5.?????? 打印分類結(jié)果

我們現(xiàn)在看看一個簡單的實例

?

package com.csdn;

?

import java.io.File;

?

import weka.classifiers.Classifier;

import weka.classifiers.Evaluation;

import weka.core.Instance;

import weka.core.Instances;

import weka.core.converters.ArffLoader;

?

/*

?* Date: 2009.4.1

?* by: Wang Yi

?* Email: wangyi19840906@yahoo.com.cn

?* QQ: 270135367

?*

?*/

public class Test {

?

??? /**

??? ?* @param args

??? ?*/

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

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

?????? Instances ins = null;

??????

?????? Classifier cfs = null;

?????? try{

??????????

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

?????????? ?* 1.讀入訓(xùn)練、測試樣本

?????????? ?* 在此我們將訓(xùn)練樣本和測試樣本作為同一個樣本

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

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

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

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

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

??????????

?????????? //在使用樣本之前一定要首先設(shè)置instancesclassIndex,否則在使用instances對象是會拋出異常

?????????? ins.setClassIndex(ins.numAttributes()-1);

??????????

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

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

?????????? ?* 具體使用哪一種特定的分類器可以選擇,請將特定分類器的class名稱放入forName函數(shù)

?????????? ?* 這樣就構(gòu)建了一個簡單的分類器

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

?????????? cfs = (Classifier)Class.forName("weka.classifiers.bayes.NaiveBayes").newInstance();

??????????

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

?????????? ?* 3.使用訓(xùn)練樣本訓(xùn)練分類器

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

?????????? cfs.buildClassifier(ins);

??????????

??????????

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

?????????? ?* 4.使用測試樣本測試分類器的學(xué)習(xí)效果

?????????? ?* 在這里我們使用的訓(xùn)練樣本和測試樣本是同一個,在實際的工作中需要讀入一個特定的測試樣本

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

?????????? Instance testInst;

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

?????????? ?* Evaluation: Class for evaluating machine learning models

?????????? ?* 即它是用于檢測分類模型的類

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

?????????? Evaluation testingEvaluation = new Evaluation(ins);

?????? ??? int length = ins.numInstances();

?????????? for (int i =0; i < length; i++) {

????????????? testInst = ins.instance(i);

????????????? //通過這個方法來用每個測試樣本測試分類器的效果

????????????? testingEvaluation.evaluateModelOnceAndRecordPrediction(

????????????????? cfs, testInst);

?????? ??? }

??????????

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

?????????? ?* 5.打印分類結(jié)果

?????????? ?* 在這里我們打印了分類器的正確率

?????????? ?* 其它的一些信息我們可以通過Evaluation對象的其它方法得到

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

?????????? System.out.println( "分類器的正確率:" + (1- testingEvaluation.errorRate()));

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

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

?????? }

??? }

?

}

?

通過這個實例,我們可以看到在weka上做開發(fā)非常簡單的,每個模塊weka都提供了很好的支持。同時,我們可以在此基礎(chǔ)上對weka進行一個簡單的封裝。設(shè)計一個Util類,將數(shù)據(jù)讀取,以及分類器測試等功能放在這個Util類中共以后其它的程序使用。

?

獲取樣本Instances

/*

??? ?* .arff文件中獲取樣本Instances;

??? ?* 1.fileName instances的文件名

??? ?*/

??? public static Instances getInstances(String fileName) throws Exception{

?????? File file= new File(fileName);

?????? return getInstances(file);

??? }

?

/*

??? ?* .arff文件中獲取樣本Instances;

??? ?* 1.file 獲得instancesFile對象

??? ?*/

??? public static Instances getInstances(File file) throws Exception{

?????? Instances inst = null;

?????? try{

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

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

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

?????? }

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

?????????? throw new Exception(e.getMessage());

?????? }

?????? return inst;

??? }

?

獲得一個Evaluation對象:

/*

??? ?* 獲得一個Evaluation對象

??? ?* 1.h 一個已經(jīng)訓(xùn)練過的分類器

??? ?* 2.ins 測試樣本

??? ?*/

??? public static Evaluation getEvaluation(Classifier h,Instances ins){

?????? try{

?????????? Instance testInst;

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

?????????? ?* Evaluation: Class for evaluating machine learning models

?????????? ?* 即它是用于檢測分類模型的類

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

?????????? Evaluation testingEvaluation = new Evaluation(ins);

?????? ??? int length = ins.numInstances();

?????????? for (int i =0; i < length; i++) {

????????????? testInst = ins.instance(i);

????????????? //通過這個方法來用每個測試樣本測試分類器的效果

????????????? testingEvaluation.evaluateModelOnceAndRecordPrediction(

?????? ??????????? h, testInst);

??? ??? ??? }

?????? ??? return testingEvaluation;

?????? }

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

?????????? System.out.println("haha bug!");

?????????? System.out.println(e);

?????? }

?????? return null;?????

??? }

?

通過這幾個函數(shù)我們就將讀取instances對象的功能以及測試分類器的效果的功能封裝到兩個static函數(shù)中了,下次我們使用的時候就可以方便的調(diào)用這個接口了,可以省去我們寫這些代碼的時間了。

大家明白了嗎?還是比較簡單的吧。

《新程序員》:云原生和全面數(shù)字化實踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

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

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