InstanceQuery、SQL クエリを使用して、 Instancesを構築しています。しかし、クエリの結果は、SQL では通常の順序で常に同じ順序になるわけではありません。このため、異なる SQL から構築されたインスタンスには異なるヘッダーがあります。簡単な例を以下に示します。この動作により、結果が変わるのではないかと思います。
ヘッダー 1
@attribute duration numeric
@attribute protocol_type {tcp,udp}
@attribute service {http,domain_u}
@attribute flag {SF}
ヘッダー 2
@attribute duration numeric
@attribute protocol_type {tcp}
@attribute service {pm_dump,pop_2,pop_3}
@attribute flag {SF,S0,SH}
私の質問は次のとおりです。インスタンス構築に正しいヘッダー情報を与えるにはどうすればよいですか。
以下のワークフローのようなものは可能ですか?
- arff ファイルまたは別の場所から事前に準備されたヘッダー情報を取得します。
- インスタンス構築にこのヘッダ情報を与える
- SQL 関数を呼び出してインスタンス (ヘッダー + データ) を取得する
次のSQL関数を使用して、データベースからインスタンスを取得しています。
public static Instances getInstanceDataFromDatabase(String pSql
,String pInstanceRelationName){
try {
DatabaseUtils utils = new DatabaseUtils();
InstanceQuery query = new InstanceQuery();
query.setUsername(username);
query.setPassword(password);
query.setQuery(pSql);
Instances data = query.retrieveInstances();
data.setRelationName(pInstanceRelationName);
if (data.classIndex() == -1)
{
data.setClassIndex(data.numAttributes() - 1);
}
return data;
} catch (Exception e) {
throw new RuntimeException(e);
}
}