用 WEKA 進行數(shù)據(jù)挖掘,第 2 部分: 分類和群集

簡介

用 WEKA 進行數(shù)據(jù)挖掘,第 1 部分:簡介和回歸,我介紹了數(shù)據(jù)挖掘的概念以及免費的開源軟件 Waikato Environment for Knowledge Analysis(WEKA),利用它可以挖掘數(shù)據(jù)來獲得趨勢和模式。我還談到了第一種數(shù)據(jù)挖掘的方法 — 回歸 — 使用它可以根據(jù)一組給定的輸入值預(yù)測數(shù)字值。這種分析方法非常容易進行,而且也是功能最不強大的一種數(shù)據(jù)挖掘方法,但是通過它,讀者對 WEKA 有了很好的了解,并且它還提供了一個很好的例子,展示了原始數(shù)據(jù)是如何轉(zhuǎn)換為有意義的信息的。

在本文中,我將帶您親歷另外兩種數(shù)據(jù)挖掘的方法,這二者要比回歸模型稍微復(fù)雜一些,但功能則更為強大。如果回歸模型只能為特定輸入提供一個數(shù)值輸出,那么這兩種模型則允許您對數(shù)據(jù)做不同的解析。正如我在第 1 部分中所說的,數(shù)據(jù)挖掘的核心就是將正確的模型應(yīng)用于數(shù)據(jù)。即便有了有關(guān)客戶的最佳數(shù)據(jù)(無論這意味著什么),但是如果沒有將正確的模型應(yīng)用于數(shù)據(jù),那么這些數(shù)據(jù)也沒有任何意義。不妨從另一個角度考慮這件事情:如果您只使用能生成數(shù)值輸出的回歸模型,那么 Amazon 如何能告知您“購買了 X 產(chǎn)品的客戶還購買了 Y 產(chǎn)品”?這里沒有數(shù)值型的函數(shù)能夠告訴您這類信息。所以讓我們來深入研究可用在數(shù)據(jù)中的其他兩個模型。

在本文中,我會反復(fù)提及稱為“最近鄰”的數(shù)據(jù)挖掘方法,但我不會過多地對其進行剖析,詳細(xì)的介紹會在第 3 部分給出。不過,我在本文中的比較和描述部分將它包括進來以使討論更為完整。

分類 vs. 群集 vs. 最近鄰

在我深入探討每種方法的細(xì)節(jié)并通過 WEKA 使用它們之前,我想我們應(yīng)該先理解每個模型 — 每個模型適合哪種類型的數(shù)據(jù)以及每個模型試圖實現(xiàn)的目標(biāo)。我們還會將我們已有的模型 — 回歸模型 — 也包括在我們的討論之中,以便您可以看到這三種新模型與我們已經(jīng)了解的這個模型的對比。我將通過實際的例子展示每個模型的使用以及各自的不同點。這些實際的例子均圍繞著一個本地的 BMW 經(jīng)銷店展開,研究它如何能增加銷售。這個經(jīng)銷店已經(jīng)保存了所有其過去的銷售信息及有關(guān)購買過 BMW、留意過 BMW 或是來過 BMW 展廳的每個客戶的信息。這個經(jīng)銷店想要增加未來的銷售并部署了數(shù)據(jù)挖掘來實現(xiàn)此目標(biāo)。

回歸

問題:“對于新的 BMW M5 車型我們該如何定價?” 回歸模型只能給出這個問題的一個數(shù)值答案?;貧w模型會使用 BMW 和 M5 的過去銷售數(shù)據(jù)來基于所售汽車的屬性和賣點確定人們過去在這個經(jīng)銷店購買車的價格。然后,回歸模型允許 BMW 經(jīng)銷店插入新車的屬性來確定其價格。

比如:Selling Price = $25,000 + ($2900 * Liters in Engine) + ($9000 * isSedan) + ($11,000 * isConvertible) + ($100 * inches of car) + ($22,000 * isM)。

分類

問題:“那么客戶 X 有多大的可能會購買最新的 BMW M5 呢?” 創(chuàng)建一個分類樹(一個決策樹),并借此挖掘數(shù)據(jù)就可以確定這個人購買一輛新的 M5 的可能性有多大。這個樹上的節(jié)點可以是年齡、收入水平、目前擁有的車的數(shù)量、婚姻狀況、有無孩子、房主還是租戶。對這個決策樹使用此人的這些屬性就可以確定他購買 M5 的可能性。

