[英]R Problems with classification tree
我对机器学习比较陌生,但我想创建一个基于世界银行数据集的分类树。 分类树必须满足 3 个特征: continent=Europe
, currency=euro
, income group = high income
此图形应如下所示:
我已经尝试过了,但它没有给我我想要的 output:
library(tidyverse)
library(rpart)
WDICountry <- read.csv("https://gigamove.rz.rwth-aachen.de/d/id/pUKMStHbu9orYo/dd/100")
tree1 <- WDICountry %>%
mutate(europe = ifelse(`2-alpha code` %in% european_countries, TRUE, FALSE),
euro = ifelse(`Currency Unit` == "Euro", TRUE, FALSE),
income = as.factor(ifelse(`Income Group` == " High income", "High income", "non-high")))%>%
mutate(`Income Group` = as.factor(`Income Group`))%>%
select(`Income Group`, europe, euro)%>%
filter(complete.cases(.))%>%
rpart(data = .,formula = `Income Group` ~ europe+ euro)
plot(tree1)
text(tree1)
有人能帮我吗?
You can download this dataframe as a csv file here: https://gigamove.rz.rwth-aachen.de/d/id/pUKMStHbu9orYo?10&id=pUKMStHbu9orYo
决策树是一个 model 来分类,所以如果没有足够的证据支持分类中变量的分裂,则不进行分裂。 因此,当您使用 plot 时,并非使用所有变量或可能的拆分。
下面我将调整一些参数以使所有拆分发生,但请注意这很可能不是构建决策树 model 的方法。
首先,获取数据。 请注意,您不需要 ifelse 来设置 boolean,我对变量名有很多问题,所以下面是使用 csv 文件更正后的列名:
library(rpart)
library(rpart.plot)
library(dplyr)
WDICountry = read.csv("WDICountry.csv",stringsAsFactors=FALSE)
european_countries = WDICountry[grep("Europe",WDICountry$Region),"X2.alpha.code"]
dat = WDICountry%>%
mutate( europe = X2.alpha.code %in% european_countries,
euro= Currency.Unit =="Euro",
income=as.factor(ifelse(Income.Group =="High income","High income","non-high")))%>%
select(income,europe,euro)%>%
filter(complete.cases(.))
在安装 model 之前,请查看最小拆分:
table(dat$europe,dat$euro)
FALSE TRUE
FALSE 203 2
TRUE 35 23
因此,您需要将最小拆分设置为最低以确保其拆分,并且我们还设置了复杂度参数,以便拆分进行:
mdl = rpart(income ~ europe+euro,data = dat,minsplit=2,method="class",cp=-1)
rpart.plot(mdl)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.