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_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')
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_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')
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')