群集

問題是:“哪個年齡組最喜歡銀色的 BMW M5?”這就需要挖掘數(shù)據(jù)來對比過去購車者的年齡和過去購買的車的顏色。從這些數(shù)據(jù),就能夠找到某個年齡組(比如 22-30 歲)具有訂購某種顏色的 BMW M5 的更高的傾向性(75% 購買藍(lán)色)。同樣地,它也可顯示另一個不同的年齡組(比如 55-62)則更傾向于訂購銀色的 BMW(65 % 購買銀色,20 % 購買灰色)。這些數(shù)據(jù),當(dāng)挖掘后,傾向于集中于某些特定年齡組和特定顏色周圍,方便用戶快速判斷該數(shù)據(jù)內(nèi)的模式。

最近鄰

問題:“當(dāng)人們購買 BMW M5 時,他們傾向于同時購買其他哪些選項?”數(shù)據(jù)挖掘顯示,人們?nèi)氲瓴①徺I一輛 BMW M5 時,他們還會傾向于購買與之配套的行李箱。(這也就是所謂的購物籃分析)。 使用此數(shù)據(jù),汽車經(jīng)銷店就會將配套行李箱的促銷廣告放在店面的顯眼處,甚至?xí)趫蠹埳献龃黉N廣告,如果他們購買 M5,配套行李箱將免費/打折,以期增加銷售。

分類

分類 (也即分類樹或決策樹) 是一種數(shù)據(jù)挖掘算法,為如何確定一個新的數(shù)據(jù)實例的輸出創(chuàng)建逐步指導(dǎo)。它所創(chuàng)建的這個樹上的每個節(jié)點都代表一個位置,在這個位置必須基于輸入做出決策,并且會從一個節(jié)點移到下一個節(jié)點直至到達(dá)能夠得出預(yù)測的輸出的葉子節(jié)點。這雖然聽起來有些讓人迷惑,但其實它非常直觀。讓我們看一個例子。

清單 1. 簡單的分類樹
    [ Will You Read This Section? ]
          /              \
        Yes              No
        /                 \
