《R语言数据挖掘》笔记

#《R语言数据挖掘》#
#Learning Data Mining with R#
#[哈萨克斯坦]贝特·麦克哈贝尔(Bater Makhabel)著#
#机械工程出版社#

#书中没有给真实的应用及例子。本笔记中带(self)标记的部分是自己上网找的
第一章 预备知识
    1.1 大数据
    1.2 数据源
    1.3 数据挖掘
        数据挖掘就是在数据中发现一个模型,也成为探索性数据分析,及从数据中发现有用的、有效的、意想不到的且可以理解的知识
        数据挖掘方法可总结为两大类数据挖掘问题:特征提取和总结
        1.3.1 特征提取
            提取数据最突出特征并忽略其他特征
                例:频繁项集,相似项
        1.3.2 “总结”
            简明ie近似的对数据集进行总结(或者摘要),比如聚类
        1.3.3 数据挖掘过程
    1.4 社交网络挖掘
        从社交网络的图形数据中发现模型
    1.5 文本挖掘
    1.6 网络挖掘
    ... ...
    1.11 数据清洗
        填补缺失值、发现异常值,平滑噪声,修正数据不一致性
    1.12 数据集成
        多个数据源数据合并
    1.13 数据降维
        1.13.1 特征值和特征向量
        1.13.2 主成分分析
        1.13.3 奇异值分解
        1.13.4 CUR分解
    1.14 数据变换与离散化
        1.14.1 数据变换
            将数据变为可用于挖掘的正确形式
        1.14.2 标准化数据的变换方法
            最大-最小值标准化
                线性变换
                最大最小值可用时
            z分数标准化
                一个分数与平均数的差再除以标准差的过程。
                数据要求是正态分布
                相当与统一了标准之后,再看方差。
                    例:某次期中考试,小明数学考了112,英语考了108.那么他的成绩好么?他的数学成绩好还是英语成绩好?
                    已知全市数学平均成绩是 108, 方差21 , 英语的平均成绩是97,方差18
                    通过求Z 值和查Z值表,我们可以得知
                    小明的数学成绩 在全市成绩的排名是57.53%, 英语成绩是72.91%
                    所以他的数学成绩中等,英语成绩比较好。
            十进制标准化
                移动小数点...
        1.14.3 数据离散化
            将数据通过值映射将数值数据变换成区间标签或者概念标签
                分箱,直方图,聚类,决策树,相关分析等
    1.15 结果可视化
