1. 程式人生 > >用 WEKA 進行資料探勘 (1)簡介和迴歸

用 WEKA 進行資料探勘 (1)簡介和迴歸

簡介

什麼是 資料探勘?您會不時地問自己這個問題,因為這個主題越來越得到技術界的關注。您可能聽說過像 Google 和 Yahoo! 這樣的公司都在生成有關其所有使用者的數十億的資料點,您不禁疑惑,“它們要所有這些資訊幹什麼?”您可能還會驚奇地發現 Walmart 是最為先進的進行資料探勘並將結果應用於業務的公司之一。現在世界上幾乎所有的公司都在使用資料探勘,並且目前尚未使用資料探勘的公司在不久的將來就會發現自己處於極大的劣勢。

那麼,您如何能讓您和您的公司跟上資料探勘的大潮呢?

我們希望能夠回答您所有關於資料探勘的初級問題。我們也希望將一種免費的開源軟體 Waikato Environment for Knowledge Analysis (WEKA) 介紹給您,您可以使用該軟體來挖掘資料並將您對您使用者、客戶和業務的認知轉變為有用的資訊以提高收入。您會發現要想出色地完成挖掘資料的任務並不像您想象地那麼困難。

此外,本文還會介紹資料探勘的第一種技術:迴歸,意思是根據現有的資料預測未來資料的值。 它可能是挖掘資料最為簡單的一種方式,您甚至以前曾經用您喜愛的某個流行的電子資料表軟體進行過這種初級的資料探勘(雖然 WEKA 可以做更為複雜的計算)。本系列後續的文章將會涉及挖掘資料的其他方法,包括群集、最近的鄰居以及分類樹。(如果您還不太知道這些術語是何意思,沒關係。我們將在這個系列一一介紹。)

什麼是資料探勘?

資料探勘,就其核心而言,是指將大量資料轉變為有實際意義的模式和規則。並且,它還可以分為兩種型別:直接的和間接的。在 直接的 資料探勘中,您會嘗試預測一個特定的資料點 — 比如,以給定的一個房子的售價來預測鄰近地區內的其他房子的售價。

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

現代的資料探勘開始於 20 世紀 90 年代,那時候計算的強大以及計算和儲存的成本均到達了一種很高的程度,各公司開始可以自己進行計算和儲存,而無需再借助外界的計算幫助。

此外,術語資料探勘是全方位的,可指代諸多檢視和轉換資料的技術和過程。因為本系列只觸及能用資料探勘實現的功能的一些皮毛。資料探勘的專家往往是資料統計方面的博士,並在此領域有 10-30 年的研究經驗。這會為您留下一種印象,即只有大公司才能負擔得起資料探勘。

我們希望能夠清除有關資料探勘的這些誤解並希望弄清楚一點:資料探勘既不像對一系列資料執行一個電子資料表函式那麼簡單,也不像有人想的那樣難到靠自己根本無法實現。這是 80/20 範型的一個很好的例子 — 甚至更進一步可以是 90/10 範型。您用所謂的資料探勘專家的 10% 的專業知識就能建立具有 90% 效力的資料探勘模型。而為了補上模型剩下的 10% 的效力並建立一個完美的模型將需要 90% 額外的時間,甚至長達 20 年。所以除非您立志以資料探勘為職業方向,否則“足夠好”就可以了。從另一個方面看,利用資料探勘所達到的“足夠好”總要比您現在所採用的其他技術要好。

資料探勘的最終目標就是要建立一個模型,這個模型可改進您解讀現有資料和將來資料的方式。由於現在已經有很多資料探勘技術,因此建立一個好的模型的最主要的步驟是決定要使用哪種技術。而這則極大地依賴於實踐和經驗以及有效的指導。這之後,需要對模型進行優化以讓它更令人滿意。在閱讀了本系列的文章後 ,您應該能夠自己根據自己的資料集正確決定要使用的技術,然後採取必要的步驟對它進行優化。您將能夠為您自己的資料建立一個足夠好的模型 。

WEKA

資料探勘絕非大公司的專有,也不是多昂貴的軟體。實際上,有一種軟體可以實現那些價格不菲的軟體所能實現的全部功能 — 這個軟體就是 WEKA 。WEKA 誕生於 University of Waikato(紐西蘭)並在 1997 年首次以其現代的格式實現。它使用了 GNU General Public License (GPL)。該軟體以 Java™ 語言編寫幷包含了一個 GUI 來與資料檔案互動並生成可視結果(比如表和曲線)。它還有一個通用 API,所以您可以像嵌入其他的庫一樣將 WEKA 嵌入到您自己的應用程式以完成諸如伺服器端自動資料探勘這樣的任務。

