def train_weak_classifier_motion(motion_train_set, adjective, feature_dictionary):
    '''
    Takes the feature_object_train_set and trains the specified
    feature.

    Will return a single trained SVM
    '''

    # Store SVM for each feature
    svm_store = dict()
    scaler_store = dict()

    import pdb; pdb.set_trace()
    # For each feature set (pdc, pac, etc.)
    for feature in feature_dictionary:

        # Pull out the list of features        
        feature_list = feature_dictionary[feature]
       
        # Pull out the features specified as a vector 
        train_feature_vector, train_label_dict = utilities.feature_obj_2_feature_vector(motion_train_set, feature_list)
    
        # Create scaler
        scaler_store[feature] = preprocessing.Scaler().fit(train_feature_vector)
        train_feature_vector_scaled = scaler_store[feature].transform(train_feature_vector)
 
        # Train the SVM
        svm_store[feature] = train_svm(train_feature_vector_scaled, train_label_dict[1][adjective], train_label_dict[0])

    return (svm_store, scaler_store)
Example #2
0
def test_weak_classifier_adjective(test_feature_objects, adjective,
                                   classifiers, scalers, file_ptr,
                                   comma_file_ptr):
    '''
    takes in a dictionary of all features
    
    returns a dictionary of weak classifiers for each feature
    '''

    # specify feature to be extracted
    feature_name_list = [
        "pdc_rise_count", "pdc_area", "pdc_max", "pac_energy", "pac_sc",
        "pac_sv", "pac_ss", "pac_sk", "tac_area", "tdc_exp_fit", "gripper_min",
        "gripper_mean", "transform_distance", "electrode_polyfit"
    ]

    motion_scores = dict()

    # for each motion (slide, squeeze, etc.)
    for motion in test_feature_objects:
        motion_test_set = test_feature_objects[motion]

        # pull out the features specified as a vector
        test_feature_vector, test_label_dict = utilities.feature_obj_2_feature_vector(
            motion_test_set, feature_name_list)

        # create scaler
        test_feature_vector_scaled = scalers[motion].transform(
            test_feature_vector)

        clf = classifiers[motion]

        results = clf.predict(test_feature_vector_scaled)

        print classification_report(test_label_dict[1][adjective], results)

        file_ptr.write('Adjective: ' + adjective + '     Motion name: ' +
                       motion)
        file_ptr.write(
            '\n' +
            classification_report(test_label_dict[1][adjective], results) +
            '\n\n')

        motion_scores[motion] = f1_score(test_label_dict[1][adjective],
                                         results)

    # Pull out the best motion
    best_motion, best_score = utilities.get_best_motion(motion_scores)

    # Write results to comma split file to load
    comma_file_ptr.write(adjective + ',' + str(motion_scores['tap']) + ',' +
                         str(motion_scores['squeeze']) + ',' +
                         str(motion_scores['thermal_hold']) + ',' +
                         str(motion_scores['slide']) + ',' +
                         str(motion_scores['slide_fast']) + ',' + best_motion +
                         '\n')
Example #3
0
def build_ensemble_feature_vector(train_feature_objects, adjective,
                                  classifiers, scalers, feature_name_list):
    '''
    Builds the feature vector set for the ensemble training

    Returns a dictionary of motion + probabilities
    '''

    motion_prob = dict()
    train_labels = None
    object_ids = None
    weights = dict()

    for motion in train_feature_objects:
        motion_train_set = train_feature_objects[motion]

        # pull out the features specified as a vector
        train_feature_vector, train_label_dict = utilities.feature_obj_2_feature_vector(
            motion_train_set, feature_name_list)

        # create scaled vector
        train_feature_vector_scaled = scalers[motion].transform(
            train_feature_vector)

        clf = classifiers[motion]

        # Get results from classifier
        results = clf.predict(train_feature_vector_scaled)
        probabilities = clf.predict_proba(train_feature_vector_scaled)[:, 1]

        # Store off probabilities and their labels
        motion_prob[motion] = probabilities

        # Store off real labels
        train_labels = train_label_dict[1][adjective]

        # Store off the f1 score, which becomes the weight
        weights[motion] = f1_score(train_labels, results)

        # Store off object ids
        object_ids = train_label_dict[0]

    motion_vector = np.transpose(
        np.vstack((motion_prob['tap'], motion_prob['squeeze'],
                   motion_prob['thermal_hold'], motion_prob['slide'],
                   motion_prob['slide_fast'])))

    # Weight vector
    weight_vector = np.hstack(
        (weights['tap'], weights['squeeze'], weights['thermal_hold'],
         weights['slide'], weights['slide_fast']))

    return (motion_vector, train_labels, object_ids, weight_vector)
