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

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

登錄
首頁(yè)精彩閱讀用R語(yǔ)言進(jìn)行關(guān)聯(lián)分析
用R語(yǔ)言進(jìn)行關(guān)聯(lián)分析
2018-05-21
收藏

R語(yǔ)言進(jìn)行關(guān)聯(lián)分析

關(guān)聯(lián)是兩個(gè)或多個(gè)變量取值之間存在的一類(lèi)重要的可被發(fā)現(xiàn)的某種規(guī)律性。關(guān)聯(lián)分析目的是尋找給定數(shù)據(jù)記錄集中數(shù)據(jù)項(xiàng)之間隱藏的關(guān)聯(lián)關(guān)系,描述數(shù)據(jù)之間的密切度。

幾個(gè)基本概念

1.      項(xiàng)集

這是一個(gè)集合的概念,在一籃子商品中的一件消費(fèi)品即為一項(xiàng)(Item),則若干項(xiàng)的集合為項(xiàng)集,如{啤酒,尿布}構(gòu)成一個(gè)二元項(xiàng)集。

2.      關(guān)聯(lián)規(guī)則

一般記為的形式,X為先決條件,Y為相應(yīng)的關(guān)聯(lián)結(jié)果,用于表示數(shù)據(jù)內(nèi)隱含的關(guān)聯(lián)性。如:,表示購(gòu)買(mǎi)了尿布的消費(fèi)者往往也會(huì)購(gòu)買(mǎi)啤酒。

關(guān)聯(lián)性強(qiáng)度如何,由三個(gè)概念——支持度、置信度、提升度來(lái)控制和評(píng)價(jià)。


例:有10000個(gè)消費(fèi)者購(gòu)買(mǎi)了商品,其中購(gòu)買(mǎi)尿布1000個(gè),購(gòu)買(mǎi)啤酒2000個(gè),購(gòu)買(mǎi)面包500個(gè),同時(shí)購(gòu)買(mǎi)尿布和面包800個(gè),同時(shí)購(gòu)買(mǎi)尿布和面包100個(gè)。

3.      支持度(Support)

支持度是指在所有項(xiàng)集中{X, Y}出現(xiàn)的可能性,即項(xiàng)集中同時(shí)含有X和Y的概率:

該指標(biāo)作為建立強(qiáng)關(guān)聯(lián)規(guī)則的第一個(gè)門(mén)檻,衡量了所考察關(guān)聯(lián)規(guī)則在“量”上的多少。通過(guò)設(shè)定最小閾值(minsup),剔除“出鏡率”較低的無(wú)意義規(guī)則,保留出現(xiàn)較為頻繁的項(xiàng)集所隱含的規(guī)則。

設(shè)定最小閾值為5%,由于{尿布,啤酒}的支持度為800/10000=8%,滿(mǎn)足基本輸了要求,成為頻繁項(xiàng)集,保留規(guī)則;而{尿布,面包}的支持度為100/10000=1%,被剔除。


4.      置信度(Confidence)

置信度表示在先決條件X發(fā)生的條件下,關(guān)聯(lián)結(jié)果Y發(fā)生的概率:

這是生成強(qiáng)關(guān)聯(lián)規(guī)則的第二個(gè)門(mén)檻,衡量了所考察的關(guān)聯(lián)規(guī)則在“質(zhì)”上的可靠性。相似的,我們需要對(duì)置信度設(shè)定最小閾值(mincon)來(lái)實(shí)現(xiàn)進(jìn)一步篩選。

具體的,當(dāng)設(shè)定置信度的最小閾值為70%時(shí),置信度為800/1000=80%,而的置信度為800/2000=40%,被剔除。


5.      提升度(lift)

提升度表示在含有X的條件下同時(shí)含有Y的可能性與沒(méi)有X這個(gè)條件下項(xiàng)集中含有Y的可能性之比:

該指標(biāo)與置信度同樣衡量規(guī)則的可靠性,可以看作是置信度的一種互補(bǔ)指標(biāo)。

R中Apriori算法

算法步驟:

1.      選出滿(mǎn)足支持度最小閾值的所有項(xiàng)集,即頻繁項(xiàng)集;

2.      從頻繁項(xiàng)集中找出滿(mǎn)足最小置信度的所有規(guī)則。


> library(arules)   #加載arules包

> click_detail =read.transactions("click_detail.txt",format="basket",sep=",",cols=c(1))  #讀取txt文檔(文檔編碼為ANSI)

