19

私のデータセットのように、Leakage には 2 つの値 1,0 があります。1 の約 300 行と、1 の 569378 行の余分な行があります。これが、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
4

3 に答える 3

8

行の長さの問題を理解しているかどうかはわかりませんが、そのエラーが通常意味することは次のとおりです。

rpart は、制約を使用して決定木を構築します。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))

于 2016-11-12T15:52:36.190 に答える
1

私のデータセットには 14 行しか含まれていません。次のコードを使用してみてください。

dtm<-rpart(playtennis~., weathe_train, method="class", minsplit=2, minbucket=1)
于 2016-06-07T10:58:25.780 に答える