[Will You Understand It?]  [Won't Learn It]
    /         \
  Yes          No
  /             \
  [Will Learn It]  [Won't Learn It]

這個簡單的分類樹試圖回答這個問題:“您理解分類樹么?”在每個節(jié)點,您都會回答這個問題并繼續(xù)沿著分支下移,直到您到達(dá)一個回答了是或不是的葉子節(jié)點。 這個模型可用于任何未知的數(shù)據(jù)實例,來預(yù)測這個未知數(shù)據(jù)實例是否通過只詢問兩個簡單問題就能理解分類樹。這看上去像是分類樹的一大優(yōu)勢 — 它無需有關(guān)數(shù)據(jù)的大量信息就能創(chuàng)建一個十分準(zhǔn)確且信息豐富的樹。

分類樹的一個重要概念非常類似于我們在 用 WEKA 進行數(shù)據(jù)挖掘,第 1 部分:簡介和回歸 回歸模型中看到的概念:使用一個“訓(xùn)練集”來生成模型。就是拿一組輸出值已知的數(shù)據(jù)集并使用此數(shù)據(jù)集來創(chuàng)建我們的模型。之后,只要我們有一個輸出值未知的新的數(shù)據(jù)點,我們都可以將其放入這個模型并生成預(yù)期的輸出。這與我們在回歸模型中看到的沒有差別。只不過,這個模型更進了一步,通常會把整個訓(xùn)練集分成兩個部分:拿數(shù)據(jù)的約 60-80 % 放入我們的訓(xùn)練集,用來生成模型;然后拿剩下的數(shù)據(jù)放入一個測試集,在模型生成后,立即用其來測試我們模型的準(zhǔn)確性。

那么這個額外的步驟為什么在此模型中如此重要呢?這個問題就是所謂的過擬合:如果我們提供過多 數(shù)據(jù)用于模型創(chuàng)建,我們的模型雖然會被完美創(chuàng)建,但只針對的是該數(shù)據(jù)。請記?。何覀兿胧褂么四P蛠眍A(yù)測未來的未知數(shù);我們不是想使用此模型來準(zhǔn)確地預(yù)測我們已經(jīng)知道的值。這就是為什么我們要創(chuàng)建一個測試集。在創(chuàng)建了模型后,我們要進行檢查以確保我們所創(chuàng)建模型的準(zhǔn)確性不會在測試集降低。這就保證了我們的模型會準(zhǔn)確地預(yù)測出未來的未知值。使用 WEKA 會看到它的實際效果。

這還引出了分類樹的另一個重要概念:修剪。修剪 正如其名字所指,意思是刪減分類樹的枝條。那么為什么有人會想要將信息從分類樹中刪除呢?還是因為過擬合的緣故。隨著數(shù)據(jù)集的增大以及屬性數(shù)量的增長,我們所創(chuàng)建的樹就會越來越復(fù)雜。理論上講,一個樹可以具有 leaves = (rows * attributes)。但那又有何益處呢?就預(yù)測未來的未知數(shù)而言,它根本幫不到我們,因它只適于我們現(xiàn)有的訓(xùn)練數(shù)據(jù)。因此我們需要的是一種平衡。我們想要我們的樹盡量簡單,節(jié)點和枝葉盡量少。同時我們還想要它盡量地準(zhǔn)確。這就需要進行權(quán)衡,我們不久就會看到。

在使用 WEKA 前,有關(guān)分類我還想指出最后一點,那就是假正和假負(fù)。假正指的是這樣的一個數(shù)據(jù)實例:我們創(chuàng)建的這個模型預(yù)測它應(yīng)該是正的,但事實相反,實際值卻是負(fù)的。同樣地,假負(fù)指的是這樣一個數(shù)據(jù)實例:我們創(chuàng)建的這個模型預(yù)測它應(yīng)該是負(fù)的,但事實相反,實際值卻是正的。

這些錯誤表明在我們的模型中出了問題,我們的模型正在錯誤地分類某些數(shù)據(jù)。雖然可能會出現(xiàn)不正確的分類,但可接受的錯誤百分比由模型創(chuàng)建者決定。比如,如果是在醫(yī)院里測試心臟監(jiān)視器,很顯然,將需要極低的錯誤百分比。而如果您只是在有關(guān)數(shù)據(jù)挖掘的文章中挖掘一些虛構(gòu)的數(shù)據(jù),那么錯誤率可以更高一些。為了使之更進一步,還需要決定可以接受的假負(fù)與假正的百分比率是多少。我立即想到的一個例子就是垃圾郵件模型:一個假正(一個真郵件被標(biāo)記為了垃圾郵件)要比假負(fù)(一個垃圾消息未被標(biāo)記為垃圾郵件)更具破壞性。在像這樣的例子中,就可以判斷假負(fù):假正的比率最低為 100:1 才是可以接受的。

好了,對于分類樹的背景和技術(shù)方面的介紹已經(jīng)夠多了。讓我們現(xiàn)在開始獲得一些真正的數(shù)據(jù)并將其帶入 WEKA。

WEKA 數(shù)據(jù)集

我們用于分類示例的數(shù)據(jù)集所圍繞的仍然是我們虛構(gòu)的 BMW 經(jīng)銷店。這個經(jīng)銷店正在啟動一個推銷計劃,試圖向其老客戶推銷兩年延保。這個經(jīng)銷店過去曾做過類似的計劃并從過去的銷售中收集了 4,500 個數(shù)據(jù)點。數(shù)據(jù)集中的屬性有:

  • 收入水平 [0=0-30k, 1=31k-40k, 2=41k-60k, 3=61k-75k, 4=76k-100k, 5=101k-150k, 6=151k-500k, 7=$501k+]
  • 第一輛 BMW 購買的年/月
  • 最近的 BMW 購買的年/月
  • 是否過去曾響應(yīng)過延保計劃

讓我們來看看在這個例子中使用的 Attribute-Relation File Format (ARFF)。

清單 2. 分類 WEKA 數(shù)據(jù)
@attribute IncomeBracket {0,1,2,3,4,5,6,7}
@attribute FirstPurchase numeric
@attribute LastPurchase numeric
@attribute responded {1,0}

@data

4,200210,200601,0
5,200301,200601,1
...

在 WEKA 內(nèi)進行分類

使用我們之前使用過的相同步驟來將數(shù)據(jù)文件 bmw-training.arff (參見 下載) 載入 WEKA。請注意:這個文件只包含經(jīng)銷店記錄內(nèi)的這 4,500 個記錄中的 3,000 個。我們需要分割我們的記錄以便某些數(shù)據(jù)實例被用來創(chuàng)建模型,某些被用來測試模型以確保沒有過擬合。在加載了數(shù)據(jù)后,屏幕應(yīng)該類似于圖 1。

圖 1. WEKA 內(nèi)的 BMW 分類數(shù)據(jù)
image.png

與我們在 用 WEKA 進行數(shù)據(jù)挖掘,第 1 部分:簡介和回歸 中對回歸模型所做的類似,我們選擇 Classify 選項卡,然后選擇 trees 節(jié)點,然后是 J48 葉子(我不知道為何這就是正式的名稱,不過還是接受吧)。

圖 2. BMW 分類算法
image.png

至此,我們已經(jīng)準(zhǔn)備好可以在 WEKA 內(nèi)創(chuàng)建我們的模型了。請確保 Use training set 被選中以便我們使用剛剛加載的這個數(shù)據(jù)集來創(chuàng)建模型。單擊 Start 并讓 WEKA 運行。模型的輸出應(yīng)類似于清單 3 內(nèi)的結(jié)果。

清單 3. WEKA 的分類模型的輸出
Number of Leaves  :     28

Size of the tree :  43

Time taken to build model: 0.18 seconds

=== Evaluation on training set ===
=== Summary ===

Correctly Classified Instances        1774               59.1333 %
Incorrectly Classified Instances      1226               40.8667 %
Kappa statistic                          0.1807
Mean absolute error                      0.4773
Root mean squared error                  0.4885
Relative absolute error                 95.4768 %
Root relative squared error             97.7122 %
Total Number of Instances             3000     

=== Detailed Accuracy By Class ===

               TP Rate   FP Rate   Precision   Recall  F-Measure   ROC Area  Class
                 0.662     0.481      0.587     0.662     0.622      0.616    1
                 0.519     0.338      0.597     0.519     0.555      0.616    0
Weighted Avg.    0.591     0.411      0.592     0.591     0.589      0.616

=== Confusion Matrix ===

    a    b   <-- classified as
 1009  516 |    a = 1
 710  765 |    b = 0

上述這些數(shù)字是什么意思?我們怎么才能知道這是一個好的模型?我們應(yīng)該尋找的這個所謂的“樹”在哪里?這些問題問得很好。讓我們逐一回答:

  • 這些數(shù)字是什么意思? 這里應(yīng)該關(guān)注的重要數(shù)字是“Correctly Classified Instances”(59.1 %)與“Incorrectly Classified Instances”(40.9 %)旁邊的這些數(shù)字。其他的重要數(shù)字還有“ROC Area”列第一行的這個數(shù)字(0.616);我稍候會詳細(xì)解釋這個數(shù)字,目前只需記住即可。最后,在“Confusion

  • Matrix”中,顯示了假正和假負(fù)的數(shù)量。在這個矩陣中,假正為 516,假負(fù)為 710。

  • 我們怎么才能知道這是一個好的模型? 由于準(zhǔn)確率僅為 59.1 %,我不得不承認(rèn)經(jīng)初步分析后,這不是一個非常好的模型。

  • 這個所謂的“樹”在哪里? 要看到這個樹,可右鍵單擊剛剛創(chuàng)建的這個模型。在彈出菜單中,選擇 Visualize tree。之后,就會看到我們所創(chuàng)建的這個分類樹,雖然在本例中,可視樹不能提供任何幫助。我們的樹如圖 3 所示??吹竭@個樹的另一種方式是在 Classifier Output 內(nèi)往高處看,其中的文本輸出顯示了具有節(jié)點和葉子的整個樹。

圖 3. 分類樹可視化
image.png

還有最后一個步驟,就是驗證我們的分類樹,這需要貫穿模型運行我們的測試集并確保我們模型的準(zhǔn)確性在測試集時與在訓(xùn)練集時相差不遠(yuǎn)。為此,在 Test options 內(nèi),選擇 Supplied test set 單選按鈕并單擊 Set。選擇文件 bmw-test.arff,內(nèi)含 1,500 條記錄,而這些記錄在我們用來創(chuàng)建模型的訓(xùn)練集中是沒有的。當(dāng)我們這次單擊 Start 時,WEKA 將會貫穿我們已經(jīng)創(chuàng)建的這個模型運行測試數(shù)據(jù)集并會讓我們知道模型的情況。讓我們現(xiàn)在單擊 Start。如下是輸出。

圖 4. 分類樹測試
image.png

對比這個測試集的“Correctly Classified Instances”(55.7 %)與訓(xùn)練集的“Correctly Classified Instances”(59.1 %),我們看到此模型的準(zhǔn)確性非常接近,這表明此模型不會在應(yīng)用未知數(shù)據(jù)或未來數(shù)據(jù)時,發(fā)生故障。

不過,由于模型的準(zhǔn)確性很差,只能正確地分類 60 % 的數(shù)據(jù)記錄,因此我們可以后退一步說:“哦,這個模型一點都不好。其準(zhǔn)確性勉強超過 50 %,我隨便猜猜,也能得到這樣的準(zhǔn)確性?!边@完全正確。這也是我想審慎地告訴大家的一點:有時候,將數(shù)據(jù)挖掘算法應(yīng)用到數(shù)據(jù)集有可能會生成一個糟糕的模型。這一點在這里尤其準(zhǔn)確,并且它是故意的。

我本想帶您親歷用適合于分類模型的數(shù)據(jù)生成一個分類樹的全過程。然而,我們從 WEKA 獲得的結(jié)果表明我們錯了。我們在這里本應(yīng)選擇的并 分類樹。我們所創(chuàng)建的這個模型不能告訴我們?nèi)魏涡畔?,并且如果我們使用它,我們可能會做出錯誤的決策并浪費錢財。

那么這是不是意味著該數(shù)據(jù)無法被挖掘呢?當(dāng)然不是,只不過需要使用另一種數(shù)據(jù)挖掘方法:最近鄰模型,該模型會在本系列的后續(xù)文章中討論,它使用相同的數(shù)據(jù)集,卻能創(chuàng)建一個準(zhǔn)確性超過 88 % 的模型。它旨在強調(diào)一點:那就是必須為數(shù)據(jù)選擇合適的模型才能得到有意義的信息。

進一步閱讀:如果您想更多地了解分類樹,有一些關(guān)鍵字可以查找,因篇幅的原因我在這里就不逐一介紹了:ROC curves、AUC、false positives、false negatives、learning curves、Naive Bayes、information gain、overfitting、 pruning、chi-square test。

群集

群集 讓用戶可以通過數(shù)據(jù)組來從數(shù)據(jù)確定模式。當(dāng)數(shù)據(jù)集已定義并且需要從此數(shù)據(jù)確定一個通用的模式時,群集的優(yōu)勢就會比較明顯。您可以根據(jù)自身業(yè)務(wù)需要創(chuàng)建一定數(shù)量的組。與分類相比,群集的一個好處是數(shù)據(jù)集內(nèi)的每個屬性都被用來分析該數(shù)據(jù)。(在分類方法中,只有屬性的一個子集用在了模型中。)使用群集的一個主要劣勢是用戶需要提前知道他想要創(chuàng)建的組的數(shù)量。若用戶對其數(shù)據(jù)知之甚少,這可能會很困難。是應(yīng)該創(chuàng)建三個組?五個組?還是十個組?所以在決定要創(chuàng)建的理想組數(shù)之前,可能需要進行幾個步驟的嘗試和出錯。

不過,對于一般的用戶,群集有可能是最為有用的一種數(shù)據(jù)挖掘方法。它可以迅速地將整個數(shù)據(jù)集分成組,供您快速得出結(jié)論。此方法背后的算法多少有些復(fù)雜和難懂,這也是我們?yōu)楹我浞掷?WEKA 的原因。

