利用weka进行数据挖掘——基于Apriori算法的关联规则挖掘实例
文章目錄
- 1. weka安裝
- 2. 先分析一個(gè)Apriori算法的關(guān)聯(lián)規(guī)則挖掘?qū)嵗?/li>
- 3. 利用weka進(jìn)行數(shù)據(jù)挖掘
- 3.1 將數(shù)據(jù)轉(zhuǎn)為ARFF格式
- 3.2 利用weka進(jìn)行分析
- 4. 參考文章
首先,如果不熟悉weka的使用的話,可以從我的git倉庫里面拉取一下weka的相關(guān)教程,倉庫里面還有包含此次實(shí)例的所有資源
1. weka安裝
我們可以在weka的官網(wǎng)上下載weka軟件:weka官網(wǎng)
如果下載速度慢的話也可以直接從我的git倉庫里面拉取這個(gè)軟件,軟件是win64位的weka-3-8-6
然后找到對應(yīng)版本:
點(diǎn)擊就可以開始下載了,一路安裝就好了,因?yàn)閣eka是基于Java開發(fā),所以如果你的電腦沒有Java環(huán)境的話,可能在安裝的過程中會(huì)提示你安裝Java,選擇安裝即可。這里我們需要記住一下我們安裝的路徑,因?yàn)槲覀兒竺孢€需要進(jìn)入到安裝目錄中來
2. 先分析一個(gè)Apriori算法的關(guān)聯(lián)規(guī)則挖掘?qū)嵗?/h2>
先打開這個(gè)文檔,這個(gè)文檔里面有一個(gè)基于Apriori算法的關(guān)聯(lián)規(guī)則挖掘?qū)嵗?/p>
可以先看一遍,看能不能用筆自己算出來,計(jì)算的步驟可以看下筆者的上一篇文章:數(shù)據(jù)挖掘十大算法之Apriori算法
只有理解了Apriori算法,才能夠自己編寫代碼進(jìn)行實(shí)踐,weka只是工具,幫助我們快速分析的工具,在分析之前我們需要先知道分析的步驟
這里我們需要對下表中數(shù)據(jù)進(jìn)行數(shù)據(jù)挖掘,尋找這些疾病之間的關(guān)系:
| 1 | 心力衰竭、其他疾病 |
| 2 | 心力衰竭 |
| 3 | 心力衰竭、尿毒癥 |
| 4 | 心力衰竭、腎功能衰竭、糖尿病、尿毒癥 |
| 5 | 心力衰竭、腎功能衰竭、糖尿病、尿毒癥 |
| 6 | 糖尿病 |
| 7 | 糖尿病、心力衰竭、其他疾病 |
| 8 | 糖尿病、尿毒癥 |
| 9 | 糖尿病 |
| 10 | 糖尿病、腎功能衰竭、尿毒癥 |
| 11 | 糖尿病 |
| 12 | 心力衰竭、腎功能衰竭、糖尿病、尿毒癥 |
| 13 | 心力衰竭、腎功能衰竭、糖尿病、尿毒癥 |
| 14 | 腎功能衰竭 |
| 15 | 腎功能衰竭、其他疾病 |
| 16 | 腎功能衰竭、糖尿病 |
| 17 | 腎功能衰竭、尿毒癥 |
| 18 | 腎功能衰竭 |
| 19 | 尿毒癥、糖尿病、腎功能衰竭 |
| 20 | 尿毒癥、腎功能衰竭 |
| 21 | 尿毒癥 |
| 22 | 心力衰竭、腎功能衰竭、糖尿病、尿毒癥 |
| 23 | 心力衰竭、腎功能衰竭、糖尿病、尿毒癥 |
| 24 | 心力衰竭、腎功能衰竭、糖尿病、尿毒癥 |
| 25 | 心力衰竭、腎功能衰竭、糖尿病、尿毒癥 |
我們先回顧一下進(jìn)行關(guān)聯(lián)分析的步驟:
-
Step1:令K = 1 ,計(jì)算單個(gè)項(xiàng)目的支持度,并篩選出頻繁1項(xiàng)集(大于最小支持度 )
-
Step2:(從K=2開始)根據(jù)K-1項(xiàng)的頻繁項(xiàng)目集生成候選K項(xiàng)目集,并進(jìn)行預(yù)剪枝
-
Step3:由候選K項(xiàng)目集生成頻繁K項(xiàng)集(篩選出滿足最小支持度的k項(xiàng)集)
-
重復(fù)步驟2和3,直到無法篩選出滿足最小支持度的集合。(第一階段結(jié)束)
-
Step4:將獲得的最終的頻繁K項(xiàng)集,依次取出。同時(shí)計(jì)算該次取出的這個(gè)K項(xiàng)集 的所有真子集,然后以排列組合的方式形成關(guān)聯(lián)規(guī)則,并計(jì)算規(guī)則的置信度以及提升度,將符合要求的關(guān)聯(lián)規(guī)則生成提出。(算法結(jié)束)
我們可以從上表中知道這些病在事物中出現(xiàn)的次數(shù)為:
| 12 | 15 | 16 | 16 | 3 |
我們先生成候選1項(xiàng)集,并計(jì)算其支持度,支持度(sup(x)) = 某個(gè)項(xiàng)集X在事物集中出現(xiàn)的次數(shù) / 事物集中記錄的總個(gè)數(shù)
| 心力衰竭 | 12/25 = 0.48 |
| 尿毒癥 | 15/25 = 0.6 |
| 腎功能衰竭 | 16 / 25 = 0.64 |
| 糖尿病 | 16 / 25 = 0.64 |
| 其他疾病 | 3 / 25 = 0.12 |
這里我們規(guī)定最小支持度(Support) = 40%,并篩選出頻繁一項(xiàng)集(將不滿足min_support的項(xiàng)集去除掉)
| 心力衰竭 | 12/25 = 0.48 |
| 尿毒癥 | 15/25 = 0.6 |
| 腎功能衰竭 | 16 / 25 = 0.64 |
| 糖尿病 | 16 / 25 = 0.64 |
現(xiàn)在我們有篩選出的頻繁一項(xiàng)集經(jīng)過排列組合生成候選二項(xiàng)集,共有C42 = 6個(gè)候選二項(xiàng)集
同樣我們可以算出每個(gè)項(xiàng)集的支持度(過程與上面一樣,這里不再贅述):
| 心力衰竭、糖尿病 | 36% |
| 心力衰竭、尿毒癥 | 36% |
| 心力衰竭、腎功能衰竭 | 32% |
| 糖尿病、尿毒癥 | 44% |
| 糖尿病、腎功能衰竭 | 44% |
| 尿毒癥、腎功能衰竭 | 48% |
篩選出頻繁二項(xiàng)集
| 糖尿病、尿毒癥 | 44% |
| 糖尿病、腎功能衰竭 | 44% |
| 尿毒癥、腎功能衰竭 | 48% |
當(dāng)然可以先進(jìn)行預(yù)剪枝,但是這里預(yù)剪枝排除不了候選項(xiàng)集。同理我們可以求出頻繁三項(xiàng)集
| 糖尿病、尿毒癥、腎功能衰竭 | 40% |
最后一步我們需要求出不同項(xiàng)集之間的支持度(Support)和置信度(Confidence):
-
🚩(支持度)Support=(AUB)count/n 即A和B同時(shí)出現(xiàn)的次數(shù)之和與事務(wù)數(shù)n之比。
-
🚩(置信度)Confidence=(AUB)count/Acount 即A和B同時(shí)出現(xiàn)的次數(shù)之和與A出現(xiàn)次數(shù)之比。
我們可以計(jì)算出:
- 糖尿病→尿毒癥 Confidence=11/16=68.7%
- 糖尿病→腎功能衰竭 Confidence=11/16=68.7%
- 糖尿病→(尿毒癥∩腎功能衰竭) Confidence=10/16=62.5%
- (尿毒癥∩糖尿病)→腎功能衰竭 Confidence=10/11=90%
為方便起見,將糖尿病標(biāo)記為T,尿毒癥標(biāo)記為N,腎功能衰竭標(biāo)記為S。總結(jié)出部分關(guān)聯(lián)規(guī)則。
| T→N | 44% | 68.7% |
| T→S | 44% | 68.7% |
| T→(N∩S) | 40% | 62.5% |
| (T∩N)→S | 40% | 90.00% |
根據(jù)以上關(guān)聯(lián)規(guī)則可得出一下結(jié)論:
(1)糖尿病、尿毒癥、腎功能衰竭三種疾病之間有一定的關(guān)聯(lián)關(guān)系。
(2)對于同時(shí)患有糖尿病和尿毒癥的44%的疾病人群而言,有68.7%的糖尿病患者會(huì)并發(fā)尿毒癥。
(3)對于同時(shí)患有糖尿病和腎功能衰竭的44%的疾病人群而言,有68.7%的糖尿病患者會(huì)并發(fā)腎功能衰竭。
(4)有40%的患者同時(shí)患有糖尿病、尿毒癥、腎功能衰竭,其中有62.5%的糖尿病患者會(huì)并發(fā)尿毒癥和腎功能衰竭,有90%的糖尿病和尿毒癥患者會(huì)并發(fā)腎功能衰竭。
3. 利用weka進(jìn)行數(shù)據(jù)挖掘
如果數(shù)據(jù)量很大,例如數(shù)據(jù)庫里有幾十萬條數(shù)據(jù),那我們手算肯定是不行的,所以我們就需要借助weka這款軟件來幫助我的進(jìn)行數(shù)據(jù)分析和挖掘。weka的詳細(xì)用法在上面已經(jīng)給了下載的鏈接,可以看一下,接下來我們開始實(shí)戰(zhàn)
首先我們要知道:WEKA存儲(chǔ)數(shù)據(jù)的格式是ARFF(Attribute-Relation File Format)文件,這是一種ASCII文本文件
我們可以在weka安裝目錄的data目錄下找到一些默認(rèn)的ARFF格式的文件
使用WEKA作數(shù)據(jù)挖掘,面臨的第一個(gè)問題往往是我們的數(shù)據(jù)不是ARFF格式的。
幸好,WEKA還提供了對CSV文件的支持,而這種格式是被很多其他軟件所支持的。此外,WEKA還提供了通過JDBC訪問數(shù)據(jù)庫的功能。
3.1 將數(shù)據(jù)轉(zhuǎn)為ARFF格式
首先我先以Excel為例,說明如何獲得CSV文件。然后我們將知道CSV文件如何轉(zhuǎn)化成ARFF文件,畢竟后者才是WEKA支持得最好的文件格式。面對一個(gè)ARFF文件,我們?nèi)杂幸恍╊A(yù)處理要做,才能進(jìn)行挖掘任務(wù)。
Excel的XLS文件可以讓多個(gè)二維表格放到不同的工作表(Sheet)中,我們只能把每個(gè)工作表存成不同的CSV文件。打開一個(gè)XLS文件并切換到需要轉(zhuǎn)換的工作表,另存為CSV類型,點(diǎn)“確定”、“是”忽略提示即可完成操作。
ARFF是表示屬性關(guān)系文件格式的首字母縮略詞。它是使用標(biāo)題的CSV文件格式的擴(kuò)展,提供有關(guān)列中數(shù)據(jù)類型的元數(shù)據(jù)。
我們以上面我們手算過的關(guān)聯(lián)案例來演示,首先我們需要把數(shù)據(jù)整理到Excel表中,后期我們可以通過Java編寫程序來自動(dòng)化完成這些步驟。這里我們將患病標(biāo)記為yes,不患病標(biāo)記為no,得到整理好的Excel表,此表也可以從我提供的git倉庫中拉取到
我們再填Excel表的時(shí)候要注意的是:
- 不要包含中文
- 不要用數(shù)字做標(biāo)識(shí),要用yes/no做標(biāo)識(shí)
當(dāng)然還有很多值得注意的點(diǎn),請看參考文章的第一篇
填好的Excel長這樣,這里我用行數(shù)代替患者編號(hào)了,因?yàn)榫幪?hào)沒有什么意義
我們將此表另存為,保存格式選擇CSV格式,不用管提示,一路確認(rèn)就好
打開我們的CSV格式的文件,長這樣
現(xiàn)在我們需要進(jìn)一步轉(zhuǎn)換格式:.csv -> .arff
這里有兩種方式,將CSV轉(zhuǎn)換為ARFF最迅捷的辦法是使用WEKA所帶的命令行工具。
- 運(yùn)行WEKA的主程序,出現(xiàn)GUI后可以點(diǎn)擊下方按鈕進(jìn)入相應(yīng)的模塊。我們點(diǎn)擊進(jìn)入“Simple CLI”模塊提供的命令行功能。在新窗口的最下方(上方是不能寫字的)輸入框?qū)懮?/li>
- 在WEKA 3.5中提供了一個(gè)“Arff Viewer”模塊,我們可以用它打開一個(gè)CSV文件將進(jìn)行瀏覽,然后另存為ARFF文件。
進(jìn)入“Exploer”模塊,從上方的按鈕中打開CSV文件然后另存為ARFF文件亦可
我這里采取命令行的形式,程序員嗎,肯定還是喜歡用命令行一點(diǎn)
要轉(zhuǎn)換的文件要帶上地址,輸出的文件也要帶上,例如我的命令是:
java weka.core.converters.CSVLoader C:\Users\hw\Desktop\demo1001.csv > C:\Users\hw\Desktop\demo1001.arff查看一下我們轉(zhuǎn)換好的reff格式的文件,長這樣:
3.2 利用weka進(jìn)行分析
接下來我們就利用weka對這些數(shù)據(jù)進(jìn)行分析,來查找這些數(shù)據(jù)之間的關(guān)系
那些面板的具體含義看一下我倉庫里面WEKA中文詳細(xì)教程ppt,寫的很清楚
這里直接上手
當(dāng)然weka的功能非常強(qiáng)大,我們這里僅僅這是做一個(gè)演示,來加深我們對Aprior算法的理解
上面提供的git倉庫里面也有weka的API和一個(gè)demo,讀者可以編寫代碼來對數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行挖掘
4. 參考文章
- weka的基本使用
- 如何在Weka中加載CSV機(jī)器學(xué)習(xí)數(shù)據(jù)
- 【數(shù)據(jù)挖掘 data mining】 Weka在數(shù)據(jù)挖掘中的運(yùn)用(雙語字幕)
- 各大大學(xué)的數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)教學(xué)課件
總結(jié)
以上是生活随笔為你收集整理的利用weka进行数据挖掘——基于Apriori算法的关联规则挖掘实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 认识JSX语法
- 下一篇: 手机开机启动慢是什么原因_手机开机慢,小