看书标记【R语言数据分析与挖掘实战】5

2023-11-16

第五章 挖掘模型

5.1 分类预测

回归分析:回归分析是确定预测属性(数值型)与其他变量间相互依赖的定量。关系的最常用的统计学方法。包括线性回归、非线性回归、Logistic回归(因变量有0-1两种取值)、岭回归(自变量间有多重共线性)、主成分回归(自变量间有多重共线性)、偏最小二乘回归等模型。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter5/示例程序")
# 读入数据
Data <- read.csv("./data/bankloan.csv")[2:701, ]
# 数据命名
colnames(Data) <- c("x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "y")
# logistic回归模型
glm <- glm(y ~ x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8,
           family = binomial(link = logit), data = Data)
summary(glm)
# 逐步寻优法
logit.step <- step(glm, direction = "both")
summary(logit.step)
# 前向选择法
logit.step <- step(glm, direction = "forward")
summary(logit.step)
# 后向选择法
logit.step <- step(glm, direction = "backward")
summary(logit.step)

决策树:它采用自顶向下的递归方式,在决策树的内部结点进行属性值的比较,并根据不同的属性值从该结点向下分支,叶结点是要学习划分的类。
在各个决策点上使用信息熵作为属性额选择标准,C4.5CART算法ID3算法的改进,后两种可以还可以描述连续属性。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter5/示例程序")
# 读入数据
data <- read.csv("./data/sales_data.csv")[, 2:5]
# 数据命名
colnames(data) <- c("x1", "x2", "x3", "result")
# 计算一列数据的信息熵
calculateEntropy <- function(data) {
  t <- table(data)    
  sum <- sum(t)       
  t <- t[t != 0]        
  entropy <- -sum(log2(t / sum) * (t / sum))
  return(entropy)
}
# 计算两列数据的信息熵
calculateEntropy2 <- function(data) {
  var <- table(data[1])
  p <- var/sum(var)
  varnames <- names(var)
  array <- c()
  for (name in varnames) {
    array <- append(array, calculateEntropy(subset(data, data[1] == name,
                                                   select = 2)))
  }
  return(sum(array * p))
}

buildTree <- function(data) {
  if (length(unique(data$result)) == 1) {
    cat(data$result[1])
    return()
  }
  if (length(names(data)) == 1) {
    cat("...")
    return()
  }
  entropy <- calculateEntropy(data$result)  
  labels <- names(data)
  label <- ""
  temp <- Inf
  subentropy <- c()
  for (i in 1:(length(data) - 1)) {
    temp2 <- calculateEntropy2(data[c(i, length(labels))])
    if (temp2 < temp) {         
      temp <- temp2          
      label <- labels[i]      
    }
    subentropy <- append(subentropy,temp2)  
  }
  cat(label)
  cat("[")
  nextLabels <- labels[labels != label]
  for (value in unlist(unique(data[label]))) {
    cat(value,":")
    buildTree(subset(data,data[label] == value, select = nextLabels))
    cat(";")
  }
  cat("]")
}
# 构建分类树
buildTree(data)

人工神经网络ANN:一种模仿大脑神经网络结构和功能而建立的信息处理系统,表示神经网络的输入与输出变量之间关系的模型。
BP神经网络、LM神经网络(基于梯度下降法和牛顿法,收敛快)、RBF径向基神经网络(以任意精度逼近任意连续函数,适合分类问题)、FNN神经网络(汇聚了神经网络和模糊系统的优点)、GMDH神经网络(用于预测,其网路结构不固定,在训练过程中不断改变)、ANFIS自适应神经网络(同FNN)。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter5/示例程序")
# 读入数据
Data <- read.csv("./data/sales_data.csv")[, 2:5]
# 数据命名
library(nnet)
colnames(Data) <- c("x1", "x2", "x3", "y")
# 最终模型
model1 <- nnet(y ~ ., data = Data, size = 6, decay = 5e-4, maxit = 1000)  

pred <- predict(model1, Data[, 1:3], type = "class")	
(P <- sum(as.numeric(pred == Data$y)) / nrow(Data))
table(Data$y, pred)
prop.table(table(Data$y, pred), 1)

分类与预测算法评价:绝对误差与相对误差、平均绝对误差(避免正负相抵消)、均方误差(还原失真程度,加强了数值大的误差在指标中的作用,从而提高指标灵敏性)、均方根误差(代表了预测值的离散程度)、平均绝对百分误差MAPE、Kappa统计(比较多个观测者对同一事物的观测是否一致)、识别准确度Accuracy、识别精确度、反馈率、ROC曲线(反映分类器效率)、混淆矩阵(描绘样本数据的真实属性与识别结果类型之间的关系)
贝叶斯网络:贝叶斯网络又称信度网络,是Bayes方法的扩展,是目前不确定知识表达和推理领域最有效的理论模型之一。
支持向量机:SVM支持向量机根据有限的样本信息在模型的复杂性和学习能力之间寻求最佳折衷,以获得最好的推广能力。
在这里插入图片描述
knn对有交叉重叠的待分类样本有较好的判别效果。

5.2 聚类分析

根据数据距离或相似度进行分组的非监督学习算法,划分分组的原则是组内距离最小化而组间距离最大化。
在这里插入图片描述
K-means聚类算法过程:
1)从N个样本数据中随机选取K个对象作为初始的聚类中心;
2)分别计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中;
3)所有对象分配完成后,重新计算K个聚类的中心;
4)与前一次计算得到的K个聚类中心比较,如果聚类中心发生变化,转2),否则转5);
5)当质心不发生变化时停止并输出聚类结果。
常规的连续型数据需要对各属性进行零-均值规范化,再度量样本间的距离和样本与簇的距离(用误差平方和SSE作为度量聚类质量的目标函数 S S E = ∑ i = 1 K ∑ x ∈ E i d i s t ( e i , x ) 2 SSE=\sum_{i=1}^{K}\sum_{x\in E_i}dist(e_i,x)^2 SSE=i=1KxEidist(ei,x)2)。文档数据时,需要先将文档整理成“文档——词矩阵”,再计算相似度(用余弦相似度度量 S S E = ∑ i = 1 K ∑ x ∈ E i c o s ( e i , x ) 2 SSE=\sum_{i=1}^{K}\sum_{x\in E_i}cos(e_i,x)^2 SSE=i=1KxEicos(ei,x)2)。

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter5/示例程序")
# 读入数据
Data <- read.csv("./data/consumption_data.csv", header = TRUE)[, 2:4]
km <- kmeans(Data, center = 3)
print(km)
km$size / sum(km$size)
# 数据分组
aaa <- data.frame(Data, km$cluster)
Data1 <- Data[which(aaa$km.cluster == 1), ]
Data2 <- Data[which(aaa$km.cluster == 2), ]
Data3 <- Data[which(aaa$km.cluster == 3), ]
# 客户分群“1”的概率密度函数图
par(mfrow = c(1,3))
plot(density(Data1[, 1]), col = "red", main = "R")
plot(density(Data1[, 2]), col = "red", main = "F")
plot(density(Data1[, 3]), col = "red", main = "M")
# 客户分群“2”的概率密度函数图
par(mfrow = c(1, 3))
plot(density(Data2[, 1]), col="red", main = "R")
plot(density(Data2[, 2]), col="red", main = "F")
plot(density(Data2[, 3]), col="red", main = "M")
# 客户分群“3”的概率密度函数图
par(mfrow = c(1, 3))
plot(density(Data3[, 1]), col="red", main = "R")
plot(density(Data3[, 2]), col="red", main = "F")
plot(density(Data3[, 3]), col="red", main = "M")