第二章 频繁模式、关联规则和相关规则挖掘
    关联规则算法可从多种数据类型中发现频繁项集
    2.1 关联规则和关联模式概述
        从不同数据源中发现频繁模式
        2.1.1 模式和模式发现
            2.1.1.1 频繁项集
                
                
            
        2.1.2 关系或规则发现
            基于已发现的频繁模式,可以挖掘关联规则
                2.1.2.1 关联规则
                2.1.2.2 相关规则
    2.2 购物篮分析
        2.2.1 购物篮模型
        2.2.2 Aprior算法
            2.2.2.1概念(self) 来源:https://blog.csdn.net/gjwang1983/article/details/45015203
                项集
                    {News}
                    {Sports}
                    {Finance}
                    {News,Finance}
                关联规则
                    {News,Finance} -> {Sports}
                    {News,Finance} 是这条规则的Left-hand-side ,LHS
                    {Sports}是这条规则的Right-hand-side ,RHS
                关联规则强度的度量:
                    支持度 Support
                        支持度就是该项集出现的次数除以总的记录数(交易数)
                        支持度的意义在于度量项集在整个事务集中出现的频次。                  
                    置信度 Confidence
                        置信度的意义在于项集{X,Y}同时出现的次数占项集{X}出现次数的比例。  
                    提升度 Lift
                        举个例子,假设右边已经接近百分百出现了(支持度很高),会导致这条规则的置信度很高,没什么意义。
                        说不定左边的出现会降低右边的出现(虽然置信度很高)
                        该值=1,说明两个条件没有任何关联,
                        如果<1,说明A条件(或者说A事件的发生)与B事件是相斥的,
                        一般在数据挖掘中当提升度大于3时,我们才承认挖掘出的关联规则是有价值的。
                    出错率 Conviction  
                        Conviction的意义在于度量规则预测错误的概率
            2.2.2.4 算法解释及应用(self)
                给定很多人的购物车,购物车里物品之间有关联关系(如两个物品一起出现,或者所有人都有同意物品)。
                制定这些关系出现的次数,找出满足这个次数的所有自己
                2.2.2.4.1 原始数据
                    #Session ID      List of media categories accessed
                    #   1           {News, Finance}
                    #   2           {News, Finance}
                    #   3           {Sports, Finance, News}
                    #   4           {Arts}
                    #   5           {Sports, News, Finance}
                    #   6           {News, Arts, Entertainment}
                2.2.2.4.2 转换成稀疏矩阵(对应2.2.2.1)
                    #Session ID  News    Finance Entertainment   Sports                    
                    #1	        1	    1	    0	            0
                    #2       	1	    1	    0	            0
                    #3       	1	    1	    0	            1
                    #4       	0	    0	    0	            0
                    #5	        1	    1	    0	            1
                    #6	        1	    0	    1	            0
                2.2.2.4.3 Apriori案例分析(R语言)数据输入
                    install.packages("arules")
                    install.packages("arulesViz")
                    install.packages("RColorBrewer")
                    library(arules)  # association rules
                    library(arulesViz)  # data visualization of association rules 可视化
                    library(RColorBrewer)  # color palettes for plots 可视化色彩
                    groceries <- read.transactions("I:/编程,建模,数据挖掘学习/R/4.书笔记/《R语言数据挖掘》data/groceries.csv", format="basket", sep=",")
                        #给原始数据,包里的read.transactions可将数据转化为稀疏矩阵
                        #参数解释
                        #format=c("basket", "single")用于注明源数据的格式。
                        #如果源数据每行内容就是一条交易购买的商品列表(类似于一行就是一个购物篮)那么使用basket;
                        #如果每行内容是交易号+单个商品,那么使用single。
                        #cols=c("transId", "ItemId") 
                        #对于single格式,需要指定cols,二元向量(数字或字符串)。
                        #如果是字符串,那么文件的第一行是表头(即列名)。
                        #第一个元素是交易号的字段名,第二个元素是商品编号的字段名。
                        #如果是数字,那么无需表头。对于basket,一般设置为NULL,缺省也是NULL,所以不用指定。
                        #rm.duplicates=FALSE:表示对于同一交易,是否需要删除重复的商品。
                        #https://blog.csdn.net/gjwang1983/article/details/45015203查看详细
                    summary(groceries)
                        #summary的含义:
                        #第一段:总共有9835条交易记录transaction,169个商品item。density=0.026表示在稀疏矩阵中1的百分比。
                        #第二段:最频繁出现的商品item,以及其出现的次数。可以计算出最大支持度。
                        #第三段:每笔交易包含的商品数目,以及其对应的5个分位数和均值的统计信息。如:2159条交易仅包含了1个商品,1643条交易购买了2件商品,一条交易购买了32件商品。那段统计信息的含义是:第一分位数是2,意味着25%的交易包含不超过2个item。中位数是3表面50%的交易购买的商品不超过3件。均值4.4表示所有的交易平均购买4.4件商品。
                        #第四段:如果数据集包含除了Transaction Id 和 Item之外的其他的列(如,发生交易的时间,用户ID等等),会显示在这里。这个例子,其实没有新的列,labels就是item的名字。
                    #数据集的其他信息进网页看,如支持度,项集数等等https://blog.csdn.net/gjwang1983/article/details/45015203
                2.2.2.4.4 进行规则挖掘
                    #第一步:设定最小支持度等参数(根据自己的需要定。)
                    #minlen,maxlen:LHS+RHS的并集的元素个数。为避免出现{} => {beer},我们可以设minlen=2.当然也可以保留。
                    #默认support=0.1, confidence=0.8, minlen=1, maxlen=10
                    groceryrules <- apriori(groceries, parameter = list(support =0.006, confidence = 0.25, minlen = 2))
                        #Apriori
                        #Parameter specification:
                        # confidence minval smax arem  aval originalSupport maxtime support minlen maxlen target   ext
                        #       0.25    0.1    1 none FALSE            TRUE       5   0.006      2     10  rules FALSE
                        #Algorithmic control:
                        # filter tree heap memopt load sort verbose
                        #    0.1 TRUE TRUE  FALSE TRUE    2    TRUE
                        #Absolute minimum support count: 59 
                        #set item appearances ...[0 item(s)] done [0.00s].
                        #set transactions ...[169 item(s), 9835 transaction(s)] done [0.00s].
                        #sorting and recoding items ... [109 item(s)] done [0.00s].
                        #creating transaction tree ... done [0.00s].
                        #checking subsets of size 1 2 3 4 done [0.00s].
                        #writing ... [463 rule(s)] done [0.00s].
                        #creating S4 object  ... done [0.00s].
                    #可以看到生成了463条规则
                    #可以通过添加appearance参数来设定左右需要包含哪些项目,具体看网页https://blog.csdn.net/gjwang1983/article/details/45015203
                    summary(groceryrules)   #看所有信息
                    inspect(groceryrules[1:5])  #使用inpect查看具体的规则。
                        #可以看网页,根据自己的需要设定评估规则,看内容
                            #Actionable
                            #    这些rule提供了非常清晰、有用的洞察,可以直接应用在业务上。
                            #Trivial
                            #    这些rule显而易见,很清晰但是没啥用。属于common sense,如 {尿布} => {婴儿食品}。
                            #Inexplicable
                            #    这些rule是不清晰的,难以解释,需要额外的研究来判定是否是有用的rule。
                    write(groceryrules, file="groceryrules.csv", sep=",", quote=TRUE, row.names=FALSE)  #写到文件中
                    groceryrules_df <- as(groceryrules, "data.frame")   #转化为frame,进行进一步分析
                2.2.2.4.5 进阶
                    商品信息为双层:1.商品类别2.商品名
                    具体看网页https://blog.csdn.net/gjwang1983/article/details/45015203
                2.2.2.4.6 关系可视化
                    plot(groceryrules,control=list(jitter=2, col = rev(brewer.pal(9, "Greens")[4:9])),shading = "lift")   
                    plot(groceryrules, method="grouped",control=list(col = rev(brewer.pal(9, "Greens")[4:9])))
                    plot(groceryrules, measure="confidence", method="graph", control=list(type="items"),shading = "lift")
                    second.rules <- apriori(groceries,parameter = list(support = 0.025, confidence = 0.05))
                    plot(second.rules,control=list(jitter=2, col = rev(brewer.pal(9, "Greens")[4:9])),shading = "lift")   
                    plot(second.rules, method="grouped",control=list(col = rev(brewer.pal(9, "Greens")[4:9])))

        2.2.3 Aprior算法的变体
            Eclat算法
            FP-growth算法
            GenMax算法
            Charm算法
    2.3 混合关联规则挖掘
        两个应用
            1.多层次多维度关联规则挖掘
            2.基于约束的关联规则挖掘
        2.3.1 多层次多维度关联规则挖掘
            商品信息是可以按类别聚类,然后按照分类层次排列的那种
        2.3.2 基于约束的频繁模式挖掘          
            常见的约束:
                知识类型约束(指定挖掘的内容)
                数据约束(初始数据集限制)
                维度层次约束
                兴趣度约束
                规则约束
    2.4 序列数据集挖掘
        A-Priori-life算法可以
        2.4.1 序列数据集
        2.4.2 GSP算法
            都类似apriori算法
