# Fit One-vs-all Logistic Regression model = linear_model.logLinearClassifier(maxEvals=500, verbose=0) model.fit(XMulti, yMulti) print("logLinearClassifier Training error %.3f" % utils.classification_error(model.predict(XMulti), yMulti)) print("logLinearClassifier Validation error %.3f" % utils.classification_error(model.predict(XMultiValid), yMultiValid)) elif question == "3.3": # Load Binary and Multi -class data data = utils.load_dataset("multiData") XMulti, yMulti = data['X'], data['y'] XMultiValid, yMultiValid = data['Xvalid'], data['yvalid'] # Fit logRegL2 model model = linear_model.softmaxClassifier(maxEvals=500) model.fit(XMulti, yMulti) print("Training error %.3f" % utils.classification_error(model.predict(XMulti), yMulti)) print("Validation error %.3f" % utils.classification_error(model.predict(XMultiValid), yMultiValid)) elif question == "3.4": data = utils.load_dataset("multiData") XMulti, yMulti = data['X'], data['y'] XMultiValid, yMultiValid = data['Xvalid'], data['yvalid'] ovr = LogisticRegression(C=1e8, fit_intercept=False) sft = LogisticRegression(multi_class="multinomial", solver="lbfgs", C=1e8, fit_intercept=False) ovr.fit(XMulti, yMulti) print("Training error %.3f" % utils.classification_error(ovr.predict(XMulti), yMulti))
model = linear_model.logLinearClassifier(maxEvals=500, verbose=0) model.fit(XMulti, yMulti) print("logLinearClassifier Training error %.3f" % utils.classification_error(model.predict(XMulti), yMulti)) print("logLinearClassifier Validation error %.3f" % utils.classification_error(model.predict(XMultiValid), yMultiValid)) elif question == "3.3": data = utils.load_dataset("multiData") XMulti, yMulti = data['X'], data['y'] XMultiValid, yMultiValid = data['Xvalid'], data['yvalid'] model = linear_model.softmaxClassifier(maxEvals=500, verbose=0) model.fit(XMulti, yMulti) print("Training error %.3f" % utils.classification_error(model.predict(XMulti), yMulti)) print("Validation error %.3f" % utils.classification_error( model.predict(XMultiValid), yMultiValid)) elif question == "3.4": data = utils.load_dataset("multiData") XMulti, yMulti = data['X'], data['y'] XMultiValid, yMultiValid = data['Xvalid'], data['yvalid'] # One-vs-all model = LogisticRegression(multi_class='ovr', fit_intercept=False,
binarizer = LabelBinarizer() Y = binarizer.fit_transform(y) y_int = np.int32(y) lams = [2, 1.75, 1.5, 1.25, 1] test_error = [] train_error = [] train_bias = np.ones((X.shape[0], 1)) test_bias = np.ones((Xtest.shape[0], 1)) X = np.hstack((train_bias, X)) Xtest = np.hstack((test_bias, Xtest)) for lammy in lams: model = linear_model.softmaxClassifier(lammy=lammy, epochs=10, alpha=1, batch=5000) model.fit(X, y, Y) pred = model.predict(Xtest) e = utils.classification_error(ytest, pred) print("at lambda ", lammy, "validation error is ", e) test_error = np.append(test_error, e) pred = model.predict(X) e = utils.classification_error(y, pred) print("at lambda ", lammy, "train error is ", e) train_error = np.append(train_error, e) plt.plot(lams, test_error, label="validation error") plt.plot(lams, train_error, label="training error") plt.title("Multi-Class Linear Classifier") plt.xlabel("Lambda") plt.ylabel("Error")
print("Test error = {:.4f}".format(testErr)) print('Time taken: ', time.time() - t) elif question == "knn": # mostly hyperparameter tuning, 10 seems to be the sweet spot t = time.time() model = KNN(3) model.fit(X, y) yhat = model.predict(Xtest) testErr = np.mean(ytest != yhat) print('Test error = {:.4f}'.format(testErr)) print('Time taken: ', time.time() - t) elif question == "reg": t = time.time() model = softmaxClassifier(maxEvals=100) # r = np.random.randint(5, size=np.shape(X)[0]) # Xt = X[r == 0] # yt = y[r == 0] # model.fit(Xt,yt) model.fit(X, y) yhat = model.predict(Xtest) print(Xtest) testErr = np.mean(ytest != yhat) print("yhat: ", yhat) print('Test error = {:.4f}'.format(testErr)) print('Time taken: ', time.time() - t)