算法概覽

如下是對群集中所用算法的一個簡要的快速概覽:

  1. 數(shù)據(jù)集內(nèi)的每個屬性都應(yīng)該是規(guī)格化的,因此,每個值均除以該屬性在數(shù)據(jù)集內(nèi)的最高值與最低值間的差值。例如,如果屬性是年齡,且最高值為 72,最低值為 16,那么年齡 32 將被規(guī)格化為 0.5714。
  2. 理想的群集數(shù)量給定后,就可以隨機地從數(shù)據(jù)集選擇該數(shù)量的樣例來充當(dāng)我們初始測試群集中心。比如,如果想要有三個群集,那么就可以從數(shù)據(jù)集中隨意選擇三行數(shù)據(jù)。
  3. 計算從每個數(shù)據(jù)樣例到群集中心(我們隨意選中的數(shù)據(jù)行)的距離,使用距離計算的最小平方法。
  4. 基于到每個群集中心的最短距離將每個數(shù)據(jù)行分配給一個群集。
  5. 計算重心,即只使用每個群集的數(shù)的每列數(shù)據(jù)的平均數(shù)。
  6. 計算每個數(shù)據(jù)樣例與剛剛創(chuàng)建的這些重心之間的距離。如果群集及群集數(shù)不變,那么就說明大功告成,群集創(chuàng)建完畢。如果它們變化,那么就需要返回到步驟 3 重新開始并一遍遍重復(fù),直到不再變化為止。

