高次元の入力に対して ML アルゴリズム (より具体的には分類、特に SVM) を適用しようとしたときに、満足のいく結果が得られない状況にどのように対処すればよいでしょうか?
1 次元、2 次元、または 3 次元のデータをアルゴリズムの結果と共に視覚化できるため、何が起こっているのかを把握し、問題にアプローチする方法を知ることができます。データが 3 次元を超えると、パラメータを直感的にいじる以外に、どのように攻撃すればよいかよくわかりません。
高次元の入力に対して ML アルゴリズム (より具体的には分類、特に SVM) を適用しようとしたときに、満足のいく結果が得られない状況にどのように対処すればよいでしょうか?
1 次元、2 次元、または 3 次元のデータをアルゴリズムの結果と共に視覚化できるため、何が起こっているのかを把握し、問題にアプローチする方法を知ることができます。データが 3 次元を超えると、パラメータを直感的にいじる以外に、どのように攻撃すればよいかよくわかりません。
データに何をしますか?私の答え:何もありません。SVM は、高次元データを処理するように設計されています。私は現在、SVM を使用した教師付き分類を含む研究問題に取り組んでいます。インターネットで情報源を見つけるとともに、分類の前に次元削減の影響について独自の実験を行いました。PCA/LDA を使用して特徴を前処理しても、SVM の分類精度は大幅に向上しませんでした。
私にとって、これは SVM の仕組みから完全に理にかなっています。x を m 次元の特徴ベクトルとする。n < m の場合、y が R^n にあり、x が R^m にある場合、y = Ax とします。つまり、y は、より低い次元の空間に射影された x です。クラス Y1 と Y2 が R^n で線形分離可能である場合、対応するクラス X1 と X2 は R^m で線形分離可能です。したがって、元の部分空間は、低次元への射影と同じくらい「少なくとも」分離可能である必要があります。つまり、PCA は理論的には役に立ちません。
ここでは、SVM の前に PCA を使用することについて議論している 1 つの議論があります:リンク
できることは、SVM パラメータを変更することです。たとえば、 libsvm linkでは、パラメーター C とガンマは分類の成功にとって非常に重要です。libsvm faq、特にこのエントリリンクには、より役立つヒントが含まれています。その中で:
編集: この「データ ポイント」を追加させてください。私は最近、4 つの排他的なデータ セットに対して PCA 前処理を行う SVM を使用して、別の大規模な実験を行いました。PCA は、削減された次元を選択した場合の分類結果を改善しませんでした。単純な対角スケーリング (各特徴について、平均を減算し、標準偏差で割る) を使用した元のデータの方がパフォーマンスが優れていました。私は大まかな結論を出しているわけではありません。この 1 つの実験を共有しているだけです。おそらく別のデータでは、PCAが役立ちます。
いくつかの提案:
データ(視覚化のためだけに)を低次元空間に投影します(PCAまたはMDS、またはデータにとって意味のあるものを使用して)
学習が失敗する理由を理解するようにしてください。あなたはそれがオーバーフィットだと思いますか?十分なデータがあると思いますか?解決しようとしているタスクを解決するのに十分な情報が機能にない可能性はありますか?データを視覚化せずに、これらの各質問に答える方法があります。
また、タスクとは何か、SVM出力とは何かを教えていただければ、より具体的な提案ができる可能性があります。
PCA または同様の手法で問題の次元を減らすことができます。PCA には 2 つの重要なポイントがあることに注意してください。(1) 適用されるデータが正規分布していると仮定し、(2) 結果のデータはその自然な意味を失います (結果としてブラックボックスになります)。それと一緒に暮らすことができるなら、試してみてください。
もう 1 つのオプションは、いくつかのパラメーター選択アルゴリズムを試すことです。SVM は既にここで言及されているので、Chang と Li (線形 SVM を使用した特徴ランキング) のアプローチを試すことができます。この方法では、線形 SVM を使用して「興味深い特徴」を事前に選択し、選択した特徴に対して RBF ベースの SVM を使用しました。Python データ マイニング ライブラリである Orange に精通している場合、このメソッドを 1 時間以内にコーディングできます。これは貪欲なアプローチであり、入力変数が高度に相関している場合、その「貪欲さ」のために失敗する可能性があることに注意してください。この場合、PCA (上記参照) でこの問題を解決できない場合は、予測子の可能な限り最良の組み合わせを選択しようとするヒューリスティック手法を使用することをお勧めします。この種のアプローチの主な落とし穴は、オーバーフィッティングの可能性が高いことです。モデル構築の全プロセスで見られなかった大量の「未使用」データがあることを確認してください。モデルの準備ができていることを確認した後、そのデータでモデルを 1 回だけテストします。失敗した場合は、このデータを使用して別のモデルを検証しないでください。新しいデータ セットを見つける必要があります。そうしないと、オーバーフィットが再発していないという確信が持てなくなります。
パラメータ選択に関する論文の選択リスト: 高次元ゲノムマイクロアレイデータの特徴選択
ああ、SVM についてもう 1 つ。SVM はブラック ボックスです。データを生成するメカニズムが何であるかを理解し、データではなくメカニズムをモデル化することをお勧めします。一方で、もしこれが可能であれば、おそらくあなたはここでこの質問をすることはないでしょう (そして私はオーバーフィッティングについてそれほど苦々しくはありません)。
パラメータ選択に関する論文一覧
私は次のように問題に取り組みます:
「私が得た結果はあまり満足のいくものではありません」とはどういう意味ですか?
トレーニングデータの分類率が不十分な場合は、次のいずれかを意味します。
テストデータの分類率が不十分な場合は、モデルがデータに過適合していることを意味します。
もちろん、上記の元素の混合物であってもよい。これらはすべて、問題を攻撃するための「盲目的な」方法です。問題をより深く理解するために、データをより低い次元に射影することによる視覚化方法を使用するか、問題のドメインを理解するのに適したモデルを探すことができます (たとえば、データが正規分布していることがわかっている場合は、 GMM を使用してデータをモデル化します ...)
私が間違っていなければ、SVMのどのパラメーターが最良の結果をもたらすかを確認しようとしています。あなたの問題はモデル/カーブフィッティングです。私は数年前に同様の問題に取り組みました。同じことをするためのたくさんの図書館とアルゴリズムがあります。ニュートンラプソン法のアルゴリズムと遺伝的アルゴリズムのバリエーションを使用して、曲線に適合させました。
実際の実験を通じて、期待する結果を生成/推測/取得します(または、単純な分類を行う場合は、自分で行います)。これをSVMの出力と比較してください。前述のアルゴは、モデル(この場合はSVM)の結果が期待値とある程度一致するまで、このプロセスを繰り返します(このプロセスは、問題/データサイズに基づいて時間がかかることに注意してください。 140ノードのbeowulfクラスター)。
ニュートンラプソン法を選択する場合は、ここから始めるのがよいでしょう。