-1

こんにちは、R プログラミング言語の初心者です。rpart パッケージを使用して回帰木のコードを 1 つ書きました。私のデータでは、いくつかの独立変数が 100 を超えるレベルを持っています。rpart関数を実行した後、次の警告メッセージが表示されます「予測因子に52レベル以上あり、印刷用に切り捨てられました」&ツリーが非常に奇妙な方法で表示されます。たとえば、ツリーが約 70 の異なるレベルを持つ場所によって分割されているとしますが、ラベルがツリーに表示されると、場所がない場所に「ZZZZZZZZZZZZZZZZ.....」と表示されます。 「ZZZZZZZZ」と呼ばれる

私を助けてください。

前もって感謝します。

4

1 に答える 1

3

R の関数の多くには、因子型変数が持つことができるrandomForestレベルの数に制限があります (つまり、因子のレベル数を 32 に制限します)。

特にデータ マイニング コンテストで対処された 1 つの方法は、次のとおりです。

1) 特定の関数に許可されるレベルの最大数を決定します (これを呼び出しますX)。

2)table()因子の各レベルの出現回数を決定し、それらを最大から最小にランク付けするために使用します。

3)X - 1因子の最上位レベルはそのままにします。

4) レベル < については、Xすべてを 1 つの要因に変更して、低発生レベルとして識別します。

少し長いですが、うまくいけば役立つ例を次に示します。

# Generate 1000 random numbers between 0 and 100.
vars1 <- data.frame(values1=(round(runif(1000) * 100,0)))
# Changes values to factor variable.
vars1$values1 <- factor(vars1$values1)
# Show top 6 rows of data frame.
head(vars1)
# Show the number of unique factor levels
length(unique(vars1$values1 ))
# Create table showing frequency of each levels occurrence.
table1 <- data.frame(table(vars1 ))
# Orders the table in descending order of frequency.
table1 <- table1[order(-table1$Freq),]
head(table1)
# Assuming we want to use the CART we choose the top 51
# levels to leave unchanged
# Get values of top 51 occuring levels
noChange <- table1$vars1[1:51]
# we use '-1000' as factor to avoid overlap w/ other levels (ie if '52' was 
# actually one of the levels).
# ifelse() checks to see if the factor level is in the list of the top 51
# levels.  If present it uses it as is, if not it changes it to '-1000'
vars1$newFactor <- (ifelse(vars1$values1 %in% noChange, vars1$values1, "-1000")) 
# Show the number of levels of the new factor column.
length(unique(vars1$newFactor))

rpart最後に、変数の数が多い場合や変数の名前が長い場合、ツリー表示が非常に混雑するため、切り捨てられた変数の使用を検討することをお勧めします。

于 2012-04-12T15:16:38.687 に答える