很顯然,這看上去不怎么有趣。對于一個具有 10 行和三個群集的數(shù)據(jù)集,若使用電子數(shù)據(jù)表,需要花上 30 分鐘才能完成。那么想象一下,如果有 100,000 數(shù)據(jù)行和 10 個群集,若用手工完成那將花費多長時間。所幸的是,計算機在幾秒內(nèi)就可以完成這類計算。

WEKA 的數(shù)據(jù)集

我們?yōu)槿杭纠褂玫倪@個數(shù)據(jù)集同樣也圍繞著我們虛構(gòu)的 BMW 經(jīng)銷店。這個經(jīng)銷店保留了人們?nèi)绾卧诮?jīng)銷店以及展廳行走、他們看了哪些車以及他們最終購車的機率的記錄。經(jīng)銷店期望通過尋找數(shù)據(jù)內(nèi)的模式挖掘這些數(shù)據(jù)并使用群集來判斷其客戶是否有某種行為特點。在這個例子中有 100 行數(shù)據(jù),并且每個列都描述了顧客在他們各自的 BMW 體驗中所到達(dá)的步驟,比如列中的 1 表示到達(dá)這一步的顧客看過這輛車,0 表示他們不曾到達(dá)看過車的這一步。清單 4 顯示了我們在 WEKA 中所使用的 ARFF 數(shù)據(jù)。

