1. 程式人生 > >weka學習筆記-持續更新

weka學習筆記-持續更新

weka記錄
evaluator:評估者
supervised:監督
資料分析是確定性問題的處理,資料探勘是不確定性問題的處理
資料分析:一般要分析的目標比較明確,分析條件也比較清楚。
資料探勘:目標不是很清晰,要依靠挖掘演算法來找出隱藏在大量資料中的規則、模式、規律等。

資料探勘

是指將大量資料轉變為有實際意義的模式和規則。並且,它還可以分為兩種型別:直接的和間接的。

直接的:您會嘗試預測一個特定的資料點 — 比如,以給定的一個房子的售價來預測鄰近地區內的其他房子的售價。


間接的:資料探勘中,您會嘗試建立資料組或找到現有資料內的模式 — 比如,建立 “中產階級婦女”的人群。實際上,每次的美國人口統計都是在進行資料探勘,政府想要收集每個國民的資料並將它轉變為有用資訊。

迴歸:意思是根據現有的資料預測未來資料的值,對於迴歸模型,只能有 NUMERIC 或 DATE 列。最後,以逗號分割的格式提供每行資料

屬性宣告的格式為 
@attribute <attribute-name> <datatype> 
其中<attribute-name>是必須以字母開頭的字串。和關係名稱一樣,如果這個字串包含空格,它必須加上引號。 
WEKA支援的<datatype>有四種,分別是 
numeric-------------------------數值型 
<nominal-specification>-----分類(nominal)型 
string----------------------------字串型 
date [<date-format>]--------日期和時間型 
其中<nominal-specification> 和<date-format> 將在下面說明。還可以使用兩個型別“integer”和“real”,但是WEKA把它們都當作“numeric”看待。注意“integer”,“real”,“numeric”,“date”,“string”這些關鍵字是區分大小寫的,而“relation”“attribute ”和“date”則不區分。



Weka只可以接受以下格式的資料來源,csv、arff、jdba(sql 語句的查詢結果)、bsi 這些格式
WEKA 建議的載入資料的格式是 arff (ARFF),您可以在其中定義所載入資料的型別,然後再提供資料本身

.XLS -> .csv
Excel的XLS檔案可以讓多個二維表格放到不同的工作表(Sheet)中,我們只能把每個工作表存成不同 的CSV檔案。開啟一個XLS檔案並切換到需要轉換的工作表,另存為CSV型別,點“確定”、“是”忽略提示即可完成操作。


.csv -> .arff
將 CSV轉換為ARFF最迅捷的辦法是使用WEKA所帶的命令列工具。
在WEKA 3.5中提供了一個“Arff Viewer”模組,我們可以用它開啟一個CSV檔案將進行瀏覽,然後另存為ARFF檔案。
進入“Exploer”模組,從上方的按鈕中開啟 CSV檔案然後另存為ARFF檔案亦可。

weka的讀取檔案中文亂碼問題:
tips:XLS檔案另存為時可在工具-web選項中選定utf-8
tips:在RunWeka.ini配置檔案中fileEncoding=Cp1252改成UTF-8

資料預處理有多種方法:資料清理,資料整合,資料變換,資料歸約等
主要方法:(1)空缺值處理 (2)噪聲資料處理


Weka 的二次開發。Weka 的功能可以分為以下幾類: 
(1)資料的預處理,Weka能對資料集進行一般的預處理工作,如離散化(Discretization對資料進行裝箱分類)、取樣(resampling)、屬性選擇(attributeselection)、轉換和合並屬性(transforming 和 combining attributes)、正交化(normalization)等; 
tips:Choose”某個“Filter”,可以實現篩選資料或者對資料進行某種變換。資料預處理主要就利用它來實現。

(2)分類(Classfly),Weka能對通過分類演算法對資料進行分類,分類演算法有很多如決策樹 Visualize tree  和決策表、基於例項的分類、支援向量集、多層感知器神經網路、logistic 迴歸、Bayes網路等[36]; 
tips:Classification包中經典DM演算法“CART-分類迴歸樹演算法”,“ID3-決策樹分類演算法”,“KNN-k最近鄰演算法工具類”,“NaiveBayes-樸素貝葉斯演算法”

(3)聚類(Cluster),Weka 包含很多聚類演算法,如 K-Means,EM(期望最大化演算法),Cobweb,X-Means,FarthestFirst  
tips:Clustering包中經典DM演算法”BIRCH-層次聚類演算法“,”K-Means-K均值演算法“,”EM(期望最大化演算法)“,”FarthestFirst “

(4)關聯規則(Associate weka),Weka 實現的關聯規則有:Apriori,PredictiveApriori,Tertius 等[38];
tips:AssociationAnalysis包中經典演算法”Apriori-關聯規則挖掘演算法“,”FPTree-頻繁模式樹演算法“
 