我們繼續並安裝 WEKA。因為它基於 Java,所以如果您在計算機上沒有安裝 JRE,那麼請下載一個包含 JRE 的 WEKA 版本。

圖 1. WEKA 的開始屏

image.png

在啟動 WEKA 時,會彈出 GUI 選擇器,讓您選擇使用 WEKA 和資料的四種方式。對於本文章系列中的例子,我們只選擇了 Explorer 選項。對於我們要在這些系列文章中所需實現的功能,這已經足夠。

圖 2. WEKA Explorer

image.png

在熟悉瞭如何安裝和啟動 WEKA 後,讓我們來看看我們的第一個資料探勘技術:迴歸。

迴歸

迴歸是最為簡單易用的一種技術,但可能也是最不強大(這二者總是相伴而來,很有趣吧)。此模型可以簡單到只有一個輸入變數和一個輸出變數(在 Excel 中稱為 Scatter 圖形,或 OpenOffice.org 內的 XYDiagram)。當然,也可以遠比此複雜,可以包括很多輸入變數。實際上,所有迴歸模型均符合同一個通用模式。多個自變數綜合在一起可以生成一個結果 — 一個因變數。然後用迴歸模型根據給定的這些自變數的值預測一個未知的因變數的結果。

每個人都可能使用過或看到過迴歸模型,甚至曾在頭腦裡建立過一個迴歸模型。人們能立即想到的一個例子就是給房子定價。房子的價格(因變數)是很多自變數 — 房子的面積、佔地的大小、廚房是否有花崗石以及衛生間是否剛重灌過等的結果。所以,不管是購買過一個房子還是銷售過一個房子,您都可能會建立一個迴歸模型來為房子定價。這個模型建立在鄰近地區內的其他有可比性的房子的售價的基礎上(模型),然後再把您自己房子的值放入此模型來產生一個預期價格。

讓我們繼續以這個房屋定價的迴歸模型為例,建立一些真實的資料。在我的鄰近地區有一些房子出售,我試圖找到我自己房子的合理價格。我還需要拿此模型的輸出申報財產稅。

