rpart不在R中创建决策树,SVM可以工作

时间:2017-04-12 10:47:32

标签: r machine-learning classification svm decision-tree

我正在尝试创建一个用于分类的决策树,但它不会被创建。使用SVM(train ==测试数据),相同的数据以0.85的精度执行,“play”是目标......

知道我做错了什么吗?这是数据和代码: https://gist.github.com/romeokienzler/c471819cbf156a69f73daf49f8c700c6

  

观,温度,湿度,刮风,播放

     

阳光,热,高,假的,无

     

阳光,热,高,真实的,无

     

阴,热,高,假,是

     

多雨,温和,高,假,是

     

多雨,凉爽,正常的,假,是

     

多雨,凉爽,正常的,真实的,无

     

阴,凉爽,正常的,真实的,是

     

晴天,温和,高,假的,无

     

晴朗,凉爽,正常的,假,是

     

多雨,轻度,正常的,假,是

     

晴天,轻度,正常的,真实的,是

     

阴,温和,高,真实的,是

     

阴,热,正常的,假,是

     

多雨,温和,高,真实,无

为了使用SVM我编码了数据: https://gist.github.com/romeokienzler/9bfce4182eda3d7662315621462c9cc6

  

观,温度,湿度,刮风,播放

     

1,1,2,FALSE,FALSE

     

1,1,2,TRUE,FALSE

     

2,1,2,FALSE,TRUE

     

3,2,2,FALSE,TRUE

     

3,3,1,FALSE,TRUE

     

3,3,1,TRUE,FALSE

     

2,3,1,TRUE,TRUE

     

1,2,2,FALSE,FALSE

     

1,3,1,FALSE,TRUE

     

3,2,1,FALSE,TRUE

     

1,2,1,TRUE,TRUE

     

2,2,2,TRUE,TRUE

     

2,1,1,FALSE,TRUE

     

3,2,2,TRUE,FALSE

这是SVM案例:

library(e1071)
df= read.csv("5.tennis_encoded.csv")
attach(df)
x <- subset(df, select=-play)
y <- play
detach(df)
model = svm(x,y,type = "C")
pred = predict(model,x)
truthVector = pred == y
good = length(truthVector[truthVector==TRUE])
bad = length(truthVector[truthVector==FALSE])
good/(good+bad)

[1] 0.8571429

这个决策树

df= read.csv("5.tennis_encoded.csv")
library(rpart)
model = rpart(play ~ .,method = "class", data=df)
print(model)

1)root 14 5 TRUE(0.3571429 0.6428571)*

所以我基本上得到一棵只有root的树,并且播放概率为0.64%==是

任何想法我做错了什么?

1 个答案:

答案 0 :(得分:1)

很可能你传递的算法太少,无法进行拆分。

检查rpart.control函数以获取更多详细信息

rpart.control(minsplit = 20, minbucket = round(minsplit/3), cp = 0.01, 
              maxcompete = 4, maxsurrogate = 5, usesurrogate = 2, xval = 10,
              surrogatestyle = 0, maxdepth = 30, ...)

如您所见,最小分割大小为20。

如果你

model = rpart(play ~ .,method = "class", data=df, control= rpart.control(minsplit=2))

你应该得到更多分裂