看书标记【数据科学:R语言实战 2】
看书标记——R语言
【数据科学:R语言实战 2】
Chapter 2 序列的数据挖掘
2.1 模式
eclat:用于项集模式检测,常用购物车
arules:确定数据集中的项目共现
apriori:学习数据集中的关联规则
TraMineR:挖掘序列的R包
2.1.1 Eclat 频繁项集的挖掘
寻找行为相似的模式,通过数据中的交集来估算同时频繁出现事件候选项(购物车项目)的支持度,然后通过对频繁候选项进行测试来证实数据集中的模式。
用法
Eclat可以使用arules包中的eclat()函数
- 参数
data 待分析的数据矩阵
parameter ECParameter或列表对象。ECParameter(support:界定最小支持度0.1;minlen:包含最小容量1;maxlen:包含最大容量10;target:界定了待挖掘关联项集的类型.)
control ECControl或列表的对象。ECControl(sort:1、2升序、-1降序、0未分类、-2事务容量和的降序;verbose:显示进度信息)
用eclat找到成年人行为的相似点
library(“arules”)
data(“Adult”)
dim(Adult)
summary(Adult)
查找数据集中的频繁项目
data(“Adult”)
itemsets <- eclat(Adult)
itemsets.sorted <- sort(itemsets)
itemsets.sorted[1:5] #仅看前五个集合
未要求资本损失或资本利得、美国人、白种人
集中于最高频率的示例
将范围缩减至数据集中出现的最高频率,调节minlen参数
itemsets <- eclat(Adult, parameter=list(minlen=9))
inspect(itemsets)
2.1.2 arulesNBMiner
arulesNBMiner 用于寻找一个集合中两个及以上项目的共现。底层模型即负二项式模型,允许高度偏态次数分配,我们会观察到,项目集频率正出现在数据子集合中。
用法
NBMiner()
- 参数
data 数据矩阵
parameter 参数列表
control 控制列表(自动转换为NBMinerControl的对象)
NBMinerParameters是用于调用NBMiner的参数块。
Agrawal数据是为集中事务通过特别合成而生成的。
data(Agrawal)
summary(Agrawal.db)
summary(Agrawal.pat)
“size”表现的是各个子集在少数例子中具有偏态的子集
为频繁集挖掘Agrawal数据
mynbparameters <- NBMinerParameters(Agrawal.db)
mynbminer <- NBMiner(Agrawal.db, parameter = mynbparameters)
summary(mynbminer)
项目近乎均匀分布、项集长度1、2有较大偏斜
2.1.3 Apriori
Apriori算法尝试找到数据集中常见的子集合,必须满足最小阈值以便核实关联,支持度默认为10,置信度默认值为80。
用法
apriori()
- 参数
data 数据集
parameter 控制处理方式的参数列表,支持度默认值0.1,置信度默认值0.8,maxlen默认值10.
appearance 控制了所用的数据值
control 控制了算法,特别是分类的效能
评估购物篮中的关联
install.packages("arules")
library(arules)
tr <- read.transactions("http://fimi.ua.ac.be/data/retail.dat", format="basket") #比利时杂货店数据
summary(tr) ##结果表明成对项目很受欢迎,项目39有50675个
itemFrequencyPlot(tr, support=0.1) #最频繁项目
rules <- apriori(tr, parameter=list(supp=0.5,conf=0.5)) #构建关联规则
summary(rules) #规则摘要
inspect(rules) ##具体规则 项目39加入购物篮率高
## interestMeasure(rules, c("support", "chiSquare", "confidence", "conviction", "cosine", "leverage", "lift", "oddsRatio"), tr)
2.1.4 用TraMineR确定序列
发现序列并可视化,可以将序列分布、序列频率及数据湍流等绘图。
内置数据集:actcal(2000年以来每月活动单个的状态符号)、biofam(15-30岁期间单个的家庭生活状态)、mvad(每月活动单个的状态数据)
用法
seqdef()
- 参数
data 矩阵
var 纵列列表,包含序列NULL
informat 原始数据的格式(STS\SPS\SPELL)
stsep 分隔符
alphabet 所以可能状态的列表
states 包含了短时状态的标记
确定训练和职业中的序列
install.packages("TraMineR")
library ("TraMineR")
data(mvad) ##mvad数据追踪了712个个体,自训练至工作的过程
summary(mvad)
myseq <- seqdef(mvad, 17:86) ##截取序列数据,参照相关状态来获取所需的序列数据
seqiplot(myseq) ##指数图表:参照个人不同状态间界定的转换期
seqfplot(myseq) ## 频率图表:同一序列的人群集,经过一段时间训练后会有工作
seqdplot(myseq) ##分布图表:在上学或训练后开始工作
seqHtplot(myseq) ##序列的熵
##数据湍流:从数据中可见的某个特定事例可以推导出多少不同的后续序列。
##seqST函数将数据湍流可视化
myturbulence <- seqSt(myseq)
hist(myturbulence)
2.1.5 序列相似点
TraMineR中的seqdist函数可以度量序列异同。
LCP(最长公共前缀)的比较、LCS(最长公共序列,两个序列的相同部分)、OM(最佳匹配距离,最佳编辑距离)
用法
LCP计算函数seqdist()
- 参数
seqdata 状态序列(用seqdef界定)
method 包含了待用的LCP方法
refseq 可选参考序列
norm 距离标准化
indel 仅用于OM
sm 替代矩阵(忽略LCP)
with.missing TRUE 出现缺失间隙
full.matrix TRUE 返回全矩阵
示例
data(famform)
seq <- seqdef(famform) ##界定可用的序列对象
seq
seqLLCP(seq[3,],seq[4,]) #使用序列3、4的LCP,得到四个前置匹配即“S-U-M-MC”
seqLLCS(seq[1,],seq[2,]) #计算1、2的LCS度量
cost <- seqsubm(seq, method="CONSTANT", cval=2) ##确定OMD=2
cost
这一章节有很多都没有看明白。尴尬……