これは変な要求かもしれないので、最初に説明してください。最近、突然 hd がクラッシュし、libSVM でモデル ファイルを生成するために使用していたデータ ファイルを失いました。私はこのデータ ファイルから生成した SVM モデルとスケーリング ファイルを持っています。model_sv_to_instances(model, &instances)
インスタンスを取得するプロセスは非常にコストがかかるため、モデル ファイルのサポート ベクターからデータ ファイルを生成する方法があるかどうか疑問に思っていました。 . (オリジナルと同じにはならないことはわかっていますが、何もないよりはましです) RBF カーネルで確率的 SVM を使用しています。
3 に答える
特定のモデル ファイルを任意のテキスト エディターで開くと、次のような内容が表示されます。
svm_type c_svc
kernel_type sigmoid
gamma 0.5
coef0 0
nr_class 2
total_sv 4
rho 0
label 0 1
nr_sv 2 2
SV
1 1:0 2:0
1 1:1 2:1
-1 1:1 2:0
-1 1:0 2:1
あなたにとって興味深いのは、SVとのラインの後です。
1 1:0 2:0
1 1:1 2:1
-1 1:1 2:0
-1 1:0 2:1
これらはサポート ベクターとして選択されたデータ ポイントであるため、ファイルを解析するだけです。フォーマットは次のとおりです: [ラベル] [インデックス1]:[値1] [インデックス2]:[値2] ... [インデックスn][値n]
たとえば、私の例から、私のトレーニング セットは次のようになったと結論付けることができます。
x y desired val
0 0 -1
0 1 1
1 0 1
1 1 -1
いくつかの考慮事項と警告。SV の数とデータ ポイントの比率は、使用したパラメーターによって異なります。場合によっては比率が大きく、データと比較して SV が非常に少ない場合があります。
心に留めておくべきもう 1 つのことは、この削減によって問題が変わる可能性が高いということです。データ ポイントとして SV だけを使用して再度トレーニングすると、完全に異なるパラメーター セットを持つ完全に異なるモデルが得られる可能性があります。
幸運を!
あなたのRBF
場合はラッキーです。libsvm FAQによると、モデル ファイルからサポート ベクターを抽出できます。
モデル ファイルでは、パラメーターと labels などのその他の情報の後に、各行がサポート ベクターを表します。
ただし、これらはサポート ベクターに過ぎず、元の入力データのほんの一部であることに注意してください。
私の知る限りでは、一般的な SVM モデル、特に libSVM モデルは、サポート ベクターのみで構成されています。これらのベクトルは、クラス間の境界線を表します。ほとんどの場合、それらはデータ ポイントの大部分を表しているわけではありません。残念ながら、モデルからデータを再生成する方法はないと思います。
そうは言っても、モデルに何らかの価値があるかもしれない難解なケースを考えることができます。そのようなケースでのデータの回復を専門とする会社があります (たとえば、クラッシュした HD から)。ただし、復元されたデータにはギャップがある場合があります。場合によっては、モデルがリバース エンジニアリングされて、不足している箇所が埋められることがあります。ただし、これは非常に理論的です。
EDIT:他の回答が述べているように、サポートベクターによって表されるデータポイントの割合は、特定の問題とパラメーターによって異なる場合があります。ただし、前述のように、ほとんどの場合、元のデータ セットのごく一部しか再構築できません。