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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1888閲覧

[機械学習]学習時におけるXとyのデータ数の違いについて

essa

総合スコア81

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/12/11 08:11

質問があります。

Random Forestで予測をしたい場合、値の数が一致しない場合はどうなるのでしょうか。

例えば、Date、A、B、C、D、Eという要素があります。
この中で、Aを予想したいします。
データの取得頻度は下記だと仮定します。

Aは1日ごとのデータ
Bは1日ごとのデータ
Cは3日ごとのデータ
Dは1週間ごとのデータ
Eは半月(15日)ごとのデータ

とします。

ここで、AをRandomForestにて予想させるために使う特徴量に
すべての要素(つまりB、C、D、E)を選んでAを予想させるとします。
しかし、C,D,Eは1日ごとのデータではなく、隔日なデータなため、データ数が異なります。

前置きが長くなりましたが、下記質問です。

■特徴量のデータ数と、予想させたいデータ数が異なる場合はどうなるのでしょうか。
・そもそもそのようなデータ数が異なる場合は特徴量としないほうがいいのでしょうか。

どうぞよろしくお願いします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

質問の内容は、

1.学習(Random Forest)に使用するデータはN日分存在する。
2.予測対象は日次単位のため、N件存在する。
3.説明変数は、週単位・3日ごとなどであるため、N件より少ない。

という状況下で学習させるとどうなるのか、と理解しました。

結論はこのままでは学習できないということになります。RandomForestは、予測対象に対して説明変数がそろっていることが前提になります。つまり、説明変数の一部に欠損値(nan)があると、計算結果もnanになるため、学習できません。
対処策としては、「欠損値が存在するケースを削除する」というものがあります。質問のケースだと1週間単位のデータが含まれるのでデータ数が1/7になってしまうのであまりうまくないかもしれません。(最終的にはやりたいことと全体のデータ数より総合的に判断)
データを削除しなくてすますためには、欠損値を何らかの方法で補完する必要があります。例えば1週間単位のデータが過去1週間の平均値なのであれば、観測値の前の欠損値の部分に観測値を充てればいいことになります。あるいは天気予報の予想値のようなものであれば、予想対象範囲の未来のデータに観測値を補完すればいいでしょう。他にも観測値同士の中間値(12月3日と12月5日に観測値がある場合、双方の観測値を合算して2で割る)で補完するという方法もあり得るでしょう。

このあたりの補完方法は、データの内容から最も合理的と見込まれるものを使うしかないので、いろいろとご検討ください。

投稿2018/12/11 15:07

R.Shigemori

総合スコア3376

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

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

essa

2018/12/11 15:12

R.Shigemori様 回答ありがとうございます。 やはりデータ数は一致していないとだめなのですね。 NaNに取扱いが難しいという話は聞いていましたが、得られるデータ次第によっては本当にそうなのですね,,, ちなみに、今回したいことは回帰ですが、説明変数が揃っていなくても可能な手法(今回の1,2,3のような状況でも使えるもの)はあるのでしょうか? お手数おかけしますが、教えていただけるとありがたいです。 どうぞよろしくお願いいたします。
R.Shigemori

2018/12/11 15:55

機械学習は欠損値を含む限り計算不能であることは間違いないので、ご要望の手法はないように思います。業界(研究者)的にも欠損値込みでうまく計算する方法を探索するというよりも適切な補完方法を探索する方向に進んでいるみたいです。 もしかすると、MCMCを用いたベイズ推計なら欠損値があってもうまくいくかもしれませんが、実装したことがないので何とも言えません。
essa

2018/12/12 00:09

R.Shigemori様 返信ありがとうございます。 そうなのですね。承知しました。 ありがとうございました。
guest

0

それは現実がどうなっているかに依ります。

Eのデータが例えば1日と15日に発表される指標かなにかだとして、
1日に発表された指標が2日から15日のAに影響を与えるけれど、16日以降のAにはまったく影響を与えないのが現実なら
"直前のE"(2日から15日なら1日のデータ、16日〜次の1日なら15日のデータ)を与えれば問題を解くのに役立ちますが、"2つ前のE"を与えても役に立ちませんよね?

「現実がどうなっているかが人間にわからないぐらい複雑だから機械学習を使おう」という状況のはずです。
いまこの段階で答えがでるなら、機械学習を使う理由がないのではないでしょうか?

投稿2018/12/11 08:43

quickquip

