質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

1回答

3234閲覧

Rでのrpartのfactor型使用時のクロスバリデーションについて

YujiKasuya

総合スコア10

R

R言語は、「S言語」をオープンソースとして実装なおした、統計解析向けのプログラミング言語です。 計算がとても速くグラフィックも充実しているため、数値計算に向いています。 文法的には、統計解析部分はS言語を参考にしており、データ処理部分はSchemeの影響を受けています。 世界中の専門家が開発に関わり、日々新しい手法やアルゴリズムが追加されています。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

1クリップ

投稿2016/05/09 05:21

###前提・実現したいこと

Rでrpartを使ってfactorを含む特徴量を決定木で分類するプログラムを作成しています。
bootstrapのクロスバリデーションを使って分類性能を評価したいのですが、
学習時に使用されていないfactorの値(Level)が評価で使用されるとエラーが起こってしまい
うまく動きません。
もちろん、元データを変えて学習時に必ず全Levelを含むようなものに変えるということもありうるとは思うのですが、
データはいじらないようなライブラリとして提供したいので、
今回は元データを変えずに何とかする方法を探しています。

###発生している問題・エラーメッセージ

Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = attr(object, : factor X3 has new levels x5

###該当のソースコード

R

1library(bootstrap) 2library(rpart) 3library(rpart.plot) 4 5fdata= read.csv("data.csv", header = T) 6 7theta.fit <- function(x,y){ 8 xdata <- cbind(x,data.frame(answer=y)) 9 return( rpart(answer ~ X1 + X2 + X3 + X4 + X5 + X6 + X7 + X8, 10 data = xdata, method = "class" , control=rpart.control(minsplit=5, cp=0.02, loss=matrix(c(0,1,1,0), byrow=TRUE, nrow=2)))) 11} 12 13theta.predict <- function(fit, x){ predict(fit, data.frame(x), type="class")} 14 15xresult <- crossval(fdata[,-2], fdata[,2], theta.fit, theta.predict, ngroup = 100) 16write.csv(xresult,"xresult2.csv")

###試したこと

  • なるべく元データを変えてみる ⇒ かなり頑張ったがランダムに学習データが選ばれるので、確実に全levelが入るようにすることは困難
  • ngroupをいろいろ変えてみる ⇒ どの値でもエラーが出てしまう

###補足情報(言語/FW/ツール等のバージョンなど)
Windows10でRStudio使用

下記は詳細

platform x86_64-w64-mingw32
arch x86_64
os mingw32
system x86_64, mingw32
status
major 3
minor 2.5
year 2016
month 04
day 14
svn rev 70478
language R
version.string R version 3.2.5 (2016-04-14)
nickname Very, Very Secure Dishes

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

古い質問ですが回答がなく他の方にも参考となるかもしれませんので一応

機械学習はあくまでも
入力データについてその説明変数と目的変数のパターンを学習し、新規のテストデータで予測値を出す
というものですので、学習時とテスト時のデータが異なる特にないカテゴリ値が来ると予測できません

  • なるべく元データを変えてみる ⇒ かなり頑張ったがランダムに学習データが選ばれるので、確実に全levelが入るようにすることは困難

当該カテゴリのlevelごとにランダムに一定割合を学習データとして選べば良いと思います。
当該カテゴリのlevelが1件あるいは少数な場合は学習側に寄せるか、levelをマージして少数のlevelのデータがなくなるように調整する必要があります。
(イメージ、ある商品のユーザーの属性として都道府県があり、鳥取県、島根県ユーザーが著しく少ない場合は、鳥取・島根というlevelにするなど)

もちろん、元データを変えて学習時に必ず全Levelを含むようなものに変えるということもありうるとは思うのですが、
データはいじらないようなライブラリとして提供したいので、
今回は元データを変えずに何とかする方法を探しています。

の意味がちょっと分かりませんが、元データを変えられるほど豊富にあるのであればできるだけ多くのデータで学習、検証させれば運用時のデータと傾向が違っていることが避けられるかと思います。

投稿2020/07/11 22:38

aokikenichi

総合スコア2218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問