久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么用WEKA進行數據挖掘

179次閱讀
沒有評論

共計 8220 個字符,預計需要花費 21 分鐘才能閱讀完成。

這篇文章主要介紹“怎么用 WEKA 進行數據挖掘”,在日常操作中,相信很多人在怎么用 WEKA 進行數據挖掘問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么用 WEKA 進行數據挖掘”的疑惑有所幫助!接下來,請跟著丸趣 TV 小編一起來學習吧!

分類 vs. 群集 vs. 最近鄰

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

回歸

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

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

分類

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

群集

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

最近鄰

問題:“當人們購買 BMW M5 時,他們傾向于同時購買其他哪些選項?”數據挖掘顯示,人們入店并購買一輛 BMW M5 時,他們還會傾向于購買與之配套的行李箱。(這也就是所謂的購物籃分析)。使用此數據,汽車經銷店就會將配套行李箱的促銷廣告放在店面的顯眼處,甚至會在報紙上做促銷廣告,如果他們購買 M5,配套行李箱將免費 / 打折,以期增加銷售。

回頁首

分類

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

清單 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]

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

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

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

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

在使用 WEKA 前,有關分類我還想指出最后一點,那就是假正和假負。假正指的是這樣的一個數據實例:我們創建的這個模型預測它應該是正的,但事實相反,實際值卻是負的。同樣地,假負指的是這樣一個數據實例:我們創建的這個模型預測它應該是負的,但事實相反,實際值卻是正的。

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

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

WEKA 數據集

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

收入水平 [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 購買的年 / 月

是否過去曾響應過延保計劃

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

清單 2. 分類 WEKA 數據

@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 內進行分類

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

圖 1. WEKA 內的 BMW 分類數據

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

圖 2. BMW 分類算法

至此,我們已經準備好可以在 WEKA 內創建我們的模型了。請確保  Use training set  被選中以便我們使用剛剛加載的這個數據集來創建模型。單擊  Start  并讓 WEKA 運行。模型的輸出應類似于清單 3 內的結果。

清單 3. WEKA 的分類模型的輸出

Number of Leaves :  28
Size of the tree :  43

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

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

這些數字是什么意思?  這里應該關注的重要數字是“Correctly Classified Instances”(59.1 %)與“Incorrectly Classified Instances”(40.9 %)旁邊的這些數字。其他的重要數字還有“ROC Area”列第一行的這個數字(0.616);我稍候會詳細解釋這個數字,目前只需記住即可。最后,在“Confusion Matrix”中,顯示了假正和假負的數量。在這個矩陣中,假正為 516,假負為 710。

我們怎么才能知道這是一個好的模型?  由于準確率僅為 59.1 %,我不得不承認經初步分析后,這不是一個非常好的模型。

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

圖 3. 分類樹可視化

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

圖 4. 分類樹測試

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

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

我本想帶您親歷用適合于分類模型的數據生成一個分類樹的全過程。然而,我們從 WEKA 獲得的結果表明我們錯了。我們在這里本應選擇的并非   分類樹。我們所創建的這個模型不能告訴我們任何信息,并且如果我們使用它,我們可能會做出錯誤的決策并浪費錢財。

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

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

回頁首

群集

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

不過,對于一般的用戶,群集有可能是最為有用的一種數據挖掘方法。它可以迅速地將整個數據集分成組,供您快速得出結論。此方法背后的算法多少有些復雜和難懂,這也是我們為何要充分利用 WEKA 的原因。

算法概覽

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

數據集內的每個屬性都應該是規格化的,因此,每個值均除以該屬性在數據集內的最高值與最低值間的差值。例如,如果屬性是年齡,且最高值為 72,最低值為 16,那么年齡 32 將被規格化為 0.5714。

理想的群集數量給定后,就可以隨機地從數據集選擇該數量的樣例來充當我們初始測試群集中心。比如,如果想要有三個群集,那么就可以從數據集中隨意選擇三行數據。

計算從每個數據樣例到群集中心(我們隨意選中的數據行)的距離,使用距離計算的最小平方法。

基于到每個群集中心的最短距離將每個數據行分配給一個群集。

計算重心,即只使用每個群集的數的每列數據的平均數。

計算每個數據樣例與剛剛創建的這些重心之間的距離。如果群集及群集數不變,那么就說明大功告成,群集創建完畢。如果它們變化,那么就需要返回到步驟 3 重新開始并一遍遍重復,直到不再變化為止。

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

WEKA 的數據集

我們為群集示例要使用的這個數據集同樣也圍繞著我們虛構的 BMW 經銷店。這個經銷店保留了人們如何在經銷店以及展廳行走、他們看了哪些車以及他們最終購車的機率的記錄。經銷店期望通過尋找數據內的模式挖掘這些數據并使用群集來判斷其客戶是否有某種行為特點。在這個例子中有 100 行數據,并且每個列都描述了顧客在他們各自的 BMW 體驗中所到達的步驟,比如列中的 1 表示到達這一步的顧客看過這輛車,0 表示他們不曾到達看過車的這一步。清單 4 顯示了我們在 WEKA 中所使用的 ARFF 數據。

清單 4. 群集 WEKA 數據

@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 內進行群集

采用與將數據加載到  Preprocess  選項卡時的相同步驟來將數據文件 bmw-browsers.arff 加載到 WEKA 內。花上幾分鐘時間來查看一下這個選項卡內的數據。看看這些列、屬性數據以及列的分布等。在加載數據后,屏幕應該類似于圖 5。

圖 5. WEKA 內的 BMW 群集數據

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

圖 6. BMW 群集算法

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

圖 7. 群集屬性

至此,我們已經可以運行這個群集算法了。如果使用電子數據表處理 100 行數據和五個數據群集將會花費幾個小時的計算時間,但 WEKA 在不到一秒鐘的時間內就能給出答案。輸出應該類似于清單 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

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-03發表,共計8220字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 阿城市| 新丰县| 铅山县| 昆明市| 普洱| 津南区| 名山县| 台南县| 日照市| 彭阳县| 余姚市| 吴旗县| 克东县| 湘潭市| 沙湾县| 库尔勒市| 台州市| 东山县| 海盐县| 原平市| 定襄县| 镇巴县| 荥经县| 颍上县| 荥阳市| 青川县| 洛浦县| 辉县市| 远安县| 云安县| 乌兰县| 鹤庆县| 小金县| 六枝特区| 观塘区| 来凤县| 锡林浩特市| 呼和浩特市| 张家港市| 东乌| 昌都县|