表 1. 迴歸模型的房屋值
房子面積(平方英尺) 佔地的大小 臥室 花崗岩 衛生間有無重灌? 銷售價格
3529 9191 6 0 0 $205,000
3247 10061 5 1 1 $224,900
4032 10150 5 0 1 $197,900
2397 14156 4 1 0 $189,900
2200 9600 4 0 1` $195,000
3536 19994 6 1 1 $325,000
2983 9365 5 0 1 $230,000
3198 9669 5 1 1 ????

好的訊息是(也可能是壞訊息,取決於您自己的看法)上述對迴歸模型的簡單介紹只觸及了一些皮毛,這種觸及甚至都不會被真正地注意到。關於迴歸模型有大學的課程可以選擇,那會教授給您有關回歸模型的更多資訊,甚至多過您想要知道的。但我們的簡介讓您充分熟悉了這個概念,已足夠應付本文中 WEKA 試用。如果對迴歸模型以及其中的資料統計的細節有更深的興趣,您可以用自己喜愛的搜尋引擎搜尋如下的術語:least squares、homoscedasticity、normal distribution、White tests、Lilliefors tests、R-squared 和 p-values。

為 WEKA 構建資料集

為了將資料載入到 WEKA,我們必須將資料放入一個我們能夠理解的格式。WEKA 建議的載入資料的格式是 Attribute-Relation File Format (ARFF),您可以在其中定義所載入資料的型別,然後再提供資料本身。在這個檔案內,我們定義了每列以及每列所含內容。對於迴歸模型,只能有 NUMERIC 或 DATE 列。最後,以逗號分割的格式提供每行資料。我們為 WEKA 使用的 ARFF 檔案如下所示。請注意在資料行內,並未包含我的房子。因為我們在建立模型,我房子的價格還不知道,所以我們還不能輸入我的房子。

清單 1. WEKA 檔案格式
@RELATION house

@ATTRIBUTE houseSize NUMERIC
@ATTRIBUTE lotSize NUMERIC
@ATTRIBUTE bedrooms NUMERIC
@ATTRIBUTE granite NUMERIC
@ATTRIBUTE bathroom NUMERIC
@ATTRIBUTE sellingPrice NUMERIC

@DATA
3529,9191,6,0,0,205000 
3247,10061,5,1,1,224900 
4032,10150,5,0,1,197900 
2397,14156,4,1,0,189900 
2200,9600,4,0,1,195000 
3536,19994,6,1,1,325000 
2983,9365,5,0,1,230000

將資料載入 WEKA

資料建立完成後,就可以開始建立我們的迴歸模型了。啟動 WEKA,然後選擇 Explorer。將會出現 Explorer 螢幕,其中 Preprocess 選項卡被選中。選擇 Open File 按鈕並選擇在上一節中建立的 ARFF 檔案。在選擇了檔案後,WEKA Explorer 應該類似於圖 3 中所示的這個螢幕快照。

圖 3. 房屋資料載入後的 WEKA

image.png

在這個檢視中,WEKA 允許您查閱正在處理的資料。在 Explorer 視窗的左邊,給出了您資料的所有列(Attributes)以及所提供的資料行的數量(Instances)。若選擇一列,Explorer 視窗的右側就會顯示資料集內該列資料的資訊。比如,通過選擇左側的 houseSize 列(它應該預設選中),螢幕右側就會變成顯示有關該列的統計資訊。它顯示了資料集內此列的最大值為 4,032 平方英尺,最小值為 2,200 平方英尺。平均大小為 3,131 平方英尺,標準偏差為 655 平方英尺(標準偏差是一個描述差異的統計量度)。此外,還有一種可視的手段來檢視資料,單擊 Visualize All 按鈕即可。由於在這個資料集內的行數有限,因此視覺化的功能顯得沒有有更多資料點(比如,有數百個)時那麼功能強大。

好了,對資料的介紹已經夠多了。讓我們立即建立一個模型來獲得我房子的價格。

用 WEKA 建立一個迴歸模型

為了建立這個模型,單擊 Classify 選項卡。第一個步驟是選擇我們想要建立的這個模型,以便 WEKA 知道該如何處理資料以及如何建立一個適當的模型:

  1. 單擊 Choose 按鈕,然後擴充套件 functions 分支。
  2. 選擇 LinearRegression 葉。

這會告訴 WEKA 我們想要構建一個迴歸模型。除此之外,還有很多其他的選擇,這說明可以建立的的模型有很多。非常多!這也從另一個方面說明本文只介紹了這個主題的皮毛。有一點值得注意。在同一個分支還有另外一個選項,稱為 SimpleLinearRegression 。請不要選擇該選項,因為簡單迴歸只能有一個變數,而我們有六個變數。選擇了正確的模型後,WEKA Explorer 應該類似於圖 4。

圖 4. WEKA 內的線性迴歸模型

image.png

我能用電子資料表達到同樣的目的麼?

簡單而言:不可以。深思熟慮後的答案是:可以。大多數流行的電子資料表程式都不能輕鬆完成我們用 WEKA 實現的功能,即定義一個具有多個自變數的線性模型。不過,您可以 十分容易地實現一個 Simple Linear Regression 模型(具有一個自變數)。如果您有足夠的勇氣,甚至可以進行一個多變數的迴歸,但是這將非常困難,絕對不如用 WEKA 來得簡單。 本文的 [參考資料] 部分有一個 Microsoft® Excel® 的示例視訊。

現在,選擇了想要的模型後,我們必須告訴 WEKA 它建立這個模型應該使用的資料在哪裡。雖然很顯然我們想要使用在 ARFF 檔案內提供的那些資料,但實際上有不同的選項可供選擇,有些甚至遠比我們將要使用的選項高階。其他的三個選擇是:Supplied test set 允許提供一個不同的資料集來構建模型; Cross-validation 讓 WEKA 基於所提供的資料的子集構建一個模型,然後求出它們的平均值來建立最終的模型;Percentage split WEKA 取所提供資料的百分之一來構建一個最終的模型。這些不同的選擇對於不同的模型非常有用,我們在本系列後續文章中會看到這一點。對於迴歸,我們可以簡單地選擇 Use training set。這會告訴 WEKA 為了構建我們想要的模型,可以使用我們在 ARFF 檔案中提供的那些資料。

建立模型的最後一個步驟是選擇因變數(即我們想要預測的列)。在本例中指的就是房屋的銷售價格,因為那正是我們想要的。在這些測試選項的正下方,有一個組合框,可用它來選擇這個因變數。列 sellingPrice 應該預設選中。如果沒有,請選擇它。

我們準備好建立模型後,單擊 Start。圖 5 顯示了輸出結果。

圖 5. WEKA 內的房屋價格迴歸模型

image.png

解析這個迴歸模型

WEKA 可不馬虎。它會把這個迴歸模型徑直放在輸出,如清單 2 所示。

清單 2. 迴歸輸出
               (7.0551     * lotSize) + 
               (43166.0767 * bedrooms) +
               (42292.0901 * bathroom) 
             - 21661.1208 

清單 3 顯示了結果,其中已經插入了我房子的價格。

清單 3. 使用迴歸模型的房屋價格
sellingPrice = (-26.6882   * 3198) + 
               (7.0551     * 9669) + 
               (43166.0767 * 5) + 
               (42292.0901 * 1) 
             - 21661.1208

sellingPrice = 219,328

不過,回過頭來看看本文的開頭部分,我們知道資料探勘絕不是僅僅是為了輸出一個數值:它關乎的是識別模式和規則。它不是嚴格用來生成一個絕對的數值,而是要建立一個模型來讓您探測模式、預測輸出並根據這些資料得出結論。讓我們更進一步來解讀一下我們的模型除了房屋價格之外告訴我們的模式和結論:

  • 花崗石無關緊要— WEKA 將只使用在統計上對模型的正確性有貢獻的那些列(以 R-squared 量度,但這超出了本文的範圍)。它將會拋棄並忽視對建立好的模型沒有任何幫助的那些列。所以這個迴歸模型
  • 告訴我們廚房裡的花崗石並不會影響房子的價值。
  • 衛生間是有關係的— 因我們為衛生間使用了簡單的 0 或 1 值,所以我們可以使用來自迴歸模型的這個係數來決定衛生間的這個值對房屋價值的影響。這個模型告訴我們它使房子的價值增加了 $42,292。
  • 較大的房子價格反而低— WEKA 告訴我們房子越大,銷售價格越低?這可以從 houseSize 變數前面負的係數看出來。此模型告訴我們房子每多出一平方英尺都會使房價減少 $26?這根本沒有意義。這是在美國!當然是房子越大越好,特別是在我所在的得克薩斯州。那麼我們怎麼才能解釋這一點呢?這是無用資料入、無用資料出的一個很好的例子。房子的大小並不是一個自變數,它還與臥室變數相關,因為房子大通常臥室也多。所以我們的模型並不完美。但是我們可以修復這個問題。還記得麼:在 Preprocess 選項卡,可以從資料集中刪除列。對於本例,我們刪除 houseSize 列並建立另一個模型。
  • 那麼它會如何影響房子的價格呢?這個新模型又如何更有實際意義?(修改後的我的房子價格是: $217,894)。

對統計學家的一個提示

這個模型打破了一個常規線性迴歸模型的幾個要求,因為每個列並不是完全獨立的,並且這裡也沒有足夠的資料行來生成一個有效的模型。由於本文主要的目的是介紹 WEKA 這個資料探勘工具,因此我們極大地簡化了示例資料。

要想把這個簡單的示例提升到一個新的級別,讓我們來看一下 WEKA Web 站點上作為迴歸示例提供給我們的一個數據檔案。理論上講,這要比我們七個房子的簡單示例要複雜得多。這個示例資料檔案的作用是建立一個能基於汽車的幾個特性來推測其油耗(每加侖英里數,MPG)的迴歸模型(請務必記住,資料取自 1970 至 1982 年)。這個模型包括汽車的如下屬性:汽缸、排量、馬力、重量、加速度、年份、產地及製造商。此外,這個資料集有 398 行資料,這些資料足以滿足我們的多種統計需求,而這在我們的房價模型中是不能實現的。理論上講,這是一個極為複雜的迴歸模型,WEKA 可能需要大量時間才能建立一個具有如此多資料的模型(但我估計您已預見到了 WEKA 能夠很好地處理這些資料)。

要用這個資料集生成一個迴歸模型,我們需要嚴格地按照處理房子資料的步驟來處理這些資料,所以這裡我不再贅述。繼續並建立這個迴歸模型。它將生成如清單 4 所示的輸出。

清單 4. MPG 資料迴歸模型
class (aka MPG) =

     -2.2744 * cylinders=6,3,5,4 +
     -4.4421 * cylinders=3,5,4 +
      6.74   * cylinders=5,4 +
      0.012  * displacement +
     -0.0359 * horsepower +
     -0.0056 * weight +
      1.6184 * model=75,71,76,74,77,78,79,81,82,80 +
      1.8307 * model=77,78,79,81,82,80 +
      1.8958 * model=79,81,82,80 +
      1.7754 * model=81,82,80 +
      1.167  * model=82,80 +
      1.2522 * model=80 +
      2.1363 * origin=2,3 +
      37.9165 

在您自已生成這個模型時,您會看到 WEKA 只用了不到一秒的時間就處理好了這個模型。所以,即使要處理的是具有大量資料的功能強大的迴歸模型,就計算而言,也不是什麼問題。這個模型看上去應該比房子資料複雜得多,但事實並非如此。例如,這個迴歸模型的首行,-2.2744 * cylinders=6,3,5,4 表示,如果汽車有 6 個缸,就會在此列中放上一個 1,如果汽車有 8 個缸,就會放上一個 0。讓我們從這個資料集中取一個示例行(第 10 行)並將這些數值放入迴歸模型,看看我們這個模型的輸出是否與資料集中提供給我們的輸出相似。

清單 5. 示例 MPG 資料
data = 8,390,190,3850,8.5,70,1,15

class (aka MPG) =

     -2.2744 * 0 +
     -4.4421 * 0 +
      6.74   * 0 +
      0.012  * 390 +
     -0.0359 * 190 +
     -0.0056 * 3850 +
      1.6184 * 0 +
      1.8307 * 0 +
      1.8958 * 0 +
      1.7754 * 0 +
      1.167  * 0 +
      1.2522 * 0 +
      2.1363 * 0 +
     37.9165

Expected Value = 15 mpg
Regression Model Output = 14.2 mpg 

因此,當我們用隨機選擇的測試資料對此模型進行測試時,此模型的表現非常出色,對於一輛實際值為 15 MPG 的車,我們的預測值是 14.2 MPG。

結束語

本文通過向您介紹資料探勘這個主題的背景以及這個領域的目標力求回答“什麼是資料探勘”這個問題。資料探勘就是通過建立模型和規則來將大量的不可用資訊(通常是分散的資料形式)變成有用的資訊。您的目標是使用模型和規則來預測將來的行為,從而改進您的業務,或是解釋一些您用其他方法不能解釋的事情。這些模型可以幫助您確認您已經有了的某些想法,甚至可能會讓您發現數據中您以前不曾意識到的新東西。這裡有個有趣的資料探勘的例子(不知道還存在多少類似的事例),在美國,Walmart 會在週末時把啤酒移到尿布貨架的未端,這是因為 Walmart 的資料探勘結果顯示男士通常會在週末購買尿布,而他們同時也喜歡在週末喝啤酒。

本文還向您介紹了一種免費的開源軟體程式 WEKA。當然,市場上還有很多更為複雜的資料探勘商業軟體產品,但對於剛開始進行資料探勘的人來說,這種開源的解決方案非常有益。請記住,您永遠不可能成為資料探勘方面的專家,除非您打算用 20 年的時間來研究它。WEKA 可以讓您步入資料探勘的大門,同時也能為您遇到的初級問題提供完美的解決方案。如果您以前對資料探勘接觸不多,那麼這個非常好的解決方案將能滿足您的全部所需。

最後,本文探討了第一個資料探勘模型:迴歸模型(特別是線性迴歸多變數模型),另外還展示瞭如何在 WEKA 中使用它。這個迴歸模型很容易使用,並且可以用於很多資料集。您會發現這個模型是我在本系列文章中所討論的所有模型中最有用的一個。然而,資料探勘不僅侷限於簡單的迴歸,在不同的資料集及不同的輸出要求的情況下,您會發現其他的模型也許是更好的解決方案。

最後,我再重申一下,本文及本系列的後續文章只是對資料統計和資料探勘領域做了最簡單的介紹。花上整整一學期的時間去學習資料統計和資料探勘的人也只能被稱為“初學者”。 我們的目的就是讓初學者充分領略這個可用的開源工具的妙處並提高對資料探勘所能提供的價值的瞭解和重視。
#### 下載資源

相關主題