(5)屬性選擇(Select attributes),Weka 的屬性選擇方法有InfoGain, best-first、forward selection、random、exhaustive、genetic algorithm、ranking、correlation-based、wrapper、information gain、chi-squared 等[39]; 

(6)資料的視覺化展示(Visualize tree),決策表,決策樹,Weka 提供了從不同角度觀察資料的特點。 



用 weka.core.Utils 類中的函式 splitOptions 將一個命令列字串轉換成一下陣列
String[] options = weka.core.Utils.splitOptions("-R 1");  

設定weka資料類別:要對資料集進行分類,第一步要指 定資料集中哪一列做為類別,如果這一步忘記了(事實上經常會忘記)會出現“Class index is negative (not set)!”這個錯誤,設定某一列為類別用 Instances 類的成員方 法 setClassIndex ,要設定最後一列為類別則可以用 Instances 類的 numAttributes()成員方法得到屬性的個數再減 1。

在WEKA中,待預測的目標(輸出)被稱作Class屬性,這應該是來自分類任務的“類”。一般的,若Class屬性是分型別時我們的任務才叫分類,Class屬性是數值型時我們的任務叫回歸。


模型應用
現在我們要用生成的模型對那些待預測的資料集進行預測了。注意待預測資料集和訓練用資料集各個屬性的設定必須是一致的。即使你沒有待預測資料集的Class屬性的值,你也要新增這個屬性,可以將該屬性在各例項上的值均設成缺失值。

在“Test Opion”中選擇“Supplied test set”,並且“Set”成你要應用模型的資料集,這裡是“bank-new.arff”檔案。
現在,右鍵點選“Result list”中剛產生的那一項,選擇“Re-evaluate model on current test set”。右邊顯示結果的區域中會增加一些內容,告訴你該模型應用在這個資料集上表現將如何。如果你的Class屬性都是些缺失值,那這些內容是無意義 的,我們關注的是模型在新資料集上的預測值。


現在點選右鍵選單中的“Visualize classifier errors”,將彈出一個新視窗顯示一些有關預測誤差的散點圖。點選這個新視窗中的“Save”按鈕,儲存一個Arff檔案。開啟這個檔案可以看到在倒 數第二個位置多了一個屬性(predictedpep),這個屬性上的值就是模型對每個例項的預測值。


聚類結果分析:
Within cluster sum of squared error
這是評價聚類好壞的標準,數值越小說明同一簇例項之間的距離越小。也許你得到的數值會不一樣;實際上如果把“seed”引數改一下,得到的這個數值就可能會不一樣。我們應該多嘗試幾個seed,並採納這個數值最小的那個結果。





Evaluation 類用法: 以classifier.buildClassifier( m_instances )作為區分是否分開訓練集和測試集!!

1.如果沒有分開訓練集和測試集,crossValidateModel 方法的四個引數分別為,第一個是分類器,第二個是在某個資料集上評 價的資料集,第三個引數是交叉檢驗的次數(10 是比較常見的),第四個是一個隨機數物件。
如eval.crossValidateModel(classifier, m_instances, 10, new Random(1)); 

2.如果有訓練集和測試集,evaluateModel方法,方法中的引數為:第一個為一個訓練過的分類器,第二個引數是在某個資料集上評價的資料集。如eval.evaluateModel( classifier, m_instances ); 
 
Evaluation 類提供toClassDetailsString,toSummaryString, toMatrixString 等輸入方式!!


特徵選擇


常見三種搜尋方法
(1)BestFirst最好優先原則。是一種貪心搜尋策略。
(2)GreedyStepwise向前或向後的單步搜尋。
(3)Ranker對屬性值排序。

如果選用此評價器,則搜尋方法必須用Ranker
(1)CorrelationAttributeEval根據單個屬性和類別的相關性進行選擇。
(2)GainRatioAttributeEval根據資訊增益比選擇屬性。
(3)InfoGainAttributeEval根據資訊增益選擇屬性。
(4)OneRAttributeEval根據OneR分類器評估屬性。
(5)PrincipalComponents主成分分析(PCA)。
(6)ReliefFAttributeEval根據ReliefF值評估屬性。
(7)SymmetricalUncertAttributeEval根據屬性的對稱不確定性評估屬性。

如果選用此評價器,則搜尋方法可以用BestFirst或者GreedyStepwise
(1)CfsSubsetEval根據屬性子集中每一個特徵的預測能力以及它們之間的關聯性進行評估
(2)WrapperSubsetEval通過測試特徵子集在此演算法上的預測效能來決定其優劣,而極少關注特徵子集中每個特徵的預測效能。

特徵選擇類
// package weka.filters.supervised.attribute!  filter過濾器中監督下的屬性選擇類
// package weka.attributeSelection.AttributeSelection; weka自帶的屬性選擇類
// package weka.classifiers.meta.AttributeSelectedClassifier; meta-classifier分類器中的過濾器