def clear_classifier(db, feature_type, data, algorithm): print "function: " + __name__ if algorithm==None: return my_classifier.error_json('algorithm must be designated') clf_id = my_classifier.generate_clf_id(algorithm,feature_type,data) query = {'_id':clf_id} collection = db['classifiers'] data_count = collection.find(query).count() if data_count==0: return my_classifier.error_json("No classifiers are hit.") try: db['classifiers'].remove(query) except: return my_classifier.error_json(sys.exc_info()[1]) result = my_classifier.success_json() result['event'] = {'_id': generate_event_id('clear_classifier', feature_type, clf_id )} return result
def evaluate(db,feature_type, data,algorithm): #print "function: evaluate" # class_name2idのために識別器のデータを呼ぶ clf_id = my_classifier.generate_clf_id(algorithm,feature_type,data) #print "clf_id: " + clf_id try: record = db["classifiers"].find_one({'_id':clf_id}) if record == None: return my_classifier.error_json("No classifier was found.") except: return my_classifier.error_json(sys.exc_info()[1]) #print record name2id = record['class_name2id'] y = [] y_pred = [] weights = [] selector = data['selector'] selector['likelihood.'+clf_id] = {"$exists":True} print selector samples = get_training_samples(db,feature_type,False,selector) for s in samples: if not s['likelihood'].has_key(clf_id): continue y.append(name2id[s['ground_truth']]) likelihood = dict(s['likelihood'][clf_id]) pred_name = max([(v,k) for k,v in likelihood.items()])[1] y_pred.append(name2id[pred_name]) if s.has_key('weight'): weights.append(float(s['weight'])) else: weights.append(1.0) if not y: return my_classifier.error_json("ERROR: samples are not found.") result = my_classifier.success_json() result['event'] = {'_id':generate_event_id('evaluate', feature_type, clf_id)} id2name = record['class_id2name'] result['class_list'] = [id2name[k] for k in sorted(id2name.keys())] # confution_matrix cm = confusion_matrix(y, y_pred) cm_json_searizable = [] for line in cm: cm_json_searizable.append(line.tolist()) # id2name = record['class_id2name'] result['confusion_matrix'] = json.dumps(cm_json_searizable) #print precision_score(y,y_pred,sample_weight=weights) #print precision_score(y,y_pred) #print weights result['precision_score'] = precision_score(y,y_pred,average=None).tolist()#,sample_weight=weights) result['recall_score'] = recall_score(y,y_pred,average=None).tolist()#,sample_weight=weights) result['f1_score'] = f1_score(y,y_pred,average=None).tolist()#,sample_weight=weights) return result