我個人認為直接討論數據挖掘算法和weka的使用過於心急。我一開始就直接學習的數據挖掘方法,有些方法艱澀枯燥,我常常在思考的不是方法本身,而是“這是干什么的?”。
在使用了weka后有些東西漸漸清晰,因為輸入和輸出給了人很直觀的感覺,再結合技術本身學習效率很高。
輸入主要有三類:概念、實例和屬性。
概念
概念簡單而言就是需要被處理的東西。它可以是分類學習中那個已經分類完成的樣本集。
你需要處理的東西可能差別很大,但你可以統稱它們為概念,而輸出就是對其的描述,即概念描述。
實例
實例這個詞你可能覺得陌生,但是你可以大致認為其為樣本。
我們通常的輸入是一個實例集,其中的每一個實例都是單一、獨立的概念樣本。
當然最常見的實例表現方式就是表格:
不過這是因為如此,有人戲稱數據挖掘應該成為文件挖掘。
誠然,關系型數據庫可以表現更為復雜的關系,但有限關系的有限集一般都可以轉化為單個表。有興趣深入看看的朋友可以看一下有關反向規格化的虛假事實問題。
屬性
如果上面說到的實例是表格中的一行的話,屬性就是數據表中的一列。
一個特定實例的一個屬性值是屬性對應部分的一個測量或者觀測值。
ARFF格式
arff格式是weka專用的文件格式,全稱Attribute-Relation File Format。
它是一個ASCII文本文件,記錄了一些共享屬性的實例。arff格式是由懷卡托大學的計算機科學部門開發的。
arff格式文件主要由兩個部分構成,頭部定義和數據區。
頭部定義包含了關系名稱(relation name)、一些屬性(attributes)和對應的類型,如:
% 1. Title: Iris Plants Database
%
% 2. Sources:
% (a) Creator: R.A. Fisher
% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
% (c) Date: July, 1988
%
@RELATION iris
@ATTRIBUTE sepallength NUMERIC
@ATTRIBUTE sepalwidth NUMERIC
@ATTRIBUTE petallength NUMERIC
@ATTRIBUTE petalwidth NUMERIC
@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}
%是注釋符號。NUMERIC說明其為數字型,屬性class的取值是限定的,只能是Iris-setosa,Iris-versicolor,Iris-virginica中的一個。數據類型還可以是string和data數據區有@data開頭,如:
@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
完整的一個arff文件如下:
% 1. Title: Iris Plants Database
%
% 2. Sources:
% (a) Creator: R.A. Fisher
% (b) Donor: Michael Marshall (MARSHALL%PLU@io.arc.nasa.gov)
% (c) Date: July, 1988
%
@RELATION iris
@ATTRIBUTE sepallength NUMERIC
@ATTRIBUTE sepalwidth NUMERIC
@ATTRIBUTE petallength NUMERIC
@ATTRIBUTE petalwidth NUMERIC
@ATTRIBUTE class {Iris-setosa,Iris-versicolor,Iris-virginica}
@DATA
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
5.4,3.9,1.7,0.4,Iris-setosa
4.6,3.4,1.4,0.3,Iris-setosa
5.0,3.4,1.5,0.2,Iris-setosa
4.4,2.9,1.4,0.2,Iris-setosa
4.9,3.1,1.5,0.1,Iris-setosa
weka中打開該數據集的效果:
圈1處是所有屬性
圈2處是一個簡單的可視化預覽
圈3處是數據的描述性統計
稀疏的ARFF格式
如果輸入的實例大部分的值都是0,你就可以考慮一下稀疏格式。它的頭部定義和ARFF格式一樣。
唯一的區別就是0默認不需要聲明。
比如:
@data
0, X, 0, Y, 0, 0 "class A"
0, 0, W, 0, 0, 0 "class B"
可以簡寫為:
@data
{1 X, 3 Y, 4 "class A"}
{2 W, 4 "class B"}
其實我不怎么推薦使用這個,因為很容易與缺省和未知值混淆。
0是省去了而已,不是殘缺,未知值請使用?。
殘缺值問題
一般的例子不會有殘缺值,但是實際中確有殘缺值。一般的殘缺值是指超出正常范圍那種,也有應該是正數卻出現負數那種。
殘缺值的意義需要重點研究,了解其出現的原因。比如數據采集的機器的故障或者問卷調查的對象拒絕回答一些較為隱私的問題。
雖然大部分算法會認定殘缺值沒有什么特別意義,僅僅是未知而已。但是通常我們可以通過殘缺值獲得一些有用的信息。
不正確的值
數據挖掘所用的數據並不是為了數據挖掘本身而收集的,出現一些不良數據和屬性值也是情有可原的。某些數據在初始收集時無關緊要,但是對數據挖掘影響卻很大。
ARFF格式定義了屬性的類型,這可以在一定程度上驗證數據,不過最靠譜的還是自己檢查一下。
重復數據也是需要注意的,有時候它會對結果產生意想不到的干擾。
認真對待數據
請不要隨意找一份數據就開始所謂的數據挖掘探索,你需要了解你要處理的數據,大致感知一下。對於一些不正常的數據或者可疑的數據請和相關人員反復談論,請他們解釋一下反常的、殘缺的和那些被等級化的數據。
數據的前期處理是非常枯燥的,費時費力,卻是成功的數據挖掘所必要的。甚至有觀點認為輸入數據的准備工作應該在一個數據挖掘項目中占到60%。