2014-01-08 1 views
14

제 데이터 세트에서와 같이, Leakage는 두 개의 값 1,0을가집니다. 1이 300 행 정도이고 569378 행에 1이 추가되었습니다. 이것은 rpart 결과에 방금 1 개의 루트가있는 이유입니다.rpart의 결과는 단지 1 개의 루트를 가지고 있습니다.

어떻게 해결할 수 있습니까?

fm.pipe<-Leakage~PipeAge +PipePressure 

> printcp(CART.fit) 

Regression tree: 
rpart(formula = fm.pipe, data = Data) 

Variables actually used in tree construction: 
character(0) 

Root node error: 299.84/569378 = 0.00052661 

n= 569378 

     CP nsplit rel error xerror xstd 
1 0.0033246  0   1  0 0 

답변

20

독립 변수가 트리를 키우기에 충분한 정보를 제공하지 않으면 "해결"할 방법이 없을 수 있습니다. 예를 들어, rpart.control의 도움말을 참조하십시오 : "cp의 요소로 전체적으로 부족한 부분을 줄이지 않는 분할이 시도되지 않습니다"제어 매개 변수를 느슨하게 시도해 볼 수는 있지만 나무가 뿌리 이상으로 자라게합니다.

CART.fit <- rpart(formula=fm.pipe, data=Data, control=rpart.control(minsplit=2, minbucket=1, cp=0.001)) 
1

내 데이터 세트에는 14 개의 행만 있습니다. 나는 당신의 행 길이 문제를 이해 확실하지 않다

dtm<-rpart(playtennis~., weathe_train, method="class", minsplit=2, minbucket=1) 
4

하지만, 여기에 오류가 일반적으로 의미있는 작업은 다음과 같습니다 : 다음 코드를 사용해보십시오

rpart는 의사 결정 트리를 구축하는 제약을 사용합니다. 기본값은 다음과 같습니다. the docs :

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

이러한 제한 사항을 줄여야합니다. @JeanVAdams 말했듯이, 최소한의 시작 :

rpart(formula=fm.pipe, data=Data, 
     control=rpart.control(minsplit=1, minbucket=1, cp=0.001)) 

첫 번째됩니다 아마 당신은 당신이 괜찮은 크기의 트리를 얻을 때까지 천천히이 구속을 구축해야 할 것이다, 그래서 너무 많은 노드가 있습니다. 당신이 아직도 혼동하는 경우


, 여기 입니다 :

하는의 당신이 식료품 점 데이터를 찾고 있다고 가정 해 봅시다, 그리고 당신이 가게에서 가장 인기있는 시간의 나무를보고 싶어요. 24 시간 밖에 안 남았지? 따라서 독립 변수에는 24 가지 가능성 밖에 없습니다. Rpart에는 다음과 같은 조건이 있습니다.

"노드를 분할하려면 노드에 적어도 20 가지가 있어야합니다."

이것은 노드가 한 번만 분할 될 수도 있음을 의미합니다. 150 억 개의 행이 있더라도 24 개의 가능한 행을 분할 할 수 있습니다. 이것은 아마도 이것보다 더 복잡하지만 시작하기에 좋은 곳입니다.

rpart(formula=fm.pipe, data=Data, control=rpart.control(minsplit=1, minbucket=1, cp=0.001))

:

실제로이 정확한 문제를 찾고 있었어요 (시간에 의해 구매자), 나는 모든 나무를 얻기 위해 가능한 가장 낮은 수준에서 내 제약을 떠나야했습니다

관련 문제