第三章 分类
    3.1 分类
        分类两个步骤:
        训练(监督学习)
        分类验证
    3.2 通用决策树归纳法
        3.2.3 例(self)#https://blog.csdn.net/li603060971/article/details/57080802
            #第1步:工作目录和数据集的准备
            install.packages("rattle")
            install.packages("rpart") 
            install.packages("pROC")            
            library(rattle) #使用包里的weather数据
            library(rpart)   #决策树包 
            
            #第2步:做训练集和测试集
            set.seed(1)
            sub<-sample(1:nrow(weather),round(nrow(weather)*2/3))
            length(sub) #244
            data_train<-weather[sub,]#取2/3的数据做训练集
            data_test<-weather[-sub,]#取1/3的数据做测试集
            dim(data_train)#训练集行数和列数244 24
            dim(data_test) #测试集的行数和列数122 24
            table(data_train$RainTomorrow) #RainTomorrow为类别
            table(data_test$RainTomorrow)   #RainTomorrow为类别
            
            #第3步:用训练集建模,观察模型结果
            tree.both<-rpart(RainTomorrow~Location+MinTemp+MinTemp+Rainfall+Evaporation+Sunshine+WindGustDir+WindGustSpeed+WindDir9am+WindDir3pm+WindSpeed9am+WindSpeed3pm+Humidity9am+Humidity3pm+Pressure9am+Pressure3pm+Cloud9am+Cloud3pm+Temp9am+Temp3pm+RainToday,data=data_train,method='class',minsplit=1,minbucket=0.3,cp=0.00017)
            #参数看https://www.cnblogs.com/wkslearner/p/6287128.html,http://127.0.0.1:19205/library/rpart/html/rpart.control.html
            summary(tree.both)
            tree.both$variable.importance
            printcp(tree.both)
            plotcp(tree.both,lwd=2) 
            
            #第4步:画决策树
            #4.1画决策树第1种方法,画出来的树比较简单
            plot(tree.both)
            text(tree.both,use.n=T,all=T,cex=0.9)     
            #4.2画决策树第2种方法,画出来的树稍微好看些
            library(rpart.plot)
            rpart.plot(tree.both,branch=1,shadow.col="gray",box.col="green",border.col="blue",split.col="red",split.cex=1.2,main="决策树")
           
           #第5步:剪枝
            #我们使用具有最小交叉验证误差的cp来建立回归树
            cp=tree.both$cptable[which.min(tree.both$cptable[,"xerror"]),"CP"]
            cp #cp=0.00049

            #第6步:剪枝之后的树再次画图
            tree.both2<-prune(tree.both,cp=tree.both$cptable[which.min(tree.both$cptable[,"xerror"]),"CP"])
            summary(tree.both2)
            tree.both2$variable.importance
            printcp(tree.both2)
            plotcp(tree.both2,lwd=2) 

            library(rpart.plot)
            rpart.plot(tree.both2,branch=1,shadow.col="gray",box.col="green",border.col="blue",split.col="red",split.cex=1.2,main="决策树")

            #第7步:输出规则。剪枝后的决策树规则,从规则中再找规律
            library(rattle)
            asRules(tree.both2)

            #第8步:在测试集上做预测
            library(pROC)
            pred.tree.both<-predict(tree.both,newdata=data_test)

            #第9步:看模型的预测效果如何呀。正确的有多少,错误的有多少
            predictScore<-data.frame(pred.tree.both)
            View(cbind(predictScore,data_test$RainTomorrow))
            ######################中间的代码有问题 ######################
            rownames(predictScore) #看这个矩阵行的名字
            colnames(predictScore)#看这个矩阵列的名字
            predictScore$RainTomorrow<-'yes'  #在预测的矩阵后面多加一列
            predictScore[predictScore$NO.>predictScore$YES.,][,"RainTomorrow"]=FALSE #如果false的概率大于true的概率,那么判断为false
            predictScore[predictScore$NO.<=predictScore$YES.,][,"RainTomorrow"]=TRUE 
            n<-table(data_test$RainTomorrow,predictScore$RainTomorrow)
            n #看分布情况
            percantage<-c(n[1,1]/sum(n[1,]),n[2,2]/sum(n[2,]))
            percantage
            ######################中间的代码有问题 ######################
    3.3 ID3算法对高额信用卡用户分类                               
    3.4 使用C4.5...
    3.5 使用CART...
    3.6 木马程序流量识别方法和贝叶斯分类
    3.7 垃圾邮件识别和朴素贝叶斯分类                
        3.7.1 朴素贝叶斯分类(self)http://bbs.pinggu.org/thread-3489485-1-1.html
    3.8 基于规则的计算机游戏玩家类型分类和基于规则的分类
        RIPPER算法