> rules <- apriori(click_detail, parameter =list(supp=0.01,conf=0.5,target="rules"))  #調(diào)用apriori算法

> rules

set of419 rules

> inspect(rules[1:10])  #查看前十條規(guī)則


解釋

1)        library(arules):加載程序包arules,當(dāng)然如果你前面沒(méi)有下載過(guò)這個(gè)包,就要先install.packages(arules)


2)        click_detail =read.transactions("click_detail.txt",format="basket",sep=",",cols=c(1)):讀入數(shù)據(jù)


read.transactions(file, format =c("basket", "single"), sep = NULL,

cols = NULL, rm.duplicates =FALSE, encoding = "unknown")


file:文件名,對(duì)應(yīng)click_detail中的“click_detail.txt”

format:文件格式,可以有兩種,分別為“basket”,“single”,click_detail.txt中用的是basket。

basket: basket就是籃子,一個(gè)顧客買(mǎi)的東西都放到同一個(gè)籃子,所有顧客的transactions就是一個(gè)個(gè)籃子的組合結(jié)果。如下形式,每條交易都是獨(dú)立的。

文件形式:

item1,item2

item1

item2,item3

讀入后:

items 

1 {item1,

item2}

2 {item1}

3 {item2,

item3}

single: single的意思,顧名思義,就是單獨(dú)的交易,簡(jiǎn)單說(shuō),交易記錄為:顧客1買(mǎi)了產(chǎn)品1, 顧客1買(mǎi)了產(chǎn)品2,顧客2買(mǎi)了產(chǎn)品3……(產(chǎn)品1,產(chǎn)品2,產(chǎn)品3中可以是單個(gè)產(chǎn)品,也可以是多個(gè)產(chǎn)品),如下形式:

trans1 item1

trans2 item1

trans2 item2

讀入后:

items   transactionID

1 {item1}        trans1

2 {item1,             

item2}        trans2

sep:文件中數(shù)據(jù)是怎么被分隔的,默認(rèn)為空格,click_detail里面用逗號(hào)分隔

cols:對(duì)basket, col=1,表示第一列是數(shù)據(jù)的transaction ids(交易號(hào)),如果col=NULL,則表示數(shù)據(jù)里面沒(méi)有交易號(hào)這一列;對(duì)single,col=c(1,2)表示第一列是transaction ids,第二列是item ids

rm.duplicates:是否移除重復(fù)項(xiàng),默認(rèn)為FALSE

encoding:寫(xiě)到這里研究了encoding是什么意思,發(fā)現(xiàn)前面txt可以不是”ANSI”類(lèi)型,如果TXT是“UTF-8”,寫(xiě)encoding=”UTF-8”,就OK了.

3)        rules <- apriori(click_detail,parameter = list(supp=0.01,conf=0.5,target="rules")):apriori函數(shù)

apriori(data, parameter = NULL, appearance = NULL, control = NULL)

data:數(shù)據(jù)

parameter:設(shè)置參數(shù),默認(rèn)情況下parameter=list(supp=0.1,conf=0.8,maxlen=10,minlen=1,target=”rules”)

supp:支持度(support)

conf:置信度(confidence)

maxlen,minlen:每個(gè)項(xiàng)集所含項(xiàng)數(shù)的最大最小值

target:“rules”或“frequent itemsets”(輸出關(guān)聯(lián)規(guī)則/頻繁項(xiàng)集)

apperence:對(duì)先決條件X(lhs),關(guān)聯(lián)結(jié)果Y(rhs)中具體包含哪些項(xiàng)進(jìn)行限制,如:設(shè)置lhs=beer,將僅輸出lhs含有beer這一項(xiàng)的關(guān)聯(lián)規(guī)則。默認(rèn)情況下,所有項(xiàng)都將無(wú)限制出現(xiàn)。

control:控制函數(shù)性能,如可以設(shè)定對(duì)項(xiàng)集進(jìn)行升序sort=1或降序sort=-1排序,是否向使用者報(bào)告進(jìn)程(verbose=F/T)

補(bǔ)充

通過(guò)支持度控制:rules.sorted_sup = sort(rules, by=”support”)

通過(guò)置信度控制:rules.sorted_con = sort(rules, by=”confidence”)

通過(guò)提升度控制:rules.sorted_lift = sort(rules, by=”lift”)


Apriori算法

兩步法:

1.      頻繁項(xiàng)集的產(chǎn)生:找出所有滿(mǎn)足最小支持度閾值的項(xiàng)集,稱(chēng)為頻繁項(xiàng)集;