聚类分析算法的评价有:purity评价方法(正确的占总数的比例)、RI评价法(用排列组合原理对聚类进行评价的手段,准确率和召回率同样重要)、F值评价法(RI的衍生,对准确率或召回率有一点的偏倚)。
常用的聚类分析算法函数
(1)kmeans(data,centers,iter.max,nstart,algorithm)
data为数据集,centers为预设类别k,iter.max迭代最大值默认为10,nstart为随机起始中心点的次数,algorithm为算法,有Hartigan-Wong、Lloyd、For-gy、MacQueen.

set.seed(2)
x <- matrix(rnorm(50 * 2), ncol = 2)
x[1:25, 1] <- x[1:25, 1] + 3
x[1:25, 2] <- x[1:25, 2] - 4
km.out <- kmeans(x, 2, nstart = 20)
km.out$cluster
plot(x, col = (km.out$cluster + 1), main = "K-Means Clustering Results with K=2", xlab = "", ylab = "", pch = 20, cex = 2)
km.out$centers
points(km.out$centers[1, 1], km.out$centers[1, 2], pch = 10, col = "red", cex = 2)
points(km.out$centers[2, 1], km.out$centers[2, 2], pch = 10, col = "blue", cex = 2)

(2)pam(data,k,metric,…,medoids)
metric用于选择样本点间距离测算的方式,medoids默认取NULL,由软件选择中心点,也可以设定一个k维向量来指定初始点。
(3)dbscan(data,eps,MinPts,scale,method,…)
eps为考察每一样本点是否满足密度要求时,所划定考察领域的半径;MinPts为密度阈值;scale用于选择是否在聚类前先对数据进行标准化,method参数用于选择认定的data类型。
(4)Mclust(data,G,modeNames,…)
G为预设类别数,由BIC值选择最优值;modeNames设定模型类别,由函数自动选取最优值。

