0

私はJavaを使用して、UCI MachineLearningRepositoryからいくつかのデータセットを読み取って処理しています。まず、データセットごとにクラスを作成し、特定のクラスファイルを操作しました。データセット内のすべての属性は、必要なタイプのクラスの対応するデータメンバーによって表されていました。このアプローチは、うまくいきませんでした。帰属<10-15の。クラスのデータメンバーを増減し、新しいデータセットをモデル化するためにタイプを変更しました。また、関数に必要な変更を加えました。

問題:私は今、非常に大きなデータセットを処理する必要があります。属性が20〜30を超えるものは、この方法で作業するのが非常に面倒です。問い合わせる必要はありません。私のデータ離散化アルゴリズムは、データを離散化するために4回のスキャンが必要です。私の仕事は裁量の直後に終わります。ここで効果的な戦略は何でしょうか?

問題を明確に述べることができたと思います。

4

3 に答える 3

3

いくつかのオプション:

  1. ファイルのメタデータを読み取り、同等のクラス ファイルを生成するコード ジェネレーターを記述します。
  2. クラスを気にしないでください。Objectデータをorの配列に保持Stringし、必要に応じてキャストします。
  3. 必要なすべてのタイプのDataElementsとサブクラスDataElementsのコレクションを含むクラスを作成し、メタデータを使用して実行時に適切なクラスを作成します。
于 2012-05-07T16:43:48.547 に答える
1

次のようなメンバーを含む単純な DataSet クラスを作成します。

 public class DataSet {
     private List<Column> columns = new ArrayList<Column>();
     private List<Row> rows = new ArrayList<Row>();

     public void parse( File file ) {
         // routines to read CSV data into this class
     }
 }

 public class Row {
     private Object[] data;

     public void parse( String row, List<Column> columns ) {
         String[] row = data.split(",");
         data = new Object[row.length];

         int i = 0;
         for( Column column : columns ) {
             data[i] = column.convert(row[i]);
             i++;
         }
     }
 }

 public class Column {
     private String name;
     private int index;
     private DataType type;

     public Object convert( String data ) {
         if( type == DataType.NUMERIC ) {
            return Double.parseDouble( data );
         } else {
            return data;
         }
     }
 }

 public enum DataType {
     CATEGORICAL, NUMERIC
 }

これにより、使用したいデータセットが処理されます。唯一の問題は、列とそれぞれのデータ型を DataSet に定義することによって、ユーザーがデータセットを定義する必要があることです。コードで実行することも、ファイルから読み込むこともできます。多くの構成データをデフォルトにすることができる場合があります (CATEGORICAL など)。または、フィールドの解析が失敗した場合は、CATEGORICAL である必要があります。それ以外の場合は数値です。通常、ファイルには列の名前を見つけるために解析できるヘッダーが含まれているため、その列のデータを見てデータ型を把握するだけで済みます。データ型を推測する単純なアルゴリズムは、非常に役立ちます。基本的に、これは他のすべてのパッケージがこのようなデータ (R、Weka など) に使用するのとまったく同じデータ構造です。

于 2012-05-07T18:20:55.207 に答える
0

私は自分のプロジェクトの 1 つでそのようなことをしました。多くの変数データが​​あり、私の場合はインターネットからデータを取得しました。クエリや並べ替えなどを行う必要があったため、データのすべてのバリエーションに対応するデータベースの設計に時間を費やしました (すべてのエントリに同じ数のプロパティが含まれているわけではありません)。しばらく時間がかかりましたが、最終的には同じコードを使用して任意のエントリのデータを取得しました (私の場合は JPA を使用)。私の IDE (NetBeans) は、データベース スキーマを使用してほとんどのコードを直接作成しました。

あなたの質問からは、データをどのように使用する予定なのかが明確ではないので、個人的な経験に基づいて回答しています。

于 2012-05-07T16:56:44.043 に答える