1

csv ファイル (298 行 24 列) があり、「給与」列を予測する決定木を作成したいと考えています。ツリー パッケージをダウンロードし、ライブラリ関数を介して追加しました。

しかし、決定木を作成しようとすると:

model<-tree(salary~.,data)

以下のようなエラーが表示されます。

 *Error in tree(salary ~ ., data) : 
  factor predictors must have at most 32 levels* 

それの何が問題なのですか?データは次のとおりです。

      Name bat hit homeruns runs
1   Alan Ashby 315  81        7   24
2  Alvin Davis 479 130       18   66
3 Andre Dawson 496 141       20   65
...
team position putout assists errors
1 Hou.        C    632      43     10
2 Sea.       1B    880      82     14
3 Mon.       RF    200      11      3
salary league87 team87
1    475        N   Hou.
2    480        A   Sea.
3    500        N   Chi.

そして、str(data) の値:

「data.frame」: 263 個の観測点。24 個の変数のうち: $ Name : Factor w/ 263 levels "Al Newman","Alan Ashby",..: 2 7 8 10 6 1 13 11 9 3 ...

$バット: int 315 479 496 321 594 185 298 323 401 574 ...

$ ヒット : int 81 130 141 87 169 37 73 81 92 159 ...

$ ホームラン : int 7 18 20 10 4 1 0 6 17 21 ...

$ ラン: int 24 66 65 39 74 23 24 26 49 107 ...

$ runs.batted : int 38 72 78 42 51 8 24 32 66 75 ...

$ walks : int 39 76 37 30 35 21 7 8 65 59 ...

$ years.in.major.leagues : int 14 3 11 2 11 2 3 2 13 10 ...

$ bats.during.career : int 3449 1624 5628 396 4408 214 509 341 5206 4631 ...

$ hits.during.career : int 835 457 1575 101 1133 42 108 86 1332 1300 ...

$ homeruns.during.career : int 69 63 225 12 19 1 0 6 253 90 ...

$ runs.during.career : int 321 224 828 48 501 30 41 32 784 702 ...

$ runs.batted.during.career: int 414 266 838 46 336 9 37 34 890 504 ...

$ walks.during.career : int 375 263 354 33 194 24 12 8 866 488 ...

$ League : 2 つのレベル "A"、"N" を持つ因子: 2 1 2 2 1 2 1 2 1 1 ...

$除算 : 2 水準の因数 "E","W": 2 2 1 1 2 1 2 2 1 1 ...

$ team : Factor w/ 24 level "Atl.","Bal.",..: 9 21 14 14 16 14 10 1 7 8 ...

$ position : Factor w/ 23 レベル "1B","1O","23",..: 10 1 20 1 22 4 22 22 13 22 ...

$ putout : int 632 880 200 805 282 76 121 143 0 238 ...

$ アシスト: int 43 82 11 40 421 127 283 290 0 445 ...

$ エラー: int 10 14 3 4 25 7 9 19 0 22 ...

$ 給与 : 数値 475 480 500 91.5 750 ...

$ League87 : 2 つの水準 "A"、"N" を持つ因子: 2 1 2 2 1 1 1 2 1 1 ...

$ team87 : 24 レベルの係数 "Atl.","Bal.",..: 9 21 5 14 16 13 10 1 7 8 ...

4

2 に答える 2

5

問題はほぼ確実に、変数レベルが多すぎるため、モデルに name 変数を含めていることです。方法論的な観点からも削除しますが、これはおそらくその議論の場ではありません. 試す:

train <- data
train$Name <- NULL
model<-tree(salary~.,train)
于 2013-08-13T20:41:28.227 に答える
2

回帰を実行しようとしている間、あなたsalary因子ベクトルであるように見えるので、数値ベクトルである必要があります。数値に変換するだけで、問題なく動作するはずです。詳細については、ライブラリのヘルプを参照してください。salary

http://cran.r-project.org/web/packages/tree/tree.pdf

使用法

tree(式、データ、重み、サブセット、na.action = na.pass、control = tree.control(nobs、...)、method = "recursive.partition"、split = c("deviance"、"gini" )、モデル = FALSE、x = FALSE、y = TRUE、wts = TRUE、...)

引数

数式数式。左辺 (応答) は、回帰木が当てはめられる場合は数値ベクトル、分類木が作成される場合は因子のいずれかになります。右側は、+ で区切られた一連の数値変数または因子変数でなければなりません。相互作用項があってはなりません。両方 。および - が許可されます。回帰木にはオフセット項を含めることができます。(...)

変数に正確に格納されているものに応じてsalary、変換は多少トリッキーになる可能性がありますが、これは一般的に機能するはずです。

salary = as.numeric(levels(salary))[salary]

編集

コメントで指摘されているように、実際の誤差はdata変数に対応するため、数値データの場合は数値に変換して問題を解決することもできます。それが要因である必要がある場合は、別のモデルが必要になるか、レベル数。これらの要素を手動で数値形式に変換することもできますが (たとえば、レベルと同じ数のバイナリ フィーチャを定義するなど)、入力スペースが指数関数的に増加する可能性があります。

EDIT2

何をモデル化しようとしているのかを最初に決める必要があるようです。あなたは給与を予測しようとしていますが、何に基づいていますか? あなたのデータはプレーヤーの記録で構成されているようですが、その名前は、この予測に使用するデータのタイプが間違っていることは確かです (特に、32 レベルのエラーが発生している可能性があります)。data予測の作成に使用しない変数からすべての列を削除する必要があります。ここで正確な目的が何であるかはわかりません(質問にはそれに関する情報がないため)。そのため、統計に基づいてその人の給与を予測しようとしているとしか推測できませ。入力データ:選手の名前、選手のチーム、そして明らかに給与 (X を使用して X を予測するのは良い考えではありません ;))。

于 2013-08-13T17:11:50.000 に答える