清單 4. 群集 WEKA 數(shù)據(jù)
@attribute Dealership numeric
@attribute Showroom numeric
@attribute ComputerSearch numeric
@attribute M5 numeric
@attribute 3Series numeric
@attribute Z4 numeric
@attribute Financing numeric
@attribute Purchase numeric

@data

1,0,0,0,0,0,0,0
1,1,1,0,0,0,1,0
...

在 WEKA 內(nèi)進行群集

采用與將數(shù)據(jù)加載到 Preprocess 選項卡時的相同步驟來將數(shù)據(jù)文件 bmw-browsers.arff 加載到 WEKA 內(nèi)?;ㄉ蠋追昼姇r間來查看一下這個選項卡內(nèi)的數(shù)據(jù)。看看這些列、屬性數(shù)據(jù)以及列的分布等。在加載數(shù)據(jù)后,屏幕應(yīng)該類似于圖 5。

圖 5. WEKA 內(nèi)的 BMW 群集數(shù)據(jù)
image.png

有了這個數(shù)據(jù)集,我們就可以開始創(chuàng)建群集了,所以這次不是單擊 Classify 選項卡,而是要單擊 Cluster 選項卡。單擊 Choose 并從所出現(xiàn)的各種選項中選擇 SimpleKMeans(這是本文中我們所期望的進行群集的方法)。這時的 WEKA Explorer 窗口應(yīng)該如圖 6 所示。

圖 6. BMW 群集算法
image.png

最后,我們想要通過單擊 SimpleKMeans 調(diào)整我們?nèi)杭惴ǖ膶傩裕m然不是最佳的 UI 設(shè)計,但還是先接受吧)。這里我們想要調(diào)整的這個算法的惟一屬性是 numClusters 字段,它表明我們想要創(chuàng)建多少群集。(在開始之前,需要知道這一點。)讓我們將默認(rèn)值從 2 更改為 5,若將來想要調(diào)整所創(chuàng)建群集的數(shù)量,就可以采用這些步驟。此時的 WEKA Explorer 應(yīng)該類似于圖 7。單擊 OK 以接受這些值。

