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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Python

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

Q&A

解決済

2回答

1191閲覧

過学習しているのか?それとも無理な課題なのか?

kururi10

総合スコア27

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

機械学習

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

Python

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

0グッド

1クリップ

投稿2018/07/31 13:13

時系列データの機械学習について、
過学習しているのか?それともそもそも無理な課題なのか?
どちらか分からなくて質問させていただきます。

学習した結果の混同行列は以下の通りです。


【trainデータ】

[[1453 | 114]
[ 8 | 506]]

class | precision | recall | f1-score | support
0 | 0.99 | 0.93 | 0.96 | 1567
1 | 0.82 | 0.98 | 0.89 | 514


【testデータ】

[[311 | 81]
[ 89 | 40]]

class | precision | recall | f1-score | support
0 | 0.78 | 0.79 | 0.79 | 392
1 | 0.33 | 0.31 | 0.32 | 129


お聞きしたいことは、

①trainデータでは上手く分類できているように見えるが(一応、0.8以上あれば十分としている)、
testデータではあまり上手くいってないので過学習しているのは分かる。
これは
「過学習はしているけれど、そもそもは分類できないような問題ではない」
とこの結果から言ってよいのかどうか?

自分の感想としては、
trainデータで未学習の状態ではないので
そもそも分類できないような課題だ、とはいえないと一応思っています。

②もし過学習しているだけならば、
過学習の問題さえクリアすればtestデータでも汎化できそうな課題かどうか?
それとも過学習の問題ではなく
そもそも分類が無理な課題でありそうかどうか?(この混同行列を見た感じ)

の2点です。
宜しくお願いいたします。

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

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

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

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

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

guest

回答2

0

一部のわかっているパターンに対して1と分類して、その他を全て0に分類すると、今の状態を再現できる気がします。

あとはtestにわかっているパターンがどれほど含まれているのか、という問題になります。

結果から読み取る限りは典型的な過学習で、前処理することでいつでも0.5以上を達成してからさらなるチューニングをするのがよろしいのではないかと。

個人的な考えでは、偏りがあるデータに対する過学習を是正するのは原理的に困難で、モデルをランダムに近い形にしてから表現力を増やして、「過」学習の許容できるところまで学習させるのが現実的かと。

投稿2018/07/31 22:09

mkgrei

総合スコア8560

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

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

kururi10

2018/08/01 03:17

ご回答いただきありがとうございます。 testデータの1のprecisionを気にしながらやっているのですが、 これがおっしゃっている 分かっているパターンに対して1と分類して あとはtestにわかっているパターンがどれほど含まれているのか というところに該当するのですね。 前処理することでいつでも0.5以上を達成してから という部分が具体的に何をすればよいのか 僕の頭だとイメージできないのですが、 不均衡データ対策でしょうか・・・? 一応、不均衡データ対策+バギングとして imbalanced-learn の BalancedBaggingClassifierを使っています。 コード的には base_estimator = lgb.LGBMClassifier(パラメタセット) gbm = BalancedBaggingClassifier(base_estimator=base_estimator, ratio='auto', その他seedやn_estimatorsなど) gbm.fit(x_train, y_train) とやっています。 欠損値は全くないので、前処理として他にやっていることはありません。。。 0.5以上を達成できればかなり嬉しいのですが、 上記以外で具体的にすればよいことはありますでしょうか?
mkgrei

2018/08/02 03:45

例えば、全て同じ入力に対して異なる出力になる場合、出力の分布に偏りがなければ、全て0.5を出力するべきです。 最初の狙いどころは、分布の偏りをなくして、特徴量を減らすことによって、「どちらとも言えない」モデルを作り出すことです。 他のいいやり方がないという主張ではありませんので、一応。
kururi10

2018/08/02 06:11

ご回答ありがとうございます! どちらとも言えないモデルを作り出すと全て0.5を出力するようになるので そうなるように分布の偏りをなくしたり特徴量の選別をしてみるとよい ということでしょうか。。。 ちょっとまだよく分かっていないのですが、 0.5というのは混同行列の中のどの数値になりますかね・・・?
mkgrei

2018/08/03 14:14

今2値の分類ですから、それぞれを0.5ずつだと判断するのが、ランダムなモデルになります。 実際ノイズなしで0.5だとargmaxの取り方でどちらかがずっと判定されてしまうのでランダムにはなりませんが、目指すものとしての感覚はお分かりいただけるかと。
kururi10

2018/08/03 16:36

うーん、もう少しじっくり考えてみます・・・。 ご回答ありがとうございます^^
kururi10

2018/08/03 16:43

ちなみに、以前教えて頂いたように 線形モデルでも試してみています。 1のprecisionがLightGBM以上に上がったのですが、 未知のデータへの正解率はそこまで上がらなかった感じで また色々試してみています~。
guest

0

ベストアンサー

データの性質も手法もわからないのでは、ほとんど何も言えません。

クラス1のテストデータの過半数がクラス0に予測されているのを見ると、あまり希望は持てなさそうですが・・・

不均衡データなのがずいぶん悪く働いている気がするので、とりあえずその対策をやってみるべきかと。

投稿2018/07/31 14:43

hayataka2049

総合スコア30933

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

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

kururi10

2018/07/31 14:48

ご回答ありがとうございます! そうですか・・・結果だけだと判断は難しいのですね。 不均衡データ対策としては、 imbalanced-learn の BalancedBaggingClassifier を使っています。 ratioに'auto'を設定し、 base_estimatorにはLightGBMを使っています。 たぶんこれで不均衡対策はできているはずなのですが、 これを踏まえるとどんな印象をお感じになられるでしょうか・・・?
hayataka2049

2018/07/31 14:57

だとすると、渋いですね データがgarbageなのか、分類器がロクな仕事してないのか、どちらかまたは両方でしょうか
hayataka2049

2018/07/31 15:01

ただし、スコアの良し悪しはタスク依存なので、一応f1値マクロ平均が0.555なら完全に適当にやるよりは結構マシなので、たとえば賭け事で期待値を上げるのになら使えるかもしれません。0.8が要求されるタスクなら、無理
kururi10

2018/07/31 15:05

なるほどですね、一応テストデータの1のprecisionが0.5以上 あれば十分、という感じでやっています。 うむう・・・、どちらも再度見直してみる必要があるということなのですね。 trainデータは未学習することなく上手くいっている(学習不足・学習不能ではない)みたいですが、 これって 「データの性質としてはそもそも分類できない性質のデータではないと言える」 と考えてもいいのでしょうか?(これが一番知りたかったことです)
hayataka2049

2018/07/31 15:42

>「データの性質としてはそもそも分類できない性質のデータではないと言える」 表現力の低いモデルなら、そういうことはいえなくはありません(線形判別分析とかナイーブベイズあたり) ある程度表現力のあるモデルだと、過剰適合の力で分類してしまうことはできるので 極端な話、一様分布する点にランダムにラベルを振ったようなデータでも、決定木に入れてとにかく木を深くしていければ学習データに対する正解率1.0です なので、一般論で言えるか言えないかをいえば、言えません
kururi10

2018/07/31 15:48

あらら・・・そうなんですね。 テストデータをうまく分類できるように、 モデルの表現力をどれだけ抑えられるか がカギになってくるのですね。 何度もお付き合いいただき、ありがとうございます^^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問