5.3 关联规则

关联规则也成为购物篮分析,用于发现两种行为的关联性。
在这里插入图片描述
Apriori算法是经典的挖掘频繁项集的算法,通过连接产生候选项与其支持度然后通过剪枝生成频繁项集。支持度 S u p p o r t ( A ⇒ B ) = P ( A ∪ B ) Support(A\Rightarrow B)=P(A \cup B) Support(AB)=P(AB),置信度 C o n f i d e n c e ( A ⇒ B ) = P ( A ∣ B ) Confidence(A\Rightarrow B)=P(A | B) Confidence(AB)=P(AB),满足规定阈值的规则称为强规则

# 设置工作空间
install.packages("arules")
library ( arules )
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter5/示例程序")
# 读入数据
tr <- read.transactions("./data/menu_orders.txt", format = "basket", sep=",")                              
summary(tr)                                  
inspect(tr)  
# 支持度0.2,置信度0.5
rules0 <- apriori(tr, parameter = list(support = 0.2, confidence = 0.5))
rules0
inspect(rules0)

连接-剪枝的方式依据最小支持度阈值(最低重要性)找到所有的频繁项集,然后再用最小置信度阈值(最低可靠性)挖掘得到强关联规则。

5.4 时序模式

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
定义序列X的自协方差函数 γ ( t , t ) = E [ ( X t − μ t ) ( X s − μ s ) ] , γ ( t , t ) = γ ( 0 ) = 1 , ρ 0 = 1 \gamma(t,t)=E[(X_t-\mu_t)(X_s-\mu_s)],\gamma(t,t)=\gamma(0)=1,\rho_0=1 γ(t,t)=E[(Xtμt)(Xsμs)],γ(t,t)=γ(0)=1,ρ0=1和自相关系数 ρ ( t , s ) = c o v ( X t , X s ) σ t σ s \rho(t,s)=\frac{cov(X_t,X_s)}{\sigma_t\sigma_s} ρ(t,s)=σtσscov(Xt,Xs),两者衡量的是同一事件在两个不同时期t、s之间的相关程度,过去对未来的影响。
平稳序列:序列在某一常数附件波动且波动范围有限,即存在常数均值和方差,并且延迟k期的序列变量的自协方差和自相关系数是相等的,则称序列为平稳序列。看自相关图或单位根检验(存在单位根就是非平稳序列)都可以。
纯随机性检验:也称白噪声检验,若序列是纯随机的,则 γ ( k ) = 0 , k ≠ 0 \gamma(k)=0,k\ne0 γ(k)=0,k=0,常用的检验统计量为Q统计量、LB统计量,由样本延迟阶数可以算得检验统计量,从而得到p值。
自回归移动平均模型(ARMA)是最常用的拟合平稳序列模型,都可以看做是多元线性回归模型。
平稳时间序列建模步骤
对于平稳序列分析
自相关系数ACF是用于观察序列X过去对未来的影响,包含了多期X的影响;偏自相关系数PACF仅用于观察X过去某一期t-s对t期的影响,不包含多期X的影响。
AR(p): x t = ϕ 0 + ϕ 1 x t − 1 + ϕ 2 x t − 2 + . . . + ϕ p x t − p + ε t x_t=\phi_0+\phi_1x_{t-1}+\phi_2x_{t-2}+...+\phi_px_{t-p}+\varepsilon_t xt=ϕ0+ϕ1xt1+ϕ2xt2+...+ϕpxtp+εt,ACF 拖尾,PACF p阶截尾, E ( x t ) = μ = ϕ 0 1 − ϕ 1 − ϕ 2 − . . . − ϕ p E(x_t)=\mu=\frac{\phi_0}{1-\phi_1-\phi_2-...-\phi_p} E(xt)=μ=1ϕ1ϕ2...ϕpϕ0
MA(p): x t = μ + ε t − θ 1 ε t − 1 + θ 2 ε t − 2 + . . . + θ q ε t − q x_t=\mu+\varepsilon_t-\theta_1\varepsilon_{t-1}+\theta_2\varepsilon_{t-2}+...+\theta_q \varepsilon_{t-q} xt=μ+εtθ1εt1+θ2εt2+...+θqεtq,ACF q阶截尾,PACF拖尾。
ARMA(p,q): x t = ϕ 0 + ϕ 1 x t − 1 + ϕ 2 x t − 2 + . . . + ϕ p x t − p + ε t − θ 1 ε t − 1 + θ 2 ε t − 2 + . . . + θ q ε t − q x_t=\phi_0+\phi_1x_{t-1}+\phi_2x_{t-2}+...+\phi_px_{t-p}+\varepsilon_t-\theta_1\varepsilon_{t-1}+\theta_2\varepsilon_{t-2}+...+\theta_q \varepsilon_{t-q} xt=ϕ0+ϕ1xt1+ϕ2xt2+...+ϕpxtp+εtθ1εt1+θ2εt2+...+θqεtq.ACF拖尾,PACF拖尾。
p、q的识别有助于模型定阶,然后参数检验、模型检验、模型优化、模型应用预测等。
对于非平稳序列分析
差分运算:p阶差分(相距一期的两个序列值之间的减法运算称为1阶差分运算);k步差分(相距k期的两个序列值之间的减法运算称为k步差分运算)。
差分平稳时间序列建模步骤

