99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線(xiàn)電話(huà):13121318867

登錄
首頁(yè)精彩閱讀數(shù)據(jù)挖掘系列使用weka做關(guān)聯(lián)規(guī)則挖掘
數(shù)據(jù)挖掘系列使用weka做關(guān)聯(lián)規(guī)則挖掘
2016-08-15
收藏

數(shù)據(jù)挖掘系列使用weka做關(guān)聯(lián)規(guī)則挖掘

前面幾篇介紹了關(guān)聯(lián)規(guī)則的一些基本概念和兩個(gè)基本算法,但實(shí)際在商業(yè)應(yīng)用中,寫(xiě)算法反而比較少,理解數(shù)據(jù),把握數(shù)據(jù),利用工具才是重要的,前面的基礎(chǔ)篇是對(duì)算法的理解,這篇將介紹開(kāi)源利用數(shù)據(jù)挖掘工具weka進(jìn)行管理規(guī)則挖掘。

weka數(shù)據(jù)集格式arff

arff標(biāo)準(zhǔn)數(shù)據(jù)集簡(jiǎn)介

weka的數(shù)據(jù)文件后綴為arff(Attribute-Relation File Format,即屬性關(guān)系文件格式),arff文件分為注釋、關(guān)系名、屬性名、數(shù)據(jù)域幾大部分,注釋用百分號(hào)開(kāi)頭%,關(guān)系名用@relation申明,屬性用@attribute什么,數(shù)據(jù)域用@data開(kāi)頭,看這個(gè)示例數(shù)據(jù)集(安裝weka后,可在weka的安裝目錄/data下找到weather.numeric.arff):  

復(fù)制代碼

當(dāng)數(shù)據(jù)是數(shù)值型,在屬性名的后面加numeric,如果是離散值(枚舉值),就用一個(gè)大括號(hào)將值域列出來(lái)。@data下一行后為數(shù)據(jù)記錄,數(shù)據(jù)為矩陣形式,即每一個(gè)的數(shù)據(jù)元素個(gè)數(shù)相等,若有缺失值,就用問(wèn)號(hào)?表示。

arff稀疏數(shù)據(jù)集   

我們做關(guān)聯(lián)規(guī)則挖掘,比如購(gòu)物籃分析,我們的購(gòu)物清單數(shù)據(jù)肯定是相當(dāng)稀疏的,超市的商品種類(lèi)有上10000種,而每個(gè)人買(mǎi)東西只會(huì)買(mǎi)幾種商品,這樣如果用矩陣形式表示數(shù)據(jù)顯然浪費(fèi)了很多的存儲(chǔ)空間,我們需要用稀疏數(shù)據(jù)表示,看我們的購(gòu)物清單示例(basket.txt): 

復(fù)制代碼

數(shù)據(jù)集的每一行表示一個(gè)去重后的購(gòu)物清單,進(jìn)行關(guān)聯(lián)規(guī)則挖掘時(shí),我們可以先把商品名字映射為id號(hào),挖掘的過(guò)程只有id號(hào)就是了,到規(guī)則挖掘出來(lái)之后再轉(zhuǎn)回商品名就是了,retail.txt是一個(gè)轉(zhuǎn)化為id號(hào)的零售數(shù)據(jù)集,數(shù)據(jù)集的前面幾行如下:  

復(fù)制代碼

這個(gè)數(shù)據(jù)集的商品有16469個(gè),一個(gè)購(gòu)物的商品數(shù)目遠(yuǎn)少于商品中數(shù)目,因此要用稀疏數(shù)據(jù)表,weka支持稀疏數(shù)據(jù)表示,但我在運(yùn)用apriori算法時(shí)有問(wèn)題,先看一下weka的稀疏數(shù)據(jù)要求:稀疏數(shù)據(jù)和標(biāo)準(zhǔn)數(shù)據(jù)的其他部分都一樣,唯一不同就是@data后的數(shù)據(jù)記錄,示例如下(basket.arff): 


可以看到


表示為了:


稀疏數(shù)據(jù)的表示格式為:{<屬性列號(hào)><空格><值>,...,<屬性列號(hào)><空格><值>},注意每條記錄要用大括號(hào),屬性列號(hào)不是id號(hào),屬性列號(hào)是從0開(kāi)始的,即第一個(gè)@attribute 后面的屬性是第0個(gè)屬性,T表示數(shù)據(jù)存在。

規(guī)則挖取

我們先用標(biāo)準(zhǔn)數(shù)據(jù)集normalBasket.arff[1]試一下,weka的apriori算法和FPGrowth算法。

1、安裝好weka后,打開(kāi)選擇Explorer

2、打開(kāi)文件