Example #4
0
def train_weak_classifier_adjective(train_feature_objects, adjective,
                                    feature_dictionary):
    '''
    takes in a dictionary of all features
    
    returns a dictionary of weak classifiers for each feature
    '''

    # specify feature to be extracted
    feature_name_list = [
        "pdc_rise_count", "pdc_area", "pdc_max", "pac_energy", "pac_sc",
        "pac_sv", "pac_ss", "pac_sk", "tac_area", "tdc_exp_fit", "gripper_min",
        "gripper_mean", "transform_distance", "electrode_polyfit"
    ]

    # store weak svms
    svm_motion_store = dict()

    # store scalers
    scaler_motion_store = dict()

    # store scalers
    classifiers = dict()

    # for each motion (slide, squeeze, etc.)
    for motion in train_feature_objects:
        motion_train_set = train_feature_objects[motion]

        # pull out the features specified as a vector
        train_feature_vector, train_label_dict = utilities.feature_obj_2_feature_vector(
            motion_train_set, feature_name_list)

        # create scaler
        scaler_motion_store[motion] = preprocessing.Scaler().fit(
            train_feature_vector)
        train_feature_vector_scaled = scaler_motion_store[motion].transform(
            train_feature_vector)
        params = {
            'n_estimators': 1000,
            'max_depth': 4,
            'min_samples_split': 1,
            'learn_rate': 0.01,
            'loss': 'deviance'
        }

        #params = {'n_estimators': 1, 'max_depth': 1, 'min_samples_split': 1,'learn_rate': 0.1, 'loss': 'deviance'}
        clf = ensemble.GradientBoostingClassifier(**params)
        clf.fit(train_feature_vector_scaled, train_label_dict[1][adjective])
        #clf = train_gradient_boost(train_feature_vector_scaled, train_label_dict[1][adjective], train_label_dict[0])

        classifiers[motion] = clf

    return (classifiers, scaler_motion_store)
Example #5
0
def test_adj_motion_classifier(test_feature_objects, adjective, classifiers,
                               scalers, feature_name_list, file_ptr,
                               comma_file_ptr):
    '''
    takes in a dictionary of all features
    
    returns a dictionary of weak classifiers for each feature
    '''

    motion_scores = dict()

    # for each motion (slide, squeeze, etc.)
    for motion in test_feature_objects:
        motion_test_set = test_feature_objects[motion]

        # pull out the features specified as a vector
        test_feature_vector, test_label_dict = utilities.feature_obj_2_feature_vector(
            motion_test_set, feature_name_list)

        # create scaler
        test_feature_vector_scaled = scalers[motion].transform(
            test_feature_vector)

        clf = classifiers[motion]

        results = clf.predict(test_feature_vector_scaled)

        print classification_report(test_label_dict[1][adjective], results)

        file_ptr.write('Adjective: ' + adjective + '     Motion name: ' +
                       motion)
        file_ptr.write(
            '\n' +
            classification_report(test_label_dict[1][adjective], results) +
            '\n\n')

        motion_scores[motion] = f1_score(test_label_dict[1][adjective],
                                         results)

    # Pull out the best motion
    best_motion, best_score = utilities.get_best_motion(motion_scores)

    # Write results to comma split file to load
    comma_file_ptr.write(adjective + ',' + str(motion_scores['tap']) + ',' +
                         str(motion_scores['squeeze']) + ',' +
                         str(motion_scores['thermal_hold']) + ',' +
                         str(motion_scores['slide']) + ',' +
                         str(motion_scores['slide_fast']) + ',' + best_motion +
                         '\n')
