R语言 条件推理树
条件推理树 是决策树的一个非参数类,也被称为无偏递归分区。它是一种在条件推理框架中对连续和多变量响应变量的递归划分方法。为了在R编程中执行这种方法,需要使用 ctree() 函数,并需要 Partykit 包。在这篇文章中,让我们了解一下条件推理树、语法和它在实例帮助下的实现。
条件推理树
条件推理树是一种不同的决策树,它根据相关性的值对因变量进行递归划分。它避免了偏见,就像机器学习中的其他分类和回归算法一样。因此,避免了对错误的脆弱性,使其对数据中的问题更加灵活。条件推理树使用一个显著性测试,这是一个选择协变量来分割和递归变量的包络测试。p值在这个测试中被计算。显著性测试在算法的每次启动时都会执行。这种算法对有缺失值的数据不利于学习。
算法
- 测试随机输入变量和响应变量之间的全局无效假设,并选择p值最高的输入变量与响应变量。
- 对选定的输入变量进行二元分割。
- 递归地执行第1步和2。
条件推理树与决策树有什么不同
条件推理树是一种基于树的分类算法。它与决策树类似,因为 ctree() 也像决策树一样对数据进行递归划分。使得条件推理树与决策树不同的唯一程序是,条件推理树使用显著性检验来选择输入变量,而不是选择使信息量最大化的变量。例如,在传统的决策树中,基尼系数被用来选择使信息度量最大化的变量。
在R中的实现
语法:
ctree(formula, data)
参数:
公式: 表示拟合模型所依据的公式
数据: 表示包含模型中变量的数据帧
例子 1 :
在这个例子中,让我们在R基础包中的空气质量数据集上使用条件推理树的回归方法。执行后,不同的臭氧水平将根据不同的环境条件被确定。这有助于学习臭氧值在不同环境条件下的不同行为。
第1步: 安装所需的软件包。
# Install the required
# Package for function
install.packages("partykit")
第2步: 加载所需的包。
# Load the library
library(partykit)
第3步: 创建条件推理树的回归模型。
air <- subset(airquality, !is.na(Ozone))
airConInfTree <- ctree(Ozone ~ .,
data = air)
第4步: 打印回归模型。
# Print model
print(airConInfTree)
输出
Model formula:
Ozone ~ Solar.R + Wind + Temp + Month + Day
Fitted party:
[1] root
| [2] Temp <= 82
| | [3] Wind 6.9
| | | [5] Temp 77: 31.143 (n = 21, err = 4620.6)
| [7] Temp > 82
| | [8] Wind 10.3: 48.714 (n = 7, err = 1183.4)
Number of inner nodes: 4
Number of terminal nodes: 5
第4步: 绘制图表。
# Output to be present as PNG file
png(file = "conditionalRegression.png")
# Plotting graph
plot(airConInfTree)
# Save the file
dev.off()
输出:

解释:
执行后,上述代码产生了一个条件推理树的图形,在不同的环境条件下,每个节点的臭氧值以方框图的形式显示。如上面的输出图中,节点5显示了最小的臭氧值。此外,学习行为显示Temp6.9显示了空气质量中最小的臭氧值。
例2:
在这个例子中,让我们对R基础包中的虹膜数据集使用条件推理树的分类方法。执行代码后,将根据花瓣的长度和宽度确定鸢尾花植物的不同种类。
第1步: 安装所需的软件包。
# Install the required
# Package for function
install.packages("partykit")
第2步: 加载所需的包。
# Load the library
library(partykit)
第3步: 创建条件推理树的分类模型
irisConInfTree <- ctree(Species ~ .,
data = iris)
第4步: 打印分类模型
# Print model
print(irisConInfTree)
输出
Model formula:
Species ~ Sepal.Length + Sepal.Width + Petal.Length + Petal.Width
Fitted party:
[1] root
| [2] Petal.Length 1.9
| | [4] Petal.Width <= 1.7
| | | [5] Petal.Length 4.8: versicolor (n = 8, err = 50.0%)
| | [7] Petal.Width > 1.7: virginica (n = 46, err = 2.2%)
Number of inner nodes: 3
Number of terminal nodes: 4
第4步: 绘制图表
# Output to be present as PNG file
png(file = "conditionalClassification.png",
width = 1200, height = 400)
# Plotting graph
plot(irisConInfTree)
# Save the file
dev.off()
输出:

解释:
执行上述代码后,鸢尾花植物的种类根据花瓣的长度和宽度进行了分类。如上图,setosa物种的花瓣长度<=1.9。
极客教程