2010-02-16 16 views
6

मेरे पास एक अंकीय फ़ाइल है जिसमें 14 संख्यात्मक कॉलम हैं। मैं प्रत्येक कॉलम पर अलग से सामान्यीकरण करना चाहता हूं, जो प्रत्येक कॉलम से मूल्यों को संशोधित कर रहा है (actual_value - min(this_column))/(max(this_column) - min(this_column))। इसलिए, कॉलम से सभी मान [0, 1] श्रेणी में होंगे। कॉलम से न्यूनतम और अधिकतम मान किसी अन्य कॉलम से भिन्न हो सकते हैं।वीका सामान्यीकृत कॉलम

मैं इसे वीका फ़िल्टर के साथ कैसे कर सकता हूं?

धन्यवाद

उत्तर

8

यह

weka.filters.unsupervised.attribute.Normalize 

का उपयोग कर प्रत्येक स्तंभ में इस फिल्टर सभी मूल्यों लागू करने के बाद [1 0]

+0

सिर्फ मैं उत्पादन सामान्यीकृत arff फ़ाइल के बाद मैं सामान्यीकृत कर दिया है यह और इससे पहले कि classifiers चलाने के लिए कर सकते हैं? (मैं इसे डिस्क पर सहेजना चाहता हूं) – aneuryzm

1

यह सही है रेंज में हो जाएगा किया जा सकता है। बस "सामान्यीकरण" और "मानकीकरण" के अंतर के बारे में याद दिलाना चाहता था। प्रश्न में जो उल्लेख किया गया है वह "मानकीकरण" है, जबकि "सामान्यीकरण" गॉसियन वितरण को मानता है और सामान्य रूप से सामान्यीकृत करता है, और प्रत्येक विशेषता का मानक भिन्नता। यदि आपके डेटा में कोई बाहरी है, तो मानकीकृत फ़िल्टर आपके डेटा वितरण को न्यूनतम के रूप में नुकसान पहुंचा सकता है, या अधिकतम अन्य उदाहरणों की तुलना में कहीं अधिक हो सकता है।

+1

नहीं, सवाल यह सही है, आप इसे बिल्कुल सही तरीके से वर्णन करते हैं: http://www.dataminingblog.com/standardization-vs-normalization/ – Sentry

0

जावा में के-मीन्स के साथ कामकाजी सामान्यीकरण उदाहरण यहां है।

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 फ़ाइल तो नीचे वर्णित डेटा स्रोत के साथ ऊपर BufferedReader लाइन की जगह है:

final DataSource source = new DataSource("/Users/data.csv"); 
final Instances data = source.getDataSet(); 
संबंधित मुद्दे