核支持向量机(SVM)
《Python机器学习基础教程》2.3.7 读书笔记。
虽然支持向量机可以同时用于分类和回归, 但是这里我们只介绍用于分类的情况,在SVC中实现。类似的概念也适用于支持向量回归,后者在SVR中实现。
1. 线性模型与非线性特征
线性模型在低维空间中可能非常受限,因此添加更多的特征让线性模型更加灵活。
# 加载make_blobs数据集
from sklearn.datasets import make_blobs
import mglearn
import matplotlib.pyplot as plt
X, y = make_blobs(centers=4, random_state=8)
y = y % 2 # 将y分成2类
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")
plt.show()
用于分类的线性模型只能用一条直线来划分数据点, 对这个数据无法给出较好的结果。
from sklearn.svm import LinearSVC
linear_svm = LinearSVC().fit(X, y)
mglearn.plots.plot_2d_separator(linear_svm, X)
mglearn.discrete_scatter(X[:, 0], X[:, 1], y)
plt.xlabel("Feature 0")
plt.ylabel("Feature 1")
plt.show()
现在我们对输入进行扩展,比如说添加第二个特征的平方作为一个新特征。现在我们将数据点表示为三维点,而不是二维点。
# 添加第二个特征的平方,作为一个新特征
import numpy as np
X_new = np.hstack([X, X[:, 1:] ** 2])
from mpl_toolkits.mplot3d import Axes3D, axes3d
figure = plt.figure()
# 3D可视化
ax = Axes3D(figure, elev=-152, azim=-26)
# 首先画出所有y == 0的点, 然后画出所有y =