上一篇文章记录的是学习逻辑回归的心得体会。
下面就该讲svm(支持向量机)啦,虽然据某个老师给我讲的是svm现在基本上公司里面不怎么用了,但是我最近的项目论文中需要这个模型,所以还是简单了解一下其原理。
1.svm原理
点进官网,里面是这样介绍的支持向量机。
http://sklearn.apachecn.org/cn/0.19.0/modules/svm.html#svm
而这个答者的回答非常清晰明了。https://zhuanlan.zhihu.com/p/31886934
他分别从:
SVM简介
线性SVM算法原理
非线性SVM算法原理
来介绍了支持向量机。但是线性还是非线性其实都不重要,重要的是理解大体的思路。我把我看懂了并且会应用的部分贴上来,在我的项目中我是使用支持向量机分类的。
支持向量机 (SVMs) 可用于以下监督学习算法 分类, 回归 和 异常检测.
支持向量机的优势在于:
- 在高维空间中非常高效.
- 即使在数据维度比样本数量大的情况下仍然有效.
- 在决策函数(称为支持向量)中使用训练集的子集,因此它也是高效利用内存的.
- 通用性: 不同的核函数 核函数 与特定的决策函数一一对应.常见的 kernel 已
经提供,也可以指定定制的内核.
支持向量机的缺点包括:
- 如果特征数量比样本数量大得多,在选择核函数 核函数 时要避免过拟合,
而且正则化项是非常重要的.
- 支持向量机不直接提供概率估计,这些都是使用昂贵的五次交叉验算计算的. (详情见 Scores and probabilities, 在下文中).
SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。如下图所示, 即为分离超平面,对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。
说人话就是:SVM学习的基本想法是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。就是数据离某个平面的距离要最大,但是在这个最大范围内,可以把不同类的数据分割。
2.svm用法
用法其实很简单的几句话就能搞定啦~详情看官方文档,svm库中有非常多用法,我使用的是svm.SVC,例子如下:
from sklearn.svm import SVC
#加载数据 在这个练习中我们自己生成数据
x,y = make_classification(n_samples=300,n_features=2,
n_redundant=0,n_informative=2,
random_state=22,
n_clusters_per_class=1,scale=100
)
#300个data,两个比较相关的feature,random_state=22意味着每次产生的数都是一样的。
#分割测试集与训练集
x_train,x_test,y_train,y_test = train_test_split(x,y,
test_size=0.3,
random_state=0)
clf = SVC()#参数未设置,这个参数选择可以根据实验需求来调整优化
clf.fit(x_train,y_train)
print(clf.score(x_test,y_test))
下图是官方文档中的svm的用法与提示。我把我觉得重要的放上来先~
SVM的简单了解就到这里,下一篇文章会记录KNN。