def indicatorize_class(y): assert(mathutil.is_np_col_vector(y)) y -= 1 num_samples = np.size(y) y_classes = np.unique(y).reshape((-1)) min_class_num = np.min(y_classes) max_class_num = np.max(y_classes) assert(min_class_num>=0) class_indicator_y = np.zeros((num_samples, max_class_num+1), dtype=np.float64) class_indicator_y[np.arange(0, num_samples), y[:,-1]] = 1.0 return class_indicator_y
def train_one_vs_all_classifier(aug_x, y, num_labels, lagrange_lambda): n_samples, n_features = aug_x.shape all_theta = np.empty((num_labels, n_features), dtype=np.float64) assert(mathutil.is_np_col_vector(y)) y_arr = np.reshape(y, -1) for label in range(0, num_labels): y_label_indicator = np.zeros_like(y_arr) assert(np.any(y==label)) y_label_indicator[y_arr==label] = 1 all_theta[label, :] = train_logistic_regression(aug_x, y_label_indicator.astype(np.float64), lagrange_lambda) return all_theta