常用的分类与预测算法

拟墨画扇 提交于 2019-12-07 21:51:39

根据挖掘目标和数据形式可以建立分类与预测、聚类分析、关联规则、时序模式、偏差检测。

算法名称 算法描述
回归分析 确定预测属性与其他变量间相互依赖的定量关系最常用的统计学方法
决策树 自顶向下的递归方式,在内部节点进行属性值的比较,并根据不同的属性值从该节点下分支,最终得到的叶节点是学习划分的类
人工神经网络 输入与输出之间关系的模型
贝叶斯网络 不确定知识表达和推理领域最有效的理论模型之一
支持向量机 把低维的非线性可分转化为高维的线性可分,在高维空间进行线性分析的算法

主要回归模型

回归模型名称 算法描述
线性回归 对一个或多个自变量和因变量之间的线性关系进行建模,可用最小二乘法求解模型系数
非线性回归 对一个或多个自变量和因变量之间的非线性关系进行建模。如果非线性关系可以通过简单的函数变换转化成线性关系,用线性回归的思想求解;不过不能转化,用非线性最小二乘法求解
Logistic回归 广义线性回归模型的特例,利用Logistic函数将因变量的取值范围控制在0和1之间,表示取值为1的概率
岭回归 一种改进最小二乘估计的方法
主成分回归 主成分回归是根据主成分分析的思路提出来的,是对最小二乘法的一种改进,它是参数估计的一种有偏估计。可以消除自变量之间的多重共线性
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)

决策树
树状结构,每一个叶节点对应一个分类,非叶节点对应着在某个属性上的划分,根据样本在该属性上的不同取值将其划分成若干子集。

# 计算一列数据的信息熵
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)

人工神经网络

算法名称 算法描述
BP神经网络 BP神经网络是一种按误差你传播算法训练的多层前馈网络,学习算法是δ学习规则,是目前应用最广泛的神经网络模型之一
LM神经网络 LM神经网络是基于梯度下降法和牛顿法结合的多层前馈网络,特点:迭代次数少,收敛速度快,精确度高
RBF径向基神经网络 RBF径向基神经网络能够以任意精度逼近任意连续函数,从输入层到隐含层的变换是非线性的,而从隐含层到输出层的变换是线性的,特别适合于解决分类问题
FNN模糊神经网络 FNN模糊神经网络是具有模糊权系数或者输入信号是模糊量的神经网络,是模糊系统与神经网络相结合的产物,它汇聚了神经网络与模糊系统的优点,集联想、识别、自适应及模糊信息处理于一体
GMDH神经网络 GMDH网络也称多项式网络,它是前馈神经网络中常用的一种用于预测的神经网络。特点是网络结构不固定,在训练过程中不断改变。
ANFIS自适应神经网络 神经网络镶嵌在一个全部模糊的结构之中,在不知不觉中向训练数据学习,自动产生、修正并高度概括出最佳的输入与输出变量的隶属函数及模糊规则;另外,神经网络的各层结构与参数都具有明确的、易于理解的物理意义。
# 数据命名
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)

分类与预测的评价
(1)绝对误差与相对误差
(2)平均绝对误差
(3)均方误差
(4)均方根误差
(5)平均绝对百分误差
(6)Kappa统计
(7)识别准确度
(8)识别精确率
(9)反馈率
(10)ROC曲线
(11)混淆矩阵
主要分类预测算法函数

函数名 函数功能
lda() 构建一个线性判别分析模型
NaiveBayes() 构建一个朴素贝叶斯分类器
knn() 构建一个K最近邻分类模型
rpart() 构建一个分类回归树模型
bagging() 构建一个集成学习分类器
randomForest() 构建一个随机森林模型
svm() 构建一个支持向量机模型
nnet() 构建一个人工识别神经网络模型
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!