コード例 #1
0
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
コード例 #2
0
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