Part5__机器学习实战学习笔记__支持向量机

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只支持二分类;
  • 对缺失数据敏感;

更多参考

支持向量机 – Support Vector Machine | SVM

上一篇:【万里征程——Windows App开发】文件&数据——写入与读取


下一篇:Linux Shell 基础--更多的结构化命令