3、選擇關(guān)聯(lián)規(guī)則挖掘,選擇算法

4、設(shè)置參數(shù)

參數(shù)主要是選擇支持度(lowerBoundMinSupport),規(guī)則評(píng)價(jià)機(jī)制metriType(見(jiàn)上一篇)及對(duì)應(yīng)的最小值,參數(shù)設(shè)置說(shuō)明如下[2]:

1.        car 如果設(shè)為真,則會(huì)挖掘類(lèi)關(guān)聯(lián)規(guī)則而不是全局關(guān)聯(lián)規(guī)則。
2.        classindex 類(lèi)屬性索引。如果設(shè)置為-1,最后的屬性被當(dāng)做類(lèi)屬性。
3.        delta 以此數(shù)值為迭代遞減單位。不斷減小支持度直至達(dá)到最小支持度或產(chǎn)生了滿(mǎn)足數(shù)量要求的規(guī)則。
4.        lowerBoundMinSupport 最小支持度下界。
5.        metricType 度量類(lèi)型。設(shè)置對(duì)規(guī)則進(jìn)行排序的度量依據(jù)??梢允牵褐眯哦龋?lèi)關(guān)聯(lián)規(guī)則只能用置信度挖掘),提升度(lift),杠桿率(leverage),確信度(conviction)。
在 Weka中設(shè)置了幾個(gè)類(lèi)似置信度(confidence)的度量來(lái)衡量規(guī)則的關(guān)聯(lián)程度,它們分別是:
a)        Lift : P(A,B)/(P(A)P(B)) Lift=1時(shí)表示A和B獨(dú)立。這個(gè)數(shù)越大(>1),越表明A和B存在于一個(gè)購(gòu)物籃中不是偶然現(xiàn)象,有較強(qiáng)的關(guān)聯(lián)度.
b)        Leverage :P(A,B)-P(A)P(B)Leverage=0時(shí)A和B獨(dú)立,Leverage越大A和B的關(guān)系越密切
c)        Conviction:P(A)P(!B)/P(A,!B) (!B表示B沒(méi)有發(fā)生) Conviction也是用來(lái)衡量A和B的獨(dú)立性。從它和lift的關(guān)系(對(duì)B取反,代入Lift公式后求倒數(shù))可以看出,這個(gè)值越大, A、B越關(guān)聯(lián)。
6.        minMtric 度量的最小值。
7.        numRules 要發(fā)現(xiàn)的規(guī)則數(shù)。
8.        outputItemSets 如果設(shè)置為真,會(huì)在結(jié)果中輸出項(xiàng)集。
9.        removeAllMissingCols 移除全部為缺省值的列。

10.    significanceLevel 重要程度。重要性測(cè)試(僅用于置信度)。

11.    upperBoundMinSupport 最小支持度上界。 從這個(gè)值開(kāi)始迭代減小最小支持度。

12.    verbose 如果設(shè)置為真,則算法會(huì)以冗余模式運(yùn)行。

設(shè)置好參數(shù)后點(diǎn)擊start運(yùn)行可以看到Apriori的運(yùn)行結(jié)果:

FPGrowth運(yùn)行的結(jié)果是一樣的:

每條規(guī)則都帶有出現(xiàn)次數(shù)、自信度、相關(guān)度等數(shù)值。

下面測(cè)一個(gè)大一點(diǎn)的數(shù)據(jù)集retail.arff[1](retail.arff是由retail.txt轉(zhuǎn)化而來(lái),為了不造成誤解,我在id好前加了一個(gè)"I",比如2變?yōu)镮2),這個(gè)數(shù)據(jù)用的稀疏數(shù)據(jù)表示方法,數(shù)據(jù)記錄有88162條,用Apriori算法在我的2G電腦上跑不出來(lái),直接內(nèi)存100%,用FPGrowth可以輕松求出,看一下運(yùn)行結(jié)果:  

其他參數(shù)可以自己調(diào)整比較。


數(shù)據(jù)分析咨詢(xún)請(qǐng)掃描二維碼

若不方便掃碼,搜微信號(hào):CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線(xiàn)
立即咨詢(xún)
客服在線(xiàn)
立即咨詢(xún)
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機(jī)數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進(jìn)行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個(gè)參數(shù)驗(yàn)證碼對(duì)象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個(gè)配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶(hù)后臺(tái)檢測(cè)極驗(yàn)服務(wù)器是否宕機(jī) new_captcha: data.new_captcha, // 用于宕機(jī)時(shí)表示是新驗(yàn)證碼的宕機(jī) product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說(shuō)明請(qǐng)參見(jiàn):http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計(jì)時(shí)完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請(qǐng)輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請(qǐng)輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }