日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关联规则:R与SAS的比较

發布時間:2023/12/20 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关联规则:R与SAS的比较 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

啤酒和尿布的故事是關聯分析方法最經典的案例,而用于關聯分析的Apriori算法更是十大數據挖掘算法之一(http://www.cs.uvm.edu/~icdm/algorithms/index.shtml,這個排名雖然是幾年前的調查結果,但是其重要性仍可見一斑)。本文以《R and Data Mining》書中使用的泰坦尼克號人員的生存數據為例,介紹如何使用R和SAS的Apriori算法進行關聯分析,比較兩者的建模結果并對結果中存在的差異進行解釋分析。

一、關聯分析

網上有很多資料介紹關聯分析算法,本文就不再贅述。我自己看的是《Introduction to Data Mining》(有對應的中文版,人民郵電出版社的《數據挖掘導論》),愿意看英文的同學可以訪問:http://www-users.cs.umn.edu/~kumar/dmbook/ch6.pdf。網上其他的資料我也大致翻過,對比之后感覺這本書是一本相當不錯的教材,算法方面介紹地比較全面且有一定深度。我本人不建議大家去看那些非專業人士總結的關聯分析算法介紹,雖然淺顯易懂,但是內容片面,容易誤導初學者,錯把樹木當成了森林。

對于關聯分析在行業應用中的經驗分享、初學者的誤區和最佳實踐方面的資料很少,唯一能找到的一本好書是清華大學出版社的《啤酒與尿布》,主要介紹購物籃分析在零售行業的應用。我始終認為分析師除了算法和軟件,還需要了解行業背景,不然挖出的只是模式,而不是切實可行并且能帶來商業價值的模式,甚至還有可能是錯誤的模式。?

二、軟件

我只用過R和SAS,其他的軟件沒碰過,所以只能對這兩個軟件進行比較。

算法 R/ARULES SAS/EM
Apriori Yes Yes
ECLAT Yes No
FP-Growth No No

據網友說Excel也能做關聯分析,但是因為其對數據進行了抽樣,所以每次運行的結果都不一樣。SPSS的Modeler不知道怎么樣,有用過的同學請分享一下經驗,最好使用泰坦尼克號的數據進行分析,這樣可以比較一下各軟件的結果是否相同。

三、R的代碼和結果

R的代碼主要來自《R and Data Mining》,我只加了下載數據的代碼和對代碼的中文說明。

1)下載泰坦尼克數據

setInternet2(TRUE)
con <- url(“http://www.rdatamining.com/data/titanic.raw.rdata“)
load(con)
close(con) # url() always opens the connection
str(titanic.raw)

2)關聯分析

library(arules)
# find association rules with default settings
rules <- apriori(titanic.raw)
inspect(rules)

3)只保留結果中包含生存變量的關聯規則

# rules with rhs containing “Survived” only
rules <- apriori(titanic.raw, parameter = list(minlen=2, supp=0.005, conf=0.8), appearance = list(rhs=c(“Survived=No”, “Survived=Yes”), default=”lhs”),control = list(verbose=F))
rules.sorted <- sort(rules, by=”lift”)
inspect(rules.sorted)

R 總共生成了12條跟人員生存相關的規則:
lhs?????? rhs??????support??????confidence??????lift
1 {Class=2nd, Age=Child}???????????????????????? => {Survived=Yes}
0.010904134 1.0000000 3.095640
2 {Class=2nd, Sex=Female, Age=Child}? => {Survived=Yes}
0.005906406 1.0000000 3.095640
3 {Class=1st, Sex=Female}??????????????????????=> {Survived=Yes}
0.064061790 0.9724138 3.010243
4 {Class=1st, Sex=Female, Age=Adult}??? => {Survived=Yes}
0.063607451 0.9722222 3.009650
5 {Class=2nd, Sex=Male, Age=Adult}??????? => {Survived=No}
0.069968196 0.9166667 1.354083
6 {Class=2nd, Sex=Female}??????????????????????=> {Survived=Yes}
0.042253521 0.8773585 2.715986
7 {Class=Crew, Sex=Female}?????????????????? => {Survived=Yes}
0.009086779 0.8695652 2.691861
8 {Class=Crew, Sex=Female, Age=Adult} => {Survived=Yes}
0.009086779 0.8695652 2.691861
9 {Class=2nd, Sex=Male}????????????????????????? ?=> {Survived=No}
0.069968196 0.8603352 1.270871
10 {Class=2nd, Sex=Female, Age=Adult} ?=> {Survived=Yes}
0.036347115 0.8602151 2.662916
11 {Class=3rd, Sex=Male, Age=Adult}?????? => {Survived=No}
0.175829169 0.8376623 1.237379
12 {Class=3rd, Sex=Male}???????????????????????? ?=> {Survived=No}
0.191731031 0.8274510 1.222295

4)去除冗余的規則

# find redundant rules
subset.matrix <- is.subset(rules.sorted, rules.sorted)
subset.matrix[lower.tri(subset.matrix, diag=T)] <- NA
redundant <- colSums(subset.matrix, na.rm=T) >= 1
which(redundant)

# remove redundant rules
rules.pruned <- rules.sorted[!redundant]
inspect(rules.pruned)

去除冗余的規則后剩下8條規則:
lhs?????? rhs??????support??????confidence??????lift
1 {Class=2nd, Age=Child}?????????????????? => {Survived=Yes}
0.010904134? 1.0000000 3.095640
2 {Class=1st, Sex=Female}??????????????? => {Survived=Yes}
0.064061790? 0.9724138 3.010243
3 {Class=2nd, Sex=Female}?????????????? => {Survived=Yes}
0.042253521? 0.8773585 2.715986
4 {Class=Crew, Sex=Female}??????????? => {Survived=Yes}
0.009086779? 0.8695652 2.691861
5 {Class=2nd, Sex=Male, Age=Adult} => {Survived=No}
0.069968196? 0.9166667 1.354083
6 {Class=2nd, Sex=Male}?????????????????? => {Survived=No}
0.069968196? 0.8603352 1.270871
7 {Class=3rd, Sex=Male, Age=Adult}? => {Survived=No}
0.175829169? 0.8376623 1.237379
8 {Class=3rd, Sex=Male}????????????????????=> {Survived=No}
0.191731031? 0.8274510 1.222295

5)結果的解釋

對于結果的解釋,一定要慎重,千萬不要盲目下結論。從下面的四條規則看,好像確實像電影中描述的那樣:婦女和兒童優先。

1 {Class=2nd, Age=Child}????????????? => {Survived=Yes} 0.010904134? 1.0000000 3.095640
2 {Class=1st, Sex=Female}?????????? => {Survived=Yes} 0.064061790? 0.9724138 3.010243
3 {Class=2nd, Sex=Female}????????? => {Survived=Yes} 0.042253521? 0.8773585 2.715986
4 {Class=Crew, Sex=Female}?????? => {Survived=Yes} 0.009086779? 0.8695652 2.691861

如果我們減小最小支持率和置信度的閾值,則能看到更多的真相。

rules <- apriori(titanic.raw, parameter = list(minlen=3, supp=0.002, conf=0.2), appearance = list(rhs=c(“Survived=Yes”), lhs=c(“Class=1st”, “Class=2nd”, “Class=3rd”, “Age=Child”, “Age=Adult”), default=”none”), control = list(verbose=F))
rules.sorted <- sort(rules, by=”confidence”)
inspect(rules.sorted)

lhs??????????????????????? rhs???????????support???? confidence lift
1 {Class=2nd, Age=Child} => {Survived=Yes} 0.010904134 1.0000000 3.0956399
2 {Class=1st, Age=Child} => {Survived=Yes} 0.002726034 1.0000000 3.0956399
3 {Class=1st, Age=Adult} => {Survived=Yes} 0.089504771 0.6175549 1.9117275
4 {Class=2nd, Age=Adult} => {Survived=Yes} 0.042707860 0.3601533 1.1149048
5 {Class=3rd, Age=Child} => {Survived=Yes} 0.012267151 0.3417722 1.0580035
6 {Class=3rd, Age=Adult} => {Survived=Yes} 0.068605179 0.2408293 0.7455209

從規則3和規則5以及之前的規則2和3可以看出泰坦尼克號獲得優先權的主要是頭等艙、二等艙的婦孺。

據統計,頭等艙男乘客的生還率比三等艙中兒童的生還率還稍高一點。美國新澤西州州立大學教授、著名社會學家戴維·波普諾研究后毫不客氣地修改了曾使英國人頗感“安慰”的“社會規范”(婦女和兒童優先):“在泰坦尼克號上實踐的社會規范這樣表述可能更準確一些:‘頭等艙和二等艙的婦女和兒童優先’?!?/p>

這些是關于泰坦尼克號生存數據分析的資料:
泰坦尼克號逃生真相:“婦女兒童優先”只是個傳說
歷史沒有那么溫暖

6)可視化

# visualize?rules
library(arulesViz)
plot(rules)
plot(rules, method=”graph”, control=list(type=”items”))
plot(rules, method=”paracoord”, control=list(reorder=TRUE))

對于不熟悉R的SAS用戶,可以閱讀以下資料學習R以及ARULES包:
http://cran.r-project.org/web/packages/arules/vignettes/arules.pdf
https://science.nature.nps.gov/im/datamgmt/statistics/R/documents/R_for_SAS_SPSS_users.pdf

四、SAS代碼和結果

1)下載泰坦尼克數據

proc?iml;
submit?/R;
setInternet2(TRUE)
con <- url(http://www.rdatamining.com/data/titanic.raw.rdata)
load(con)
close(con) # url() always opens the connection
endsubmit;

call?ImportDataSetFromR(“Work.titanic”,?“titanic.raw”);
run;quit;

2)將數據轉換成SAS/EM要求的格式

