2011-06-28 26 views
0

私は自分自身の仕事の一部としてC++マシン学習ライブラリを開発しています。入力データを表現するためのベストプラクティスについては興味がありました。今は、ファイルから、ストリームなどからデータを読み込むためのI/O操作を処理するDataManagerクラスを使用することを考えています。これを開発するには、機能ラベルを管理するクラスを作成する必要があることに気付きました(入力データとの関連付け)およびクラスラベル(トレーニングデータの場合)が含まれます。マシン学習データ構造のベストプラクティス

したがって、私の実装には、ファイルからデータを読み込むクラスがあります(私はUCIマシン学習リポジトリを使用しています)をboost :: variantオブジェクトに読み込みます。 DataManagerクラスは、演算子>>をオーバーロードして、指定された行からコンマ区切りの各フィーチャ値を読み取ることができます。特徴値が '?'であれば、struct t_missing {}を入力します。

クラス/フィーチャマネージャのために、フィーチャ/クラス名のリンクリストとそれぞれのインスタンスに含まれるインスタンスの数を維持することが適切であると考えています。

とにかく、これはそのようなクラスでの私の最初の考えだったので、実装に関する他の考え/提案を聞いてみたいと思います。コードを表示する必要はありません。私はおそらく、おそらく考慮すべき他のものについて聞いてみたいと思っています。

ありがとうございます!

答えて

1

いくつかの学習上の問題は、ほとんどがゼロである多数の可能な機能を持つデータである疎なデータにあります。この場合、非ゼロであるフィーチャのみを格納する方がはるかに効率的です。

これは通常、(feature_index、feature_value)ペアのリストとしてベクトルを格納するLibSVMなどのSVMライブラリの場合です。例えば。これらは、ベクターのため使用するフォーマット:

[0, 1, 0, 0, 1, 0, 0, 1] 

は次のようになります(インデックスは1から始まる)

2:1 5:1 8:1 
関連する問題