我有一個包含14個數字列的ARFF文件。我想單獨對每列執行標準化,即將每個柱的值修改爲(actual_value - min(this_column))/(max(this_column) - min(this_column)
)。因此,列中的所有值都將在[0, 1]
的範圍內。列中的最小值和最大值可能與另一列中的最小值和最大值不同。Weka標準化列
我怎樣才能用Weka濾鏡做到這一點?
由於
我有一個包含14個數字列的ARFF文件。我想單獨對每列執行標準化,即將每個柱的值修改爲(actual_value - min(this_column))/(max(this_column) - min(this_column)
)。因此,列中的所有值都將在[0, 1]
的範圍內。列中的最小值和最大值可能與另一列中的最小值和最大值不同。Weka標準化列
我怎樣才能用Weka濾鏡做到這一點?
由於
這可以使用
weka.filters.unsupervised.attribute.Normalize
在每列中應用該過濾器的所有值後,將在範圍[0,1]
這是正確的進行。只是想提醒一下「正常化」和「標準化」的區別。問題中提到的是「標準化」,而「標準化」則假定高斯分佈並通過均值標準化,並標準化每個屬性的變化。如果您的數據中存在異常值,則標準化過濾器可能會損害您的數據分佈,因爲最小值或最大值可能比其他實例遠得多。
不,這個問題是對的,你完全用錯誤的方式描述它:http://www.dataminingblog.com/standardization-vs-normalization/ – Sentry 2014-01-22 16:30:17
下面是在JAVA中使用K-Means的工作規範化示例。
final SimpleKMeans kmeans = new SimpleKMeans();
final String[] options = weka.core.Utils
.splitOptions("-init 0 -max-candidates 100 -periodic-pruning 10000 -min-density 2.0 -t1 -1.25 -t2 -1.0 -N 10 -A \"weka.core.EuclideanDistance -R first-last\" -I 500 -num-slots 1 -S 50");
kmeans.setOptions(options);
kmeans.setSeed(10);
kmeans.setPreserveInstancesOrder(true);
kmeans.setNumClusters(25);
kmeans.setMaxIterations(1000);
final BufferedReader datafile = new BufferedReader(new FileReader("/Users/data.arff");
Instances data = new Instances(datafile);
//normalize
final Normalize normalizeFilter = new Normalize();
normalizeFilter.setInputFormat(data);
data = Filter.useFilter(data, normalizeFilter);
//remove class column[0] from cluster
data.setClassIndex(0);
final Remove removeFilter = new Remove();
removeFilter.setAttributeIndices("" + (data.classIndex() + 1));
removeFilter.setInputFormat(data);
data = Filter.useFilter(data, removeFilter);
kmeans.buildClusterer(data);
System.out.println(kmeans.toString());
// evaluate clusterer
final ClusterEvaluation eval = new ClusterEvaluation();
eval.setClusterer(kmeans);
eval.evaluateClusterer(data);
System.out.println(eval.clusterResultsToString());
如果你有CSV文件,然後用以下提到的DataSource來替換上面的BufferedReader行:
final DataSource source = new DataSource("/Users/data.csv");
final Instances data = source.getDataSet();
可以只I輸出標準化的ARFF文件後,我已經標準化,並之前運行的分類? (我想將它保存在磁盤上) – aneuryzm 2011-05-02 12:29:29