大约从硕士阶段就听说过 SVM 了,但是没有真正用过,这几天刚好看了看相关的内容,就简单写一下心得,供以后查阅用。
【python|支持向量机(SVM)】支持向量机是一个二分分类方法,比较适合判断只有两个类别的分类问题,对于多类别的分类,需要对 SVM 的部分代码进行修改。
从几何意义上看,SVM 的基本思想是找到一个分类的直线(或平面,或者非线性曲线或平面),将两个类别的数据分开。
文章图片
在数学原理上,优化目标是让中间的分割线离两类数据边缘的距离最大。构建一个数学优化模型,并利用拉格朗日对偶模型求解,具体可以参考这篇博客,比英文维基百科介绍地都清楚:
https://blog.csdn.net/BIT_666/article/details/79865225
Python 中的 Sklearn 包有现成的 SVM 模型可以调用,下面的代码利用 SVM对乳腺癌判别分析,来源于 《Python 数据分析与应用》:
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVCcancer = datasets.load_breast_cancer()
cancer_data =https://www.it610.com/article/cancer['data']
cancer_target = cancer['target']cancer_data_train, cancer_data_test, cancer_target_train, \
cancer_target_test = train_test_split(cancer_data, cancer_target, test_size = 0.2)# 数据标准化
stdScaler = StandardScaler().fit(cancer_data_train)
cancer_trainStd = stdScaler.transform(cancer_data_train)
cancer_testStd = stdScaler.transform(cancer_data_test)# 建立 SVM 模型
svm = SVC().fit(cancer_trainStd, cancer_target_train)
print('建立的SVM模型为: \n', svm)# 预测训练集结果
cancer_target_pred = svm.predict(cancer_testStd)
print('预测前20个结果为:\n', cancer_target_pred[:20])# 预测和真实一样的数目
print('预测对的结果数目为:' , np.sum(cancer_target_pred == cancer_target_test))
输出结果:
建立的SVM模型为:
SVC(C=1.0, break_ties=False, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape=‘ovr’, degree=3, gamma=‘scale’, kernel=‘rbf’,
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
预测前20个结果为:
[1 1 1 0 0 1 1 0 0 0 1 1 0 1 1 0 1 0 1 1]
预测对的结果数目为: 113
推荐阅读
- 推荐系统论文进阶|CTR预估 论文精读(十一)--Deep Interest Evolution Network(DIEN)
- Python专栏|数据分析的常规流程
- Python|Win10下 Python开发环境搭建(PyCharm + Anaconda) && 环境变量配置 && 常用工具安装配置
- Python绘制小红花
- Pytorch学习|sklearn-SVM 模型保存、交叉验证与网格搜索
- OpenCV|OpenCV-Python实战(18)——深度学习简介与入门示例
- python|8. 文件系统——文件的删除、移动、复制过程以及链接文件
- 爬虫|若想拿下爬虫大单,怎能不会逆向爬虫,价值过万的逆向爬虫教程限时分享
- 分布式|《Python3网络爬虫开发实战(第二版)》内容介绍
- java|微软认真聆听了开源 .NET 开发社区的炮轰( 通过CLI 支持 Hot Reload 功能)