setwd("F:/数据及程序/chapter5/示例程序")
library(forecast)
library(fUnitRoots)
Data <- read.csv("./data/arima_data.csv", header = TRUE)[, 2]
sales <- ts(Data)
plot.ts(sales, xlab = "时间", ylab = "销量 / 元")
# 单位根检验
unitrootTest(sales)
# 自相关图
acf(sales)
# 一阶差分
difsales <- diff(sales)
plot.ts(difsales, xlab = "时间", ylab = "销量残差 / 元")
# 自相关图
acf(difsales)
# 单位根检验
unitrootTest(difsales)
# 白噪声检验
Box.test(difsales, type="Ljung-Box") 
# 偏自相关图
pacf(difsales)
# ARIMA(1,1,0)模型
arima <- arima(sales, order = c(1, 1, 0))
arima
forecast <- forecast.Arima(arima, h = 5, level = c(99.5))
forecast

在这里插入图片描述

5.5 离群点检测

# 设置工作空间
# 把“数据及程序”文件夹拷贝到F盘下,再用setwd设置工作空间
setwd("F:/数据及程序/chapter5/示例程序")
# 读入数据
Data <- read.csv("./data/consumption_data.csv", header = TRUE)[, 2:4]
Data <- scale(Data)
set.seed(12)
km <- kmeans(Data, center = 3)
print(km)
km$centers
# 各样本欧氏距离
x1 <- matrix(km$centers[1, ], nrow = 940, ncol =3 , byrow = T)
juli1 <- sqrt(rowSums((Data - x1) ^ 2))
x2 <- matrix(km$centers[2, ], nrow = 940, ncol =3 , byrow = T)
juli2 <- sqrt(rowSums((Data - x2) ^ 2))
x3 <- matrix(km$centers[3, ], nrow = 940, ncol =3 , byrow = T)
juli3 <- sqrt(rowSums((Data - x3) ^ 2))
dist <- data.frame(juli1, juli2, juli3)
# 欧氏距离最小值
y <- apply(dist, 1, min)
plot(1:940, y, xlim = c(0, 940), xlab = "样本点", ylab = "欧氏距离")
points(which(y > 2.5), y[which(y > 2.5)], pch = 19, col = "red")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

