開始研究WEKA,一個開源java的數據挖掘工具。
HS沉寂這么多天,誰知道偏偏在我申請離職的時候給我安排了個任務,哎,無語。
於是,今天看了一天的Weka。
主要是看了HS提供的三個文章(E文,在google的幫助下看完的):
還有一個中文文檔:
http://www.doc88.com/p-881687347690.html
還有一個E文的PPT(
http://www.cs.ccsu.edu/~markov/weka-tutorial.pdf),還沒仔細看。里面有個數據挖掘經常用到的軟件的列表。
簡單學會了Weka的用法。
weka就是一個工具,他根據用戶輸入的N組數據,通過用戶指定的算法,如:回歸分析、分類分析、聚類分析、鄰近分析等,然后輸出一個統計分析的結果。還可以使用測試數據對統計結果進行驗證,以確認分析結果的可用性。
weka本身有一個GUI,通過java -jar weka.jar啟動。然后點擊Explorer啟動子程序(我只學了Explorer)。
在weka explorer中點擊OpenFile打開*.arff格式的數據。arff其實就是文本文件。
weka explorer頂部標簽的第二個標簽,可以進行分類相關的分析,如回歸分析、分類分析、臨近分析等。
利用第三個標簽為集群相關的分析可以進行聚類分析等。
算法是在標簽的Classifier中的Choose按鈕中選擇的,其中,
以樹的形式展示分類分析是用:Classify->Choose->Classifiers->trees->J48; 對應java類(weka.classifiers.trees.J48;)
回歸分析是:Classify->Choose->Classifiers->Functions->LinearRegression 剛剛注意到界面上有這個類(weka.classifiers.functions.LinearRegression),也許就是用java編程時要用到的。
聚類分析是:Cluster->Choose->clusterers->SimpleKMeans
鄰近分析是:Classify->Choose->Classifiers->lazy->IBK
WEKA Explorer的使用,在文檔(
http://www.doc88.com/p-881687347690.html)中的WEKA Explorer一節中有很詳細的介紹。請參考之。
通過Java可以很簡單的進行API的調用:如下代碼從一個arff文件中讀取數據,然后進行了回歸分析,然后打印了根據回歸分析結果預測的某個房屋的價格:
import java.io.FileNotFoundException; import java.io.IOException; import weka.classifiers.functions.LinearRegression; import weka.core.Instances; public class Weka { /** * @param args */ public static void main(String[] args) { String inputFile = "C:\\Documents and Settings\\Administrator\\My Documents\\Downloads\\weka-3-7-5\\weka-3-7-5\\my\\house.arff"; java.io.Reader r; try { r = new java.io.BufferedReader(new java.io.FileReader(inputFile)); Instances instances = new Instances(r); instances.setClassIndex(instances.numAttributes() - 1); LinearRegression linearRegression = new LinearRegression(); linearRegression.buildClassifier(instances); double[] coef = linearRegression.coefficients(); double myHouseValue = (coef[0] * 3198) + (coef[1] * 9669) + (coef[2] * 5) + (coef[3] * 3) + (coef[4] * 1) + coef[6]; System.out.println(myHouseValue); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (Exception e) { e.printStackTrace(); } } }