def build_ensemble_feature_vector(train_feature_objects, adjective, classifiers, scalers, feature_name_list):
    '''
    Builds the feature vector set for the ensemble training

    Returns a dictionary of motion + probabilities
    '''

    motion_prob = dict()
    train_labels = None
    object_ids = None
    weights = dict() 
    
    for motion in train_feature_objects:
        motion_train_set = train_feature_objects[motion]
        
        # pull out the features specified as a vector 
        train_feature_vector, train_label_dict = utilities.feature_obj_2_feature_vector(motion_train_set, feature_name_list)

        # create scaled vector
        train_feature_vector_scaled = scalers[motion].transform(train_feature_vector)

        clf = classifiers[motion]
        
        # Get results from classifier
        results = clf.predict(train_feature_vector_scaled)
        probabilities = clf.predict_proba(train_feature_vector_scaled)[:,1] 
       
        # Store off probabilities and their labels
        motion_prob[motion] = probabilities

        # Store off real labels
        train_labels = train_label_dict[1][adjective]

        # Store off the f1 score, which becomes the weight
        weights[motion] = f1_score(train_labels, results)

        # Store off object ids
        object_ids = train_label_dict[0]

    motion_vector = np.transpose(np.vstack((motion_prob['tap'], motion_prob['squeeze'], motion_prob['thermal_hold'], motion_prob['slide'], motion_prob['slide_fast'])))

    # Weight vector
    weight_vector = np.hstack((weights['tap'], weights['squeeze'], weights['thermal_hold'],weights['slide'], weights['slide_fast']))

    return (motion_vector, train_labels, object_ids, weight_vector)
def train_weak_classifier_adjective(train_feature_objects, adjective, feature_dictionary):
    '''
    takes in a dictionary of all features
    
    returns a dictionary of weak classifiers for each feature
    '''
    
    # specify feature to be extracted
    feature_name_list = ["pdc_rise_count", "pdc_area", "pdc_max", "pac_energy", "pac_sc", "pac_sv", "pac_ss", "pac_sk", "tac_area", "tdc_exp_fit", "gripper_min", "gripper_mean", "transform_distance", "electrode_polyfit"]

    # store weak svms
    svm_motion_store = dict()

    # store scalers
    scaler_motion_store = dict()

    # store scalers
    classifiers = dict()
    
    # for each motion (slide, squeeze, etc.)
    for motion in train_feature_objects:
        motion_train_set = train_feature_objects[motion]
        
        # pull out the features specified as a vector 
        train_feature_vector, train_label_dict = utilities.feature_obj_2_feature_vector(motion_train_set, feature_name_list)
    
        # create scaler
        scaler_motion_store[motion] = preprocessing.Scaler().fit(train_feature_vector)
        train_feature_vector_scaled = scaler_motion_store[motion].transform(train_feature_vector)
        params = {'n_estimators': 1000, 'max_depth': 4, 'min_samples_split': 1,'learn_rate': 0.01, 'loss': 'deviance'} 

        #params = {'n_estimators': 1, 'max_depth': 1, 'min_samples_split': 1,'learn_rate': 0.1, 'loss': 'deviance'} 
        clf = ensemble.GradientBoostingClassifier(**params)
        clf.fit(train_feature_vector_scaled, train_label_dict[1][adjective])
        #clf = train_gradient_boost(train_feature_vector_scaled, train_label_dict[1][adjective], train_label_dict[0])

        classifiers[motion] = clf
 
    return (classifiers, scaler_motion_store)