第四章 高级分类算法
    4.1 集成方法
        三种流行的集成算法
        4.1.1 Bagging算法
        4.1.2 Boosting 和AdaBoost算法
        4.1.3 随机森林算法
    4.2 贝叶斯信念网络
    4.3 K临近算法
    4.4 支持向量机
    4.5 基于频繁模式的分类
    4.6 基于反向传播算法的分类
        BP 反向传播
第五章 聚类分析 https://www.cnblogs.com/guolixiucai/p/5226734.html
    5.1 K均值算法
    5.2 K中心点算法
        K均值的扩展,降低对异常数据点的敏感性
            5.2.1 PAM算法
                围绕中心点的划分算法,K中心点算法之一
    5.3 CLARA算法
        一种基于划分思想的K中心点算法
        K中心点算法的改进,可应用于大规模数据
    5.4 仿射传播聚类 AP聚类 https://baike.baidu.com/item/%E8%BF%91%E9%82%BB%E4%BC%A0%E6%92%AD%E7%AE%97%E6%B3%95/744393?fr=aladdin
        不需要明确K值
    5.6 层次聚类
        5.6.2 BIRCH算法
        
第六章 高级聚类分析
    6.1 DBSCAN算法
    6.2 OBTICS算法
    6.3 DENCLUE算法
    6.4 STING算法
    6.5 CLIQUE算法
    6.6 WAVE算法
    6.7 EM算法
    6.8 高维数据聚类
        6.8.1 MAFIA算法
            空间聚类
        6.8.2 SURFING算法
    6.9 SCAN算法
        用于网络的结构聚类算法
        用于图论问题。
第七章 异常值检测
    7.2 图像噪点消除
第八章 流数据,时间序列数据和序列数据挖掘
    8.1 STREAM算法
    8.2 时间序列分析
        ARIMA
    8.3 时间序列聚类,分类
第九章 图挖掘与网络分析
    9.2 频繁子图挖掘
        gPLS算法
        GrapgSig算法
        gSpan算法
    9.3 社交网络挖掘 
第十章 文本与网络数据挖掘


打赏

暂无评论

发布评论