看书标记【R语言数据分析与挖掘实战】5 的相关文章

  • Nginx配置文件详细说明

    原创 http www cnblogs com xiaogangqq123 archive 2011 03 02 1969006 html 在此记录下Nginx服务器nginx conf的配置文件说明 部分注释收集与网络 运行用户 user

随机推荐

  • 微信小程序:自定义导航栏

    看到有的微信小程序的页面左上角有了个 小房子 可以返回首页 这是怎么做到的 其实这是微信开放的自定义的自定义导航栏来完成 但是最开始 对于一个页面很多的小程序 其实有点一言难尽 因为你自定义 你可能要所有页面都要添加一遍 现在小程序可以自定
  • 34. Search for a Range

    这道题一开始没看别人的算法 第一个想法是用递归做 自己憋了两个小时终于憋出来了 然而超时 递归的想法是先用二分法找到一个target 然后从target左右再用二分法找边界 然而 真的是 太慢了 class Solution public
  • VSCode问题记录

    20230304 0 引言 这几年的编程方式还真是各种变化 从一开始直接VIM 到后面使用jupyter进行机器学习相关 然后再过渡到vim的形式并加以tmux批量化 最后去年使用了vscode作为IDE 随着工具的变化 那么很多习惯也都随
  • UnityVR--EventManager--事件中心2

    目录 前言 事件中心的结构 EventManager事件管理器 EventType事件类型 EventListener监听及回调 EventDataBase回调时需要传递的参数 总结 前言 上一篇 事件中心1 中 简单解释了委托 事件 监听
  • 【Java SE】类和对象(全网最细详解)

    点进来你就是我的人了博主主页 戳一戳 欢迎大佬指点 欢迎志同道合的朋友一起加油喔 目录 前言 一 面向对象的初步认知 1 什么是面向对象 2 面向对象和面向过程的区别 二 类和对象的基本概念 三 类和对象的定义和使用 1 类的创建 2 对象
  • 数据库的url配置8.0

    spring datasource username root spring datasource password lhh12345 spring datasource url jdbc mysql localhost 3306 myba
  • numpy.diag()结构及用法

    numpy diag v k 0 官方文档 以一维数组的形式返回方阵的对角线 或非对角线 元素 或将一维数组转换成方阵 非对角线元素为0 两种功能角色转变取决于输入的v 1 更深层的见numpy diagnal 参数详解 v array l
  • windows获取系统DPI

    dc GetDeviceCaps LOGPIXELSX 每英寸水平逻辑像素数 dc GetDeviceCaps LOGPIXELSY 每英寸垂直逻辑像素数 dc GetDeviceCaps HORZRES 水平像素总数 dc GetDevi
  • [Java]获取java方法注释实例

    Method methods company class getMethod getId null PK pk methods getAnnotation PK class System out println pk
  • vue指令中v-show和v-if以及keep-alive的区别

    v if 属于条件显示 满足条件就显示元素 不满足就删除元素 通过操作DOM元素完成 v if的首次渲染显示的开销较小 因为它只渲染满足条件的那一个元素 切换组件时 其开销较大 因为它每切换以此就要重新触发生命周期渲染显示新元素 v if值
  • JS实现轮播图(自动+手动)

    网页轮播图效果 核心原理 tips 代码在文章末尾 这个ul就是我们这四张图片的父盒子 我们通过对这个父盒子添加动画函数来实现移动 然后给父盒子来一个溢出隐藏就达到了轮播的效果 动画函数如下 function animate obj tar
  • 【python爬虫】8.温故而知新

    文章目录 前言 回顾前路 代码实现 体验代码 功能拆解 获取数据 解析提取数据 存储数据 程序实现与总结 前言 Hello又见面了 上一关我们学习了爬虫数据的存储 并成功将QQ音乐周杰伦歌曲信息的数据存储进了csv文件和excel文件 学到
  • 8.typescript-函数的类型

    今儿个甚是乏累呢 但是 lt 下面可能是正题儿 gt 1 函数声明 1 function student x string y number string 2 return 我是 x 今年 y 岁 3 4 5 console log stu
  • 商品期货怎么玩? 1手交易需要多少钱?

    期货市场中有许多大宗商品 把他们统称为商品期货 近几年我国商品期货品种不时在增加 固然期货风险比较高 但收益也十分可观 而且商品期货开户几乎没有门槛 国内商品期货免费开户 无资金限制 凭身份证和银行卡即可办理 开设期货帐户 能在网上开期货帐
  • Unity XCode iOS 实现拍照和相册选择上传头像

    显示弹窗 通过UIAlertController来创建一个弹窗 if defined cplusplus extern C endif 导出接口供unity使用 void IOS Open IOSCameraController app I
  • 剑指 Offer 25. 合并两个排序的链表(java+python)

    输入两个递增排序的链表 合并这两个链表并使新链表中的节点仍然是递增排序的 示例1 输入 1 gt 2 gt 4 1 gt 3 gt 4 输出 1 gt 1 gt 2 gt 3 gt 4 gt 4 限制 0 lt 链表长度 lt 1000 思
  • sql语句学习(b站韩顺平的demo)

    表的CRUD varchar varchar2 char的区别 时间 时间戳使用 创建表 创建一张表 表结构与已经存在的表一致 查看表的信息 表中增加一列 修改表中的列 删除表中的列 修改表名 修改表的字符集 修改表中的列名 表中数据的插入
  • 关于算法,我们都应知道的

    定义 算法是指对特定问题求解步骤的一种描述 特性 1 有穷性 算法是由若干条指令组成的有穷序列 总是在执行若干次后结束 不可能永不停止 2 确定性 每条语句有确定的含义 无歧义 3 可行性 算法在当前环境条件下可以通过有限次运算实现 4 输
  • JavaEE学习记录day09集合03 Map集合、Stream流

    JavaEE学习记录day09集合03 Map集合 Stream流 1 Map集合 1 1Map集合概述和特点 理解 Map集合概述 interface Map
  • 看书标记【R语言数据分析与挖掘实战】5

    第五章 挖掘模型 5 1 分类预测 回归分析 回归分析是确定预测属性 数值型 与其他变量间相互依赖的定量 关系的最常用的统计学方法 包括线性回归 非线性回归 Logistic回归 因变量有0 1两种取值 岭回归 自变量间有多重共线性 主成分