総合スコア11038

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

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

essa

2018/12/11 09:04

quiqui様 回答ありがとうございます。 データを見ても、現実がどうなっているかわからないので機械学習の使用を考えています。 具体的にいうと、求めたいものがある店への入店率であり、その特徴量として気候データ(気温や湿度、降水量など)として 予想させたいと考えています。入店率は1日ごとのデータとしてあります。 温度も1日ごとのデータですが、湿度は3日に1回しかなく、降水量は15日に1回(15日全体の平均値であり、15日目ごとの値ではありません)というデータです。 ※気温とってるなら湿度もとっているだろうとおもいますが、ここではそういうことにしておいていただけるとありがたいです。 このケースの場合は、機械学習を使う必要はないでしょうか? よろしくお願いします。
quickquip

2018/12/11 09:05

最初の何日かは影響があっても後の方になるほど影響が減衰していくようなモデルを想定した上で、ランダムフォレストで扱えますか、という質問でしたかね……
quickquip

2018/12/11 09:06

行き違いました。
essa

2018/12/11 09:18

>最初の何日かは影響があっても後の方になるほど影響が減衰していくようなモデルを想定した上で、ランダ>ムフォレストで扱えますか、という質問でしたかね…… そこまで高度は質問をするに至っておりません。 たんに、データ数が違う場合でも学習はできるのかどうかという質問でした。 Aのデータ=[112,113,...,345]   データ数1,000 Bのデータ=[5353,78765,...,34]  データ数1,000 Cのデータ=[424,4225,...,532]  データ数300 Dのデータ=[34,676,...,964] データ数140 Eのデータ=[33,67,...,42] データ数65 という、データ数にばらつきがある場合を想定します。 このときの特徴量に、データ数が異なるC,D,Eを入れても問題はないのでしょうか。という質問です。 ※質問文がわかりにくかったです。失礼しました。 --- 今書いていて思ったのは、 一番データ数が少ないEのデータ取得日の日付に合わせてA、B、C、Dをダウンサンプリングするというやり方はあると思いましたが、これですと15日ごとの予測になりそうな気がします。
quickquip

2018/12/11 12:04

やっぱり結局、現実がどうかって話では。「その日の」湿度に強く依存して「前後の日の湿度が関係ない」なら「湿度がデータがある日だけ」を入力に選ぶと精度が出るはずですし、「前後の日の」湿度にそれなりに依存しているなら湿度のデータをその前後で同じ値を入れてもそれなりの精度になるでしょうから。たくさんモデルを作って、たくさん実験して、よい精度がでたモデルが現実を表現していると解釈するしかないのでは。
essa

2018/12/11 14:48

quiqui様 回答ありがとうございます。 私が聞いているのは、データ数が異なっていても問題ないかどうかです。 問題ないか。というのは 1.プログラムとして動くのか 2.RandomForestという機械学習手法的にデータ数が異なっていても問題ないのか です。 ※1.については、「知りたいなら早く動かせばいいじゃないか」という話になりますが。 RandomForest等のサンプルコードを見ていると、特徴量の次元数はすべて同じでした。 ※そもそも、同じCSVデータ上から選んでいるようなイメージがあります。同じCSV上の中の、カラム名を特徴量として選んでいるような使われ方かな?と思っています。 つまり、 input1.csv の中に、Date、A、B、C、D、Eがあるというイメージです。そのため、各カラムに格納されているデータ数はすべて同じです。今回でいうと、日付のサンプリング間隔が同じ。というイメージです。 しかし、今回は下記のようなイメージです。 Date、AというCSVファイル[input2.csv] Date、BというCSVファイル[input3.csv] Date、CというCSVファイル[input4.csv] Date、DというCSVファイル[input5.csv] Date、EというCSVファイル[input6.csv] ファイルそのものが違っており、データ数が異なっています。日付のサンプリング間隔ごとにファイルが存在する。という具合です。 そのため、特徴量Xを作ると、データ数が変わってきてしまいます。 y=A X=[B,C,D,E]とした場合、 BはAと同じデータ数ですがC,D,EはそれぞれA,Bとデータ数が異なっています。 そのような、データ数が異なっている場合でも気にする必要はないのでしょうか。RandomForestという手法にたいするインプットデータとして問題ないでしょうか。 という質問です。 お手数おかけしますが、回答していただけるとありがたいです。 どうぞよろしくお願いいたします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問