テキスト分類にWekaを使用しようとしています。この目的のために、スパースARFFデータファイル形式を使用することは理にかなっています。Weka 3.7.2を使用して、次のことを試しました。
- TextDirectoryLoaderを使用して、テキストディレクトリをInstancesオブジェクトに変換します 。
- StringToWordVectorを使用して、前のステージで生成された文字列を数値に変換します。
最初の段階はうまくいきました。第2段階で問題が発生しました。これは、 WekaのARFFファイル形式の仕様で次のように説明されています。
警告:文字列属性を持つデータセットからSparseInstanceオブジェクトを保存する際に既知の問題があります。Wekaでは、文字列と公称データ値は数値として保存されます。これらの数値は、可能な属性値の配列へのインデックスとして機能します(これは非常に効率的です)。ただし、最初の文字列値にはインデックス0が割り当てられます。これは、内部的にこの値が0として格納されることを意味します。SparseInstanceが書き込まれると、内部値が0の文字列インスタンスは出力されないため、文字列値は失われます( arffファイルが再度読み取られ、デフォルト値0は別の文字列値のインデックスであるため、属性値が変更されているように見えます)。
ARFF形式は、このソリューションを提案します。
この問題を回避するには、インデックス0にダミーの文字列値を追加します。これは、SparseInstanceオブジェクトで使用され、SparseARFFファイルとして保存される可能性のある文字列属性を宣言するたびに使用されることはありません。
私はまさにそれを行おうとしています-ダミーの文字列を追加します。これを手動で行うことができませんでした(ARFFファイルを編集することにより)。これを行った人は、すでに例を投稿できますか?これを行うプログラムセグメント、適切に変更されたARFFファイル、またはこれを行う他の方法のいずれかです。
ありがとう。