Step By Step
1、支持向量机算法基本原理
2、iris和mnist数据集测试
3、算法有点和缺点
一、支持向量机算法基本原理
- 在机器学习中,支持向量机(SVM)是具有相关学习算法的监督学习模型,其分析用于分类和回归分析的数据。给定一组训练示例,每个示例标记为属于两个类别中的一个或另一个,SVM训练算法构建一个模型,将新示例分配给一个类别或另一个类别,使其成为非概率二元线性分类器。SVM模型是将示例表示为空间中的点,映射使得单独类别的示例除以尽可能宽的明确间隙。然后将新的示例映射到同一空间,并根据它们落在哪个边缘预测属于一个类别。
- 除了执行线性分类之外,SVM还可以使用所谓的内核技巧有效地执行非线性分类,将其输入隐式映射到高维特征空间。
二、iris和mnist数据集测试
- 2.1 mnist 数据集测试
# Import datasets, classifiers and performance metrics
from sklearn import datasets, svm, metrics
from sklearn.model_selection import train_test_split
digits = datasets.load_digits()
# 处理图片数据
n_samples = len(digits.images)
print(n_samples)
data = digits.images.reshape((n_samples, -1))
# 设置分类器和核函数
clf = svm.SVC(gamma=0.001,kernel = 'rbf')
# 拆分训练接和测试集 7:3
X_train, X_test, y_train, y_test = train_test_split(
data, digits.target, test_size=0.3, shuffle=False
)
clf.fit(X_train, y_train)
print(clf.score(X_test, y_test))
测试结果
1797
0.9703703703703703
- 2.2 iris数据集测试
from sklearn import svm
from sklearn import datasets
from sklearn.model_selection import train_test_split
# 获取数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target
# 切分训练&测试数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)
# 使用不同的核函数
# kernel = 'rbf'
clf_rbf = svm.SVC(kernel='rbf')
# kernel = 'linear'
clf_linear = svm.SVC(kernel='linear')
# kernel = 'poly'
clf_poly = svm.SVC(kernel='poly')
for model in [clf_rbf,clf_linear,clf_poly]:
model.fit(X_train,y_train)
score = model.score(X_test, y_test)
print("The score is : %f" % score)
测试结果
The score is : 0.920000
The score is : 0.960000
The score is : 0.946667
三、算法有点和缺点
优点
- 可以解决高维问题,即大型特征空间;
- 解决小样本下机器学习问题;
- 能够处理非线性特征的相互作用;
- 无局部极小值问题;(相对于神经网络等算法)
- 无需依赖整个数据;
- 泛化能力比较强;
缺点
- 当观测样本很多时,效率并不是很高;
- 对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数;
- 对于核函数的高维映射解释力不强,尤其是径向基函数;
- 常规SVM只支持二分类;
- 对缺失数据敏感;