def test_n_slack_svm_as_crf_pickling(): iris = load_iris() X, y = iris.data, iris.target X_ = [(np.atleast_2d(x), np.empty((0, 2), dtype=np.int)) for x in X] Y = y.reshape(-1, 1) X_train, X_test, y_train, y_test = train_test_split(X_, Y, random_state=1) _, file_name = mkstemp() pbl = GraphCRF(n_features=4, n_states=3, inference_method='lp') logger = SaveLogger(file_name, verbose=1) svm = StructuredSVM(pbl, verbose=0, C=100, n_jobs=1, logger=logger) svm.fit(X_train, y_train) assert_less(.97, svm.score(X_test, y_test)) assert_less(.97, logger.load().score(X_test, y_test))
# list X_ = [(np.atleast_2d(x), np.empty((0, 2), dtype=np.int)) for x in X] Y = y.reshape(-1, 1) X_train_, X_test_, X_train, X_test, y_train, y_test, y_org_train, y_org_test =\ train_test_split(X_, X, Y, y_org, test_size=.5) # first, do it with a standard CRF / SVM pbl = GraphCRF(n_features=64, n_states=2, inference_method='lp') svm = StructuredSVM(pbl, verbose=1, check_constraints=True, C=1000, n_jobs=1, batch_size=-1) svm.fit(X_train_, y_train) y_pred = np.vstack(svm.predict(X_test_)) print("Score with pystruct crf svm: %f" % np.mean(y_pred == y_test)) print(svm.score(X_train_, y_train)) print(svm.score(X_test_, y_test)) # now with latent CRF SVM latent_pbl = LatentGraphCRF(n_features=64, n_labels=2, n_states_per_label=5, inference_method='dai') latent_svm = LatentSubgradientSSVM(model=latent_pbl, max_iter=5000, C=1, verbose=2, n_jobs=1, learning_rate=0.1, show_loss_every=10, momentum=0.0, decay_exponent=0.5) #latent_svm = LatentSSVM(latent_pbl, verbose=2, check_constraints=True, C=100, #n_jobs=1, batch_size=-1, tol=.1, latent_iter=2) latent_svm.fit(X_train_, y_train) print(latent_svm.score(X_train_, y_train)) print(latent_svm.score(X_test_, y_test))
Y_flat = [y.ravel() for y in Y] # first, use standard graph CRF. Can't do much, high loss. crf = GraphCRF(n_states=2, n_features=1, inference_method='lp') svm = StructuredSVM(model=crf, max_iter=200, C=1, verbose=0, check_constraints=True, break_on_bad=False, n_jobs=1) # make dataset from X and graph without edges #G_ = [np.zeros((0, 2), dtype=np.int) for x in X] G = [make_grid_edges(x) for x in X] asdf = zip(X_flat, G) svm.fit(asdf, Y_flat) plot_boxes(svm.predict(asdf)) print("Training score multiclass svm CRF: %f" % svm.score(asdf, Y_flat)) # using one latent variable for each 2x2 rectangle latent_crf = LatentNodeCRF(n_labels=2, n_features=1, inference_method='lp', n_hidden_states=2) #latent_svm = LatentSSVM(model=latent_crf, max_iter=200, C=10, verbose=10, #check_constraints=True, break_on_bad=True, n_jobs=1, #latent_iter=10, base_svm='subgradient', tol=-1, #inactive_window=0, learning_rate=0.01, momentum=0) latent_svm = LatentSubgradientSSVM(model=latent_crf, max_iter=200, C=100, verbose=1, n_jobs=1, show_loss_every=10, learning_rate=0.01, momentum=0) # make edges for hidden states: edges = [] node_indices = np.arange(4 * 4).reshape(4, 4)