2.      規(guī)則的產(chǎn)生:對(duì)于每一個(gè)頻繁項(xiàng)集l,找出其中所有的非空子集;然后,對(duì)于每一個(gè)這樣的子集a,如果support(l)與support(a)的比值大于最小可信度,則存在規(guī)則a==>(l-a)。


頻繁項(xiàng)集產(chǎn)生所需要的計(jì)算開(kāi)銷(xiāo)遠(yuǎn)大于規(guī)則產(chǎn)生所需的計(jì)算開(kāi)銷(xiāo)

頻繁項(xiàng)集的產(chǎn)生

幾個(gè)概念:

1,  一個(gè)包含K個(gè)項(xiàng)的數(shù)據(jù)集,可能產(chǎn)生2^k個(gè)候選集

2,先驗(yàn)原理:如果一個(gè)項(xiàng)集是頻繁的,則它的所有子集也是頻繁的(理解了頻繁項(xiàng)集的意義,這句話(huà)很容易理解的);相反,如果一個(gè)項(xiàng)集是非頻繁的,則它所有子集也一定是非頻繁的。

3基于支持度(SUPPORT)度量的一個(gè)關(guān)鍵性質(zhì):一個(gè)項(xiàng)集的支持度不會(huì)超過(guò)它的子集的支持度(很好理解,支持度是共同發(fā)生的概率,假設(shè)項(xiàng)集{A,B,C},{A,B}是它的一個(gè)自己,A,B,C同時(shí)發(fā)生的概率肯定不會(huì)超過(guò)A,B同時(shí)發(fā)生的概率)。


上面這條規(guī)則就是Apriori中使用到的,如下圖,當(dāng)尋找頻繁項(xiàng)集時(shí),從上往下掃描,當(dāng)遇到一個(gè)項(xiàng)集是非頻繁項(xiàng)集(該項(xiàng)集支持度小于Minsup),那么它下面的項(xiàng)集肯定就是非頻繁項(xiàng)集,這一部分就剪枝掉了。


一個(gè)例子(百度到的一個(gè)PPT上的):

當(dāng)我在理解頻繁項(xiàng)集的意義時(shí),在R上簡(jiǎn)單的復(fù)現(xiàn)了這個(gè)例子,這里采用了eclat算法,跟apriori應(yīng)該差不多:

代碼:

item <- list(

c("bread","milk"),

c("bread","diaper","beer","eggs"),

c("milk","diaper","beer","coke"),

c("bread","milk","diaper","beer"),

c("bread","milk","diaper","coke")

)


names(item) <- paste("tr",c(1:5),sep = "")


item


trans <- as(item,"transactions")   #將List轉(zhuǎn)為transactions型



rules = eclat(trans,parameter = list(supp = 0.6,

target ="frequent itemsets"),control = list(sort=1))


inspect(rules)   #查看頻繁項(xiàng)集


運(yùn)行后結(jié)果:

>inspect(rules)

items   support

1{beer,         

diaper}    0.6

2{diaper,       

milk}      0.6

3{bread,        

diaper}    0.6

4{bread,        

milk}      0.6

5{beer}       0.6

6{milk}       0.8

7{bread}      0.8

8{diaper}     0.8


以上就是該例子的所有頻繁項(xiàng)集,然后我發(fā)現(xiàn)少了{(lán)bread,milk,diaper}這個(gè)項(xiàng)集,回到例子一看,這個(gè)項(xiàng)集實(shí)際上只出現(xiàn)了兩次,所以是沒(méi)有這個(gè)項(xiàng)集的。

規(guī)則的產(chǎn)生

每個(gè)頻繁k項(xiàng)集能產(chǎn)生最多2k-2個(gè)關(guān)聯(lián)規(guī)則

將項(xiàng)集Y劃分成兩個(gè)非空的子集X和Y-X,使得X ->Y-X滿(mǎn)足置信度閾值


定理:如果規(guī)則X->Y-X不滿(mǎn)足置信度閾值,則X’->Y-X’的規(guī)則一定也不滿(mǎn)足置信度閾值,其中X’是X的子集


Apriori按下圖進(jìn)行逐層計(jì)算,當(dāng)發(fā)現(xiàn)一個(gè)不滿(mǎn)足置信度的項(xiàng)集后,該項(xiàng)集所有子集的規(guī)則都可以剪枝掉了。

數(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); }