Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
probml
GitHub Repository: probml/pyprobml
Path: blob/master/notebooks/book1/17/svm_regression_1d.ipynb
1192 views
Kernel: Unknown Kernel
# SVM for regression in 1d # Code is based on # https://github.com/ageron/handson-ml2/blob/master/05_support_vector_machines.ipynb import numpy as np import matplotlib.pyplot as plt try: from sklearn.pipeline import Pipeline except ModuleNotFoundError: %pip install -qq scikit-learn from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures from sklearn.preprocessing import StandardScaler from sklearn.svm import LinearSVR from sklearn.svm import SVR def plot_svm_regression(svm_reg, X, y, axes): x1s = np.linspace(axes[0], axes[1], 100).reshape(100, 1) y_pred = svm_reg.predict(x1s) plt.plot(x1s, y_pred, "k-", linewidth=2, label=r"$\hat{y}$") plt.plot(x1s, y_pred + svm_reg.epsilon, "k--") plt.plot(x1s, y_pred - svm_reg.epsilon, "k--") plt.scatter(X[svm_reg.support_], y[svm_reg.support_], s=180, facecolors="#FFAAAA") plt.plot(X, y, "bo") plt.xlabel(r"$x_1$", fontsize=18) # plt.legend(loc="upper left", fontsize=18) plt.axis(axes) np.random.seed(42) m = 100 X = 2 * np.random.rand(m, 1) - 1 # y = (0.2 + 0.1 * X + 0.5 * X**2 + np.random.randn(m, 1)/10).ravel() y = (0.2 + 0.1 * X + 0.5 * X**2 + 0.1 * X**3 + np.random.randn(m, 1) / 10).ravel() epsilons = [0.1, 0.05] eps_names = ["0p1", "0p05"] for i, eps in enumerate(epsilons): # svm_poly_reg1 = SVR(kernel="poly", degree=5, C=1e3, epsilon=eps, gamma="scale") # svm_poly_reg2 = SVR(kernel="poly", degree=5, C=1e-3, epsilon=eps, gamma="scale") svm_reg1 = SVR(kernel="rbf", gamma=1, C=100, epsilon=eps) svm_reg2 = SVR(kernel="rbf", gamma=1, C=0.01, epsilon=eps) svm_reg1.fit(X, y) svm_reg2.fit(X, y) fig, axes = plt.subplots(ncols=2, figsize=(9, 4), sharey=True) plt.sca(axes[0]) plot_svm_regression(svm_reg1, X, y, [-1, 1, 0, 1]) plt.title(r"$C={}, \epsilon = {}$".format(svm_reg1.C, svm_reg1.epsilon), fontsize=18) plt.ylabel(r"$y$", fontsize=18, rotation=0) plt.sca(axes[1]) plot_svm_regression(svm_reg2, X, y, [-1, 1, 0, 1]) plt.title(r"$C={}, \epsilon = {}$".format(svm_reg2.C, svm_reg2.epsilon), fontsize=18) fname = "figures/svm_regression_e{}.pdf".format(eps_names[i]) plt.savefig(fname, dpi=300) plt.show()