data?items2;
set?titanic;
length?tid?8;
length?item $8;
tid = _n_;
item = class;
output;
item = sex;
output;
item = age;
output;
item = survived;
output;
keep?tid item;
run;

3)關聯分析

proc?dmdb?data=items2 dmdbcat=dbcat;
class?tid item;
run;?quit;

proc?assoc?data=items2 dmdbcat=dbcat pctsup=0.5?out=frequentItems;
id?tid;
target item;
run;

proc?rulegen?in=frequentItems dmdbcat=dbcat out=rules minconf=80;
run?;

proc?sort?data=rules;
by?descending?conf;
run?;

4)?只保留結果中包含生存變量的關聯規則

data?surviverules;
set?rules(where=(set_size>1?and (_rhand=‘Yes’?or _rhand=‘No’)));
run;

proc?print?data=surviverules;
var?conf support lift rule ;
run?;

SAS 結果:

OBSCONFSUPPORTLIFTRULE12345678910111213
100.00 1.09 3.10 2nd & Child ==> Yes
100.00 0.59 3.10 2nd & Child & Female ==> Yes
100.00 0.50 3.10 2nd & Child & Male ==> Yes
97.24 6.41 3.01 1st & Female ==> Yes
97.22 6.36 3.01 1st & Adult & Female ==> Yes
91.67 7.00 1.35 2nd & Adult & Male ==> No
87.74 4.23 2.72 2nd & Female ==> Yes
86.96 0.91 2.69 Crew & Female ==> Yes
86.96 0.91 2.69 Adult & Crew & Female ==> Yes
86.03 7.00 1.27 2nd & Male ==> No
86.02 3.63 2.66 2nd & Adult & Female ==> Yes
83.77 17.58 1.24 3rd & Adult & Male ==> No
82.75 19.17 1.22 3rd & Male ==> No

有關SAS/EM關聯分析的公開資料很少,產品的在線幫助文檔大概從4.3以后的版本就設置了訪問權限,只有SAS/EM的用戶才能閱讀,新版本的功能和界面跟4.3版本有很大差別。這里只能給大家一些4.3的幫助文檔,主要是上面代碼中用到的幾個過程步:http://support.sas.com/documentation/onlinedoc/miner/em43/dmdb.pdf
http://support.sas.com/documentation/onlinedoc/miner/em43/assoc.pdf
http://support.sas.com/documentation/onlinedoc/miner/em43/sequence.pdf
http://support.sas.com/documentation/onlinedoc/miner/em43/rulegen.pdf

mbscore(購物籃數據的預測,是EM 6.1/SAS 9.2 時新引入的過程步,支持層次關聯<Hierarchical Association>)

五、結果比較

從上面的結果看,R生成了12條規則,而SAS生成了13條規則,對比每條規則后,發現SAS的第3條規則在R中沒有。

3
100.00 0.50 3.10 2nd & Child & Male ==> Yes

我猜測原因是兩個軟件對最小支持度的處理不太一樣,SAS可能是對最小支持度百分比乘以總記錄條數后取整了。此處,泰坦尼克數據總共有2201條記錄,最小支持度百分比為 0.5%,兩者相乘積為11.005,而 2nd & Child & Male ==> Yes 這條規則總共出現過11次,如果嚴格按照實數大小比較,不應該出現在最后的結果中,但是如果按照整數部分比較,則結果正確。打算將SAS模型切換到R或者將R模型切換到SAS的同學要注意這個差異,結果有時不完全一樣!

data?min_support;
set?frequentItems;
if?count=int(2201*0.005);
run;

proc?print?data=min_support;
run;quit;?

OBSSET_SIZECOUNTITEM1ITEM2ITEM3ITEM4ITEM5ITEM612
3 11 2nd Child Male ? ? ?
4 11 2nd Child Male Yes ? ?

相比SAS,R關聯分析中比較吸引人的功能就是從規則集中去除冗余的規則,這一功能SAS里面好像沒有(我沒找到)。SAS用戶如果想要使用R的這個功能,我找到的唯一辦法就是將SAS的關聯規則導出成PMML文件,然后再將PMML文件導入R生成對應的Rule對象,但是這個方法因為我的環境有點問題,所以我自己沒試。

有興趣的同學,可以看看下面的資料:
1)如何將PMML文件導入R生成Rule對象?
2)如何在SAS EMM 中使用PMML?

附:PMML技術的未來

對于模型的部署和使用,尤其是跨軟件、平臺的使用場景下或者對于大數據的分析,PMML是一個可行的解決方案,有一些廠商已經在自己的產品中通過PMML這種方式來實現對大數據的分析預測。

Zementis:
Deploying Predictive Analytics with PMML, R evolution R, and ADAPA
PMML: Accelerating the Time to Value for Predictive Analytics in the Big Data Era

IBM:Database Mining Guide

轉載于:https://www.cnblogs.com/huzs/p/3741981.html

總結

以上是生活随笔為你收集整理的关联规则:R与SAS的比较的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。