Python机器学习11——支持向量机
本系列所有的代码和数据都可以从陈强老师的个人主页上下载:Python数据程序
参考书目:陈强.机器学习及Python应用. 北京:高等教育出版社, 2021.
本系列基本不讲数学原理,只从代码角度去让读者们利用最简洁的Python代码实现机器学习方法。
前面的决策树,随机森林,梯度提升都是属于树模型,而支持向量机被称为核方法。其主要是依赖核函数将数据映射到高维空间进行分离。支持向量机适合用于变量越多越好的问题,因此在神经网络之前,它对于文本和图片领域都算效果还不错的方法。学术界偏爱支持向量机是因为它具有非常严格和漂亮的数学证明过程。支持向量机可以分类也可以回归,但一般用于分类问题更好。
支持向量机二分类Python案例
采用垃圾邮件的数据集,导入包读取数据:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold, StratifiedKFold
from sklearn.model_selection import GridSearchCV
from sklearn.metrics import plot_confusion_matrixfrom sklearn.svm import SVC
from sklearn.svm import SVR
#from sklearn.svm import LinearSVC
from sklearn.datasets import load_boston
from sklearn.datasets import load_digits
from sklearn.datasets import make_blobs
from mlxtend.plotting import plot_decision_regionsspam = pd.read_csv('spam.csv')
spam.shape
spam.head(3)
数据长这样
取出X和y,划分训练测试集,将数据标准化
X = spam.iloc[:, :-1]
y = spam.iloc[:, -1]
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=1000, stratify=y, random_state=0)scaler = StandardScaler()
scaler.fit(X_train)
X_train_s = scaler.transform(X_train)
X_test_s = scaler.transform(X_test)
分别采用不同的核函数进行支持向量机的估计
#线性核函数
model = SVC(kernel="linear", random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
#二次多项式核
model = SVC(kernel="poly", degree=2, random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
#三次多项式
model = SVC(kernel="poly", degree=3, random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
#径向核
model = SVC(kernel="rbf", random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
#S核
model = SVC(kernel="sigmoid",random_state=123)
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)
一般来说,径向核效果比较好,网格化搜索最优超参数
param_grid = {'C': [0.1, 1, 10], 'gamma': [0.01, 0.1, 1]}
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=1)
model = GridSearchCV(SVC(kernel="rbf", random_state=123), param_grid, cv=kfold)
model.fit(X_train_s, y_train)model.best_params_model.score(X_test_s, y_test)pred = model.predict(X_test)
pd.crosstab(y_test, pred, rownames=['Actual'], colnames=['Predicted'])
预测得到混淆矩阵
支持向量机多分类Python案例
使用sklearn库自带的手写数字的案例,采用支持向量机分类
digits = load_digits()
dir(digits)
#图片数据(三维)
digits.images.shape
#拉成二维
digits.data.shape
#y的形状
digits.target.shape
#查看第十五个图片
plt.imshow(digits.images[15], cmap=plt.cm.gray_r)
是个手写的5
打印数字为8 的图片展示
images_8 = digits.images[digits.target==8]for i in range(1, 10):plt.subplot(3, 3, i)plt.imshow(images_8[i-1], cmap=plt.cm.gray_r)
plt.tight_layout()
取出X和y,进行支持向量机分类
X = digits.data
y = digits.target
X_train, X_test, y_train, y_test = train_test_split(X, y, stratify=y, test_size=0.2, random_state=0)model = SVC(kernel="linear", random_state=123)
model.fit(X_train, y_train)
model.score(X_test, y_test)model = SVC(kernel="poly", degree=2, random_state=123)
model.fit(X_train, y_train)
model.score(X_test, y_test)model = SVC(kernel="poly", degree=3, random_state=123)
model.fit(X_train, y_train)
model.score(X_test, y_test)model = SVC(kernel='rbf', random_state=123)
model.fit(X_train, y_train)
model.score(X_test, y_test)model = SVC(kernel="sigmoid",random_state=123)
model.fit(X_train, y_train)
model.score(X_test, y_test)
网格化搜索最优超参数,预测得到混淆矩阵
param_grid = {'C': [0.001, 0.01, 0.1, 1, 10], 'gamma': [0.001, 0.01, 0.1, 1, 10]}
kfold = StratifiedKFold(n_splits=10, shuffle=True, random_state=1)
model = GridSearchCV(SVC(kernel='rbf',random_state=123), param_grid, cv=kfold)
model.fit(X_train, y_train)model.best_params_model.score(X_test, y_test)pred = model.predict(X_test)
pd.crosstab(y_test, pred, rownames=['Actual'], colnames=['Predicted'])
画热力图
plot_confusion_matrix(model, X_test, y_test,cmap='Blues')
plt.tight_layout()
支持向量机回归Python案例
依旧采用波士顿房价数据集进行回归
# Support Vector Regression with Boston Housing Data
X, y = load_boston(return_X_y=True)
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)scaler = StandardScaler()
scaler.fit(X_train)
X_train_s = scaler.transform(X_train)
X_test_s = scaler.transform(X_test)# Radial Kernelmodel = SVR(kernel='rbf')
model.fit(X_train_s, y_train)
model.score(X_test_s, y_test)param_grid = {'C': [0.01, 0.1, 1, 10, 50, 100, 150], 'epsilon': [0.01, 0.1, 1, 10], 'gamma': [0.01, 0.1, 1, 10]}
kfold = KFold(n_splits=10, shuffle=True, random_state=1)model = GridSearchCV(SVR(), param_grid, cv=kfold)
model.fit(X_train_s, y_train)model.best_params_
model = model.best_estimator_
len(model.support_)model.support_vectors_model.score(X_test_s, y_test)# Comparison with Linear Regression
from sklearn.linear_model import LinearRegression
model = LinearRegression()
model.fit(X_train, y_train)
model.score(X_test, y_test)
Python机器学习11——支持向量机相关推荐
- python机器学习案例-支持向量机建模及评估(完整代码+实现效果)
实现功能: python机器学习案例-支持向量机建模及评估. 实现代码: # 导入需要的库 from warnings import simplefilter simplefilter(action= ...
- Python 机器学习/深度学习/算法专栏 - 导读目录
目录 一.简介 二.机器学习 三.深度学习 四.数据结构与算法 五.日常工具 一.简介 Python 机器学习.深度学习.算法主要是博主从研究生到工作期间接触的一些机器学习.深度学习以及一些算法的实现 ...
- python机器学习——支持向量机回归与波士顿房价案例
支持向量机回归与波士顿房价案例 一.从传统回归模型到支持向量回归模型 二.核函数 三.常用的几种核函数 四.SVM 算法的优缺点 五.建模实例 (1)导入数据 (2)划分训练集测试集 (3)数据标准化 ...
- SVM 支持向量机算法(Support Vector Machine )【Python机器学习系列(十四)】
SVM 支持向量机算法(Support Vector Machine )[Python机器学习系列(十四)] 文章目录 1.SVM简介 2. SVM 逻辑推导 2.1 Part1 化简限制条件 2.2 ...
- 入行AI,你需要一本Python机器学习入门
目前机器学习红遍全球.男女老少都在学机器学习模型,分类器,神经网络和吴恩达.你也想成为一份子,但你该如何开始? 今天小编推荐这本<Python机器学习>教你快速入门. 01什么是机 ...
- Python机器学习笔记:sklearn库的学习
自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了,scikit-learn简称sklearn,支持包括分类,回归,降维和聚类四大机器学习算法.还包括了特征提取,数据 ...
- 入行AI,你需要一本Python机器学习入门,赶紧收藏!
目前 机器学习 红遍全球.男女老少都在学机器学习模型,分类器,神经网络和吴恩达.你也想成为一份子,但你该如何开始? 1.什么是机器学习? 从出生的那天起,我们就一直在学习中度过.随着逐渐的成长,开始学 ...
- 机器算法有哪几种 python_8种顶级Python机器学习算法-你必须学习
今天,我们将更深入地学习和实现8个顶级Python机器学习算法. 让我们开始Python编程中的机器学习算法之旅. 8 Python机器学习算法 - 你必须学习 以下是Python机器学习的算法: 1 ...
- Python机器学习方向企业面试题(三)
到这我们已经分享第三期Python机器学习方向的面试题了,是不是感觉前两期的面试题非常有用呢?最后一期20道题送给大家. 1.人工智能与机器学习的区别? 基于经验数据的特性而设计和开发的算法被称为机器 ...
最新文章
- 文件目录Android SDK目录结构
- SRM遇到的一个数论技巧——最大公约数和最小公倍数的关系
- python做运动控制_ROS探索总结-61.MoveIt!编程驾驭机械臂运动控制
- loadrunner脚本运行时设置:Run Logic设置运行次数
- Android之基于xmpp openfire smack开发之Android消息推送技术原理分析和实践[4]
- mysql dodba_doDBA
- iOS-启动动态页跳过设计思路
- 安装jdk配置环境变量JAVA_HOME不起作用
- Java Spring-Bean
- 永久免费内网穿透,使用超简单的方式搭建,内含核心打洞代码
- linux设置法语键盘布局,法语键盘布局图
- 必应(Bing)的站内搜索 site:<域名> <搜索内容>
- 公众号网站——微信登录
- linux卷空间不足问题 gparted工具重新分配根分区空间
- [代码人生][分享]SQl语句学习专题
- TypeScript-基础类型学习
- [JS]JavaScript基础学习笔记(黑马pink+尚硅谷李立超)
- 【Discuz】原系统进入论坛自动注册并进行登录
- 小孩子mysql_mysql查询,救救孩子
- 数字调制系列:IQ调制基本理论
热门文章
- H.264视频编解码的FPGA源码分析(一)输入数据分析
- ffmpeg 音频重采样
- 【转】不需要 Root,也能用上强大的 Xposed 框架:VirtualXposed
- Ubuntu下Anaconda创建环境及环境配置
- Matlab拆分矩阵/Matlab如何分割大矩阵(mat2cell函数)
- 期货价格怎么算出来的?
- python 一球从100m高度落下,一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?Python实例...
- 新创操作系统上的有什么蒙文Office?
- pdc 半圆_PDC。 我已经准备好进行革命了。 打动我。 把我吹走
- 使用python生成颜色表(color chart)