Exemple #1
0
  }, function(err){

    var testEnd = new Date().getTime()    
    currentStats.calculateStats()

    callback(err, { 'data': data_stats,
            'stats': currentStats,
            'testtime': testEnd - testStart})
  })
Exemple #2
0
		}, function(err){

			var testEnd = new Date().getTime()		
			currentStats.calculateStats()

			console.vlog("TEST&TRAIN: currentStats: "+JSON.stringify(currentStats, null, 4))

			callback(err, { 'data': data_stats,
						'stats': currentStats,
						'testtime': testEnd - testStart})
		})
Exemple #3
0
module.exports.test_hash = function( classifier, testSet1, verbosity) {
  var stat_hash = {}
  var sentence_hash = {}
  var data_stats = []
  var currentStats = []
  var indexes = []
  var explain = 50;

  var testStart = new Date().getTime()  

    testSet = JSON.parse(JSON.stringify(testSet1, null, 4))
  currentStats = new PrecisionRecall()
  
  for (var i=0; i<testSet.length; ++i) 
  {
    expectedClasses = testSet[i].output

    classesWithExplanation = classifier.classify(testSet[i].input, verbosity)

    console.log("*********RESULTS**************")
    console.log(JSON.stringify(classesWithExplanation, null, 4))

    if (verbosity) actualClasses = classesWithExplanation.classes
    else
      actualClasses = classesWithExplanation

    // actualClasses = bars.filterlabels(actualClasses)
    // expl = currentStats.addCasesHash(expectedClasses, actualClasses, (verbosity>2));
    // console.log(JSON.stringify(expl, null, 4))
    
    var sentence_hash = {}
    sentence_hash.input = testSet[i].input
    sentence_hash.output = testSet[i].output
    sentence_hash.classified = actualClasses
    sentence_hash.explanation = currentStats.addCasesHash(expectedClasses, actualClasses, (verbosity>2));
    currentStats.addIntentHash(expectedClasses, actualClasses, true)

    // sentence_hash['expected'] = expectedClasses
    // sentence_hash['id'] = id
    // sentence_hash['explanation_source'] = classesWithExplanation

    data_stats.push(sentence_hash);
  }
    currentStats.calculateStats()   
    var testEnd = new Date().getTime()
  
  return {
    'data': data_stats,
    'stats': currentStats,
    'testtime': testEnd - testStart
  }
};
Exemple #4
0
module.exports.trainAndTest_batch = function(
    classifierType, 
    trainSet, testSet, 
    verbosity, microAverage, macroSum) {

    var startTime = new Date();
    var classifier = new classifierType();

    testSet1 = JSON.parse(JSON.stringify(testSet))
    testSet2 = JSON.parse(JSON.stringify(testSet))

    trainSet1 = JSON.parse(JSON.stringify(trainSet))

    classifier.trainBatch(trainSet1);

    var output = classifier.classifyBatch(testSet1);

    if (output.length != testSet1.length)
      throw new Error('Lengths are not equal');

    var currentStats = new PrecisionRecall();
    
    var data_stats = []
    _.each(testSet2, function(value, key, list){ 
      var sentence_hash = {}
      sentence_hash['input'] = value.input;
      sentence_hash['expected'] = value.output
      sentence_hash['classified'] = output[key].output
      sentence_hash['explanation'] = currentStats.addCasesHash(value.output, output[key].output, (verbosity>2));
      data_stats.push(sentence_hash)
    }, this)

    currentStats.calculateStats()
    
    var testEnd = new Date().getTime()
  
    classifierstats = {}
    classifierstats['labels'] = currentStats.retrieveLabels()
    classifierstats['data'] = data_stats
    classifierstats['stats'] = currentStats

    return classifierstats
};
Exemple #5
0
module.exports.test = function(
	classifier, testSet, 
	verbosity, microAverage, macroSum) {

	if (typeof classifier.OutputSplitLabel === 'function') {
		testSet = classifier.outputToFormat(testSet)
    }

	var currentStats = new PrecisionRecall();
	for (var i=0; i<testSet.length; ++i) {
		var expectedClasses = normalizeClasses(testSet[i].output);
		var actualClasses = classifier.classify(testSet[i].input);
		var explanations = currentStats.addCases(expectedClasses, actualClasses, (verbosity>2));
		currentStats.addCasesLabels(expectedClasses, actualClasses);
		if (verbosity>1 && explanations.length>0) console.log("\t"+testSet[i].input+": \n"+explanations.join("\n"));
		if (microAverage) microAverage.addCases(expectedClasses, actualClasses);
	}
	currentStats.calculateStats();
	if (macroSum) hash.add(macroSum, currentStats.fullStats());
	return currentStats;
};
Exemple #6
0
module.exports.testLite = function(classifier, testSet, explain) {
  var currentStats = new PrecisionRecall();
  
  labeltree = {}

    if ((typeof classifier.TestSplitLabel === 'function')) {
    testSet = classifier.outputToFormat(testSet)
    }

    for (var i=0; i<testSet.length; ++i) {
    expectedClasses = list.listembed(testSet[i].output)
    // classified = classifier.classify(testSet[i].input, 10, testSet[i].input);
    classified = classifier.classify(testSet[i].input);

    // console.log(JSON.stringify(classified, null, 4))
    // process.exit(0)

    actualClasses = list.listembed(classified)

    for (type in  classified.explanation)
    {
      for (label in classified.explanation[type])
        {
          if (!(label in labeltree))
            {
            labeltree[label] = {}
            labeltree[label]['positive'] = {}
            labeltree[label]['negative'] = {}
            }

          _.each(classified.explanation[type][label], function(value, key, list){ 
            if (!(value[0] in labeltree[label][type]))
              {
              labeltree[label][type][value[0]] = {}
              labeltree[label][type][value[0]]['count'] = 0
              labeltree[label][type][value[0]]['weight'] = 0
              }

            labeltree[label][type][value[0]]['count'] = labeltree[label][type][value[0]]['count']+ 1
            labeltree[label][type][value[0]]['weight'] = labeltree[label][type][value[0]]['weight'] + value[1]
            }, this)
        }
    }
    
    // var expectedClasses = normalizeClasses(dataset[i].output); 
    // var actualClassesWithExplanations = classifier.classify(dataset[i].input, explain, dataset[i].input);    
    // actualClasses = (actualClassesWithExplanations.classes? actualClassesWithExplanations.classes: actualClassesWithExplanations);
    // actualClasses.sort();
    // if (!_(expectedClasses).isEqual(actualClasses)) {
    //  console.log(
    //    "\t"+JSON.stringify(dataset[i].input)+":"+
    //    " expected "+expectedClasses+
    //    " but got "+(explain>0? JSON.stringify(actualClassesWithExplanations,null,"\t"): actualClasses));
    // }
    // currentStats.addCases(expectedClasses, actualClasses);
  }

  for (label in labeltree)
  {
    for (type in labeltree[label])
    {
      lis = []

      for (label1 in labeltree[label][type])
      {
        lis.push([label1,labeltree[label][type][label1]['count'], labeltree[label][type][label1]['weight']])
      }

    labeltree[label][type]['LIST'] = _.sortBy(lis, function(num){ return Math.abs(num[2]); });
    }
  }


  for (label in labeltree)
  {
    for (type in labeltree[label])
    {
    console.log(label+" "+type)
    console.log(JSON.stringify(labeltree[label][type]['LIST'].reverse().slice(0,10), null, 4))
    }

  }


  console.log("SUMMARY: "+currentStats.calculateStats().shortStats());
  return currentStats;
};