R 编程中的条件推理树
条件推理树是决策树的非参数类,也称为无偏递归分区。它是条件推理框架中连续和多变量响应变量的递归分区方法。为了在 R 编程中执行这种方法,使用ctree()
函数并且需要partykit
包。在本文中,让我们借助示例了解条件推理树、语法及其实现。
条件推理树
条件推理树是一种不同类型的决策树,它使用基于相关值的因变量的递归分区。就像机器学习中的其他分类和回归算法一样,它避免了偏差。因此,避免易受错误影响,使其更灵活地处理数据中的问题。条件推理树使用显着性检验,它是一种置换检验,它选择协变量来拆分和递归变量。在此测试中计算 p 值。在算法的每次开始时执行显着性检验。该算法不适用于具有缺失值的数据进行学习。
算法:
- 测试随机输入和响应变量之间的全局零假设,并选择具有最高 p 值的输入变量和响应变量。
- 对选定的输入变量执行二进制拆分。
- 递归执行步骤 1 和 2。
条件推理树与决策树有何不同?
条件推理树是一种基于树的分类算法。它类似于决策树,因为ctree()
也像决策树一样执行数据的递归分区。使条件推理树与决策树不同的唯一过程是条件推理树使用显着性检验来选择输入变量,而不是选择使信息度量最大化的变量。例如,传统决策树中使用基尼系数来选择最大化信息度量的变量。
R中的实现
Syntax:
ctree(formula, data)
Parameters:
formula: represents formula on the basis of which model is to be fit
data: represents dataframe containing the variables in the model
示例 1:
在此示例中,让我们在 R 基础包中存在的空气质量数据集上使用条件推理树的回归方法。执行后,将根据不同的环境条件确定不同的臭氧水平。这有助于了解臭氧值在不同环境条件下的不同行为。
第 1 步:安装所需的软件包。
# Install the required
# Package for function
install.packages("partykit")
第 2 步:加载所需的包。
# Load the library
library(partykit)
第三步:创建条件推理树的回归模型。
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 基础包中的 iris 数据集上使用条件推理树的分类方法。执行代码后,会根据花瓣的长宽来判断不同种类的鸢尾植物。
第 1 步:安装所需的软件包。
# Install the required
# Package for function
install.packages("partykit")
第 2 步:加载所需的包。
# Load the library
library(partykit)
第三步:创建条件推理树的分类模型
irisConInfTree <- ctree(Species ~ .,
data = iris)
第四步:打印分类模型
# 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。