圖 7. 群集屬性
image.png

至此,我們已經(jīng)可以運行這個群集算法了。如果使用電子數(shù)據(jù)表處理 100 行數(shù)據(jù)和五個數(shù)據(jù)群集將會花費幾個小時的計算時間,但 WEKA 在不到一秒鐘的時間內(nèi)就能給出答案。輸出應(yīng)該類似于清單 5。

清單 5. 群集輸出
                          Cluster#
Attribute            Full Data      0          1          2          3          4
                       (100)       (26)       (27)        (5)       (14)       (28)
==================================================================================
Dealership              0.6     0.9615     0.6667          1     0.8571          0
Showroom               0.72     0.6923     0.6667          0     0.5714          1
ComputerSearch         0.43     0.6538          0          1     0.8571     0.3214
M5                     0.53     0.4615      0.963          1     0.7143          0
3Series                0.55     0.3846     0.4444        0.8     0.0714          1
Z4                     0.45     0.5385          0        0.8     0.5714     0.6786
Financing              0.61     0.4615     0.6296        0.8          1        0.5
Purchase               0.39          0     0.5185        0.4          1     0.3214

Clustered Instances

0       26 ( 26%)
1       27 ( 27%)
2        5 (  5%)
3       14 ( 14%)
4       28 ( 28%)

那么這些結(jié)果該如何解析呢?這個輸出告訴我們每個群集是如何聯(lián)系在一起的,其中 “1” 表示該群集中的每個人都有相同的值 1,而 “0” 則表示該群集中的每個人的該屬性都有一個值 0。其他的數(shù)值是群集內(nèi)的每個人的平均值。每個群集向我們展示了顧客內(nèi)的一種行為類型,從中我們可以開始得出如下結(jié)論:

  • 群集 0— 這個組我們可以稱之為 “Dreamers”,因他們圍著經(jīng)銷店徘徊,查看在停車場上停著的車,卻不步入店面內(nèi),且更糟的是,他們沒有購買過任何東西。
  • 群集 1— 我們將這一組稱為是 “M5 Lovers”,因為他們常常會徑直走到 M5 車型區(qū),對 3-系列的車型和 Z4 均視而不見。不過,他們也沒有多高的購買率 — 只有 52 %。這表明存在潛在問題,也是經(jīng)銷店今后改進的重點,比如可以派更多的銷售人員到 M5 區(qū)。
  • 群集 2— 這個組很小,我們可以稱之為 “Throw-Aways”,因為他們沒有統(tǒng)計意義上的相關(guān)性,我們也不能從其行為得出任何好的結(jié)論。(這種情況若在群集上發(fā)生,可能表明應(yīng)該減少所創(chuàng)建的群集的數(shù)量。)
  • 群集 3— 這個組,我們稱之為 “BMW Babies”,因為他們總是會購買一輛車而且還會支付車款。正是在這里,數(shù)據(jù)向我們顯示了一些有趣的事情:他們一般會在停車場內(nèi)查看各種車型,然后返回到經(jīng)銷店內(nèi)的計算機處搜索中意的車型是否有貨。他們最終會購買 M5 或 Z4 車型(但從不購買 3-系列的)。這個群集告訴經(jīng)銷店它應(yīng)該考慮讓它的搜索計算機在停車場處就能很容易地被看到(或安置一臺室外的搜索計算機),并且讓 M5 或 Z4 在搜索結(jié)果中更為醒目。一旦顧客決定購買汽車,他總是符合購車款的支付條件并能夠圓滿完成這次購買。
  • 群集 4— 這個組我們將稱之為 “Starting Out With BMW”,因為他們總是看 3-系列的車型,從不看貴很多的 M5。他們會徑直步入展廳,而不會在停車場處東看西看,而且也不會使用計算機搜索終端。他們中有 50 % 會到達(dá)支付車款的階段,但只有 32 % 會最終成交。經(jīng)銷店可以得出這樣的結(jié)論:這些初次購買 BMW 車的顧客知道自己想要的車型是哪種( 3-系列的入門級車型)而且希望能夠符合購車款的支付條件以便買得起。經(jīng)銷店可以通過放松購車款的支付條件或是降低 3- 系列車型的價格來提高這一組的銷售。

