2

MatlabGPTIPSフレームワークを使用して分類の問題を解決しようとしています。これまでのところ、妥当なデータ表現と適応度関数を構築することができ、クラスあたりの平均精度は65%近くになりました。

私が今必要としているのは、2つの困難を伴ういくつかの助けです。

  1. 私のデータは偏っています。基本的に二項分類問題を解いていて、データの20%だけがクラス1に属し、残りの80%はクラス0に属しています。最初は適応度関数として予測の精度を使用しましたが、それは本当に悪かったです。私が今持っている最高のものは

    Fitness = 0.5 *(PositivePredictiveValue + NegativePredictiveValue)-const * ComplexityOfSolution

データの偏りを修正するために関数を改善するにはどうすればよいですか。

  1. 2番目の問題は過剰適合です。データを3つの部分に分割しました:トレーニング(70%)、テスト(20%)、検証(10%)。トレーニングセットで各染色体をトレーニングし、テストセットでその適応度関数を評価します。このルーチンにより、母集団で最高の個人のテストデータで0.82の適合度に達することができます。しかし、検証データに対する同じ個人の結果はわずか60%です。新しい母集団が生成される前に、毎回最良の個人の検証チェックを追加しました。次に、検証セットの適合度とテストセットの適合度を比較します。差が5%を超える場合は、適応度関数のソリューションの複雑さに対するペナルティを増やします。しかし、それは役に立ちませんでした。また、各世代で検証が設定されたすべての個人を評価し、過剰適合した個人を削除することもできます。しかし、私はしません テストデータと検証データの違いを確認してください。ここで他に何ができますか?

アップデート:

私の2番目の質問では、素晴らしい記事「遺伝的プログラミングでの過剰適合の制御に関する実験」を見つけました。GPでの過剰適合の処理に関するいくつかの記事の著者のアイデアとともに、この問題に対する多くの異なるアプローチへの多くの参照を含む印象的なレビューがあります。今、私は自分の問題に対して試すことができるたくさんの新しいアイデアを持っています。残念ながら、データ内の不均衡なクラスの比率を考慮に入れる適切な適応度関数を選択することについては、まだ何も見つかりません。

4

1 に答える 1

2

ベースライン(ほとんどのサンプルを含むクラスとしてすべてを分類する)が80%の場合、65%の精度は非常に悪くなります。ナイーブなモデルよりも優れたモデルを作成するには、少なくともベースライン分類を達成する必要があります。

複雑さにペナルティを課すことはありません。むしろ、ツリーサイズを制限します(可能な場合)。実行中に、2つの適合度値として品質と複雑さを備えたモデルのパレートフロントを格納するなど、より単純なモデルを識別できます。

HeuristicLabには、これらのことを実行できるGPベースの分類が統合されています。いくつかのオプションがあります。分類にMSEを使用するか、R2を使用するかを選択できます。最新のトランクビルドには、精度を直接最適化するエバリュエーターもあります(正確に言えば、分類ペナルティを最適化します)。MSEを最適化するということは、各クラスに値(1、2、3、...)を割り当て、その値からの平均二乗誤差を最小化しようとすることを意味します。これは最初は最適に見えないかもしれませんが、機能します。精度を直接最適化すると、過剰適合が速くなる可能性があります。数式を整理および縮小できる(そしてその効果を表示できる)数式単純化機能もあります。

また、GPである必要がありますか?ランダムフォレスト分類またはサポートベクターマシンも試しましたか?RFは非常に高速で、通常はかなりうまく機能します。

于 2012-09-17T22:38:31.853 に答える