def test_weak_classifier_adjective(test_feature_objects, adjective, classifiers, scalers, file_ptr, comma_file_ptr):
    '''
    takes in a dictionary of all features
    
    returns a dictionary of weak classifiers for each feature
    '''
    
    # specify feature to be extracted
    feature_name_list = ["pdc_rise_count", "pdc_area", "pdc_max", "pac_energy", "pac_sc", "pac_sv", "pac_ss", "pac_sk", "tac_area", "tdc_exp_fit", "gripper_min", "gripper_mean", "transform_distance", "electrode_polyfit"]

    motion_scores = dict()
    
    # for each motion (slide, squeeze, etc.)
    for motion in test_feature_objects:
        motion_test_set = test_feature_objects[motion]
        
        # pull out the features specified as a vector 
        test_feature_vector, test_label_dict = utilities.feature_obj_2_feature_vector(motion_test_set, feature_name_list)
    
        # create scaler
        test_feature_vector_scaled = scalers[motion].transform(test_feature_vector)
      
        clf = classifiers[motion]

        results = clf.predict(test_feature_vector_scaled)

        print classification_report(test_label_dict[1][adjective], results)

        file_ptr.write('Adjective: ' + adjective + '     Motion name: '+motion)
        file_ptr.write('\n'+classification_report(test_label_dict[1][adjective], results)+ '\n\n')

        motion_scores[motion] = f1_score(test_label_dict[1][adjective], results)

    # Pull out the best motion
    best_motion, best_score = utilities.get_best_motion(motion_scores)

    # Write results to comma split file to load
    comma_file_ptr.write(adjective+','+str(motion_scores['tap'])+',' +str(motion_scores['squeeze'])+','+str(motion_scores['thermal_hold'])+','+str(motion_scores['slide'])+','+str(motion_scores['slide_fast'])+','+best_motion +'\n')
Example #9
0
def train_weak_classifier_motion(motion_train_set, adjective,
                                 feature_dictionary):
    '''
    Takes the feature_object_train_set and trains the specified
    feature.

    Will return a single trained SVM
    '''

    # Store SVM for each feature
    svm_store = dict()
    scaler_store = dict()

    import pdb
    pdb.set_trace()
    # For each feature set (pdc, pac, etc.)
    for feature in feature_dictionary:

        # Pull out the list of features
        feature_list = feature_dictionary[feature]

        # Pull out the features specified as a vector
        train_feature_vector, train_label_dict = utilities.feature_obj_2_feature_vector(
            motion_train_set, feature_list)

        # Create scaler
        scaler_store[feature] = preprocessing.Scaler().fit(
            train_feature_vector)
        train_feature_vector_scaled = scaler_store[feature].transform(
            train_feature_vector)

        # Train the SVM
        svm_store[feature] = train_svm(train_feature_vector_scaled,
                                       train_label_dict[1][adjective],
                                       train_label_dict[0])

    return (svm_store, scaler_store)
def test_adj_motion_classifier(test_feature_objects, adjective, classifiers, scalers, feature_name_list, file_ptr, comma_file_ptr):
    '''
    takes in a dictionary of all features
    
    returns a dictionary of weak classifiers for each feature
    '''


    motion_scores = dict()

    # for each motion (slide, squeeze, etc.)
    for motion in test_feature_objects:
        motion_test_set = test_feature_objects[motion]

        # pull out the features specified as a vector 
        test_feature_vector, test_label_dict = utilities.feature_obj_2_feature_vector(motion_test_set, feature_name_list)

        # create scaler
        test_feature_vector_scaled = scalers[motion].transform(test_feature_vector)

        clf = classifiers[motion]

        results = clf.predict(test_feature_vector_scaled)

        print classification_report(test_label_dict[1][adjective], results)

        file_ptr.write('Adjective: ' + adjective + '     Motion name: '+motion)
        file_ptr.write('\n'+classification_report(test_label_dict[1][adjective], results)+ '\n\n')

        motion_scores[motion] = f1_score(test_label_dict[1][adjective], results)

    # Pull out the best motion
    best_motion, best_score = utilities.get_best_motion(motion_scores)

    # Write results to comma split file to load
    comma_file_ptr.write(adjective+','+str(motion_scores['tap'])+',' +str(motion_scores['squeeze'])+','+str(motion_scores['thermal_hold'])+','+str(motion_scores['slide'])+','+str(motion_scores['slide_fast'])+','+best_motion +'\n')