研究這些群集中數(shù)據(jù)的一種有趣方式是可視地查看它。為此,應(yīng)該在 Cluster 選項卡上的這個 Result List 區(qū)域右鍵單擊(同樣地,亦不是最佳設(shè)計的 UI)。彈出菜單的一個選項是 Visualize Cluster Assignments。彈出的窗口則會讓您處理這些結(jié)果并可視地查看它們。對于本例,將 X 軸更改為 M5 (Num),將 Y 軸更改為 Purchase (Num),將顏色更改為 Cluster (Nom)。結(jié)果,有一個圖表會向我們顯示這些群集是如何按照誰看過 M5 以及誰購買了一輛 M5 分組的。而且,將“Jitter”放大到最高的 3/4 處,這會手動地將這些標(biāo)繪點分散開以便我們能更容易地看到它們。

那么這些可視結(jié)果是否與我們從清單 5 中的結(jié)果集中得出的結(jié)論相符呢?我們可以從 X=1, Y=1 這一點(即看過 M5 且進行過購買的那些人)看出這里所表示的群集只有是 1 和 3。我們還看到處于點 X=0, Y=0 的群集只有 4 和 0。那么這與我們上述結(jié)論是否相符呢?答案是肯定的。群集 1 和 3 是過去購買過 M5 的,而群集 0 則沒有購買過任何車型,群集 4 只關(guān)注 3-系列。圖 8 顯示了本例的可視群集布局。您可以隨意嘗試更改 X 和 Y 軸來辨別出其他的趨勢和模式。

圖 8. 群集可視查看
image.png

進一步閱讀:如果您有興趣進一步鉆研,可以按如下術(shù)語搜索相關(guān)信息: Euclidean distance、Lloyd's algorithm、Manhattan Distance、Chebyshev Distance、sum of squared errors、cluster centroids。

結(jié)束語

本文討論了兩種數(shù)據(jù)挖掘算法:分類樹和群集。這兩種算法與 用 WEKA 進行數(shù)據(jù)挖掘,第 1 部分:簡介和回歸 中介紹的回歸模型的算法不同之處在于沒有從模型只能得到數(shù)值輸出的限制。這兩個模型允許輸出更為靈活,是數(shù)據(jù)挖掘領(lǐng)域的兩個功能更為強大的武器。

從字面上理解,分類樹就是要創(chuàng)建一個具有分支、節(jié)點和枝葉的樹,能夠讓我們拿一個未知的數(shù)據(jù)點,將此數(shù)據(jù)點的屬性應(yīng)用到這個樹并順著這個樹下移,直到到達(dá)一個葉子并且數(shù)據(jù)點的未知輸出可以斷定。我們了解了為了創(chuàng)建一個好的分類樹模型,我們必須要有一個輸出已知的現(xiàn)有數(shù)據(jù)集,從這個數(shù)據(jù)集才能構(gòu)建我們的模型。我們還看到了我們需要將我們的數(shù)據(jù)集分成兩個部分:一個用來創(chuàng)建模型的訓(xùn)練集 ;一個用來驗證模型是否正確且沒有過擬合的測試集。作為本部分的最后一個要點,我還指出在某些時候,即便是創(chuàng)建了一個您認(rèn)為正確的數(shù)據(jù)模型,它也可能不正確,而您必須要摒棄整個模型和算法以尋找更好的解決方案。

群集算法是對一個數(shù)據(jù)集中的數(shù)據(jù)進行分組,以便您可以基于在這些組中看到的趨勢得出結(jié)論。群集與分類及回歸的不同之處在于它不生成單個的輸出變量(結(jié)論容易得出),因而要求您必需觀察輸出并嘗試得出自己的結(jié)論。正如在本例中看到的,這個模型生成了五個群集,但對群集內(nèi)的這些數(shù)據(jù)的分析以及從這些信息中得出結(jié)論則取決于我們。就此而言,非常難以生成準(zhǔn)確的群集模型(想象一下如果我們創(chuàng)建了過多或過少的群集,結(jié)果將會如何),而另一方面,我們將能夠從這個結(jié)果集中挖掘出一些有趣的信息 — 這些信息是使用我們之前討論過的其他任何模型都無法得到的。

下載資源

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容