[机器学习与scikit-learn-35]:算法-分类-支持向量机-线性分类代码示例

2023-11-18

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123800789


目录

前言:

第1步骤:导入库

第2步骤:导入数据集并可视化

 第3步骤:数据的预处理

第4步骤:建模模型并训练模型

第5步骤:可视化模型预测效果


前言:

本章通过代码演示支持向量机SVM实现线性分类,并调整不同的超参数,来观察对算法效果的影响。

第1步骤:导入库

import numpy as np
import matplotlib.pyplot as plt

第2步骤:导入数据集并可视化

from sklearn import datasets

iris = datasets.load_iris()

X = iris.data
y = iris.target
print("原始数据集特征数据形状", X.shape)
print("原始数据集标签数据形状", y.shape)

# 只截取标签为0和1的分类
# 且只截取第0和第1特特征值,即二维特征值
X = X[y<2, :2]
y = y[y<2]
print("截取数据集特征数据形状", X.shape)
print("截取数据集标签数据形状", y.shape)
# 只有100个样本符合要求,且样本数据从4特征降低到2个特征

#可视化数据集
# X二维矩阵=> 取值方法 x = X[行号,列号]
# X二维矩阵=> 取值方法 x = X[100, 2]
# 红色显示标签值等于0的数据
# 蓝色显示标志值等于1的数据
#                  X                 Y
### X:【标签值等于0的哪些行, 第0号特质值】
### Y:【标签值等于1的哪些行, 第1号特质值】

print(X[0])
plt.scatter(X[y==0,0], X[y==0,1], color = 'red')
plt.scatter(X[y==1,0], X[y==1,1], color = 'blue')
plt.show()
原始数据集特征数据形状 (150, 4)
原始数据集标签数据形状 (150,)
截取数据集特征数据形状 (100, 2)
截取数据集标签数据形状 (100,)
[5.1 3.5]

 第3步骤:数据的预处理

# 数据预处理
from sklearn.preprocessing import StandardScaler
print("转换前=", X[0])
standardScaler = StandardScaler()
# 用数据预处理拟合样本数据,实际上是计算样本数据的参数。
standardScaler.fit(X)
# 用模型对样本数据进行格式的转换
X_standard = standardScaler.transform(X)
print("转换后=", X_standard[0])

print(X_standard[0])
plt.scatter(X_standard[y==0,0], X_standard[y==0,1], color = 'red')
plt.scatter(X_standard[y==1,0], X_standard[y==1,1], color = 'blue')
plt.show()

#数据的分布没有变化,数据的数值范围发生了变化
转换前= [5.1 3.5]
转换后= [-0.5810659   0.84183714]
[-0.5810659   0.84183714]

第4步骤:建模模型并训练模型

# 定义线性模型
from sklearn.svm import LinearSVC

# 核心代码
# C参数影响拟合图形,可以通过调整C参数完成对模型的调控
# C越大,容错能力越弱, C越小,容错能力越弱
# C= 10: 隔离带无数据
# C= 1:  少量边界点数据
# C= 0.1:一半的数据在隔离带内
# C = 0.01:全部的数据在隔离带内

C = 0.1  # 10, 1, 0.1
svc = LinearSVC(C=C)
svc.fit(X_standard,y)

# 直线方程:w1x1 + w2x2 + b = 0
w = svc.coef_
b = svc.intercept_
print("w=",w)
print("b=",b)

# 用训练好的模型进行预测
y_predict = svc.predict([[0.2, 0.8]])
print("y_predict=", y_predict)
y_predict = svc.predict([[0.8, 0.2]])
print("y_predict=", y_predict)
w= [[ 0.89242526 -0.74178154]] 
b= [0.09160424]
y_predict= [0]
y_predict= [1]

第5步骤:可视化模型预测效果

def plot_svc_boundary(model, axis):
    # 在X轴上取100点
    x_line = np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100))
    # 在Y轴上取100点
    y_line = np.linspace(axis[0], axis[1], int((axis[3]-axis[2])*100))
    # 用x_line,y_line构建网格点向量
    x0, x1 = np.meshgrid(x_line, y_line)
    # 构建网格向量X
    X_new = np.c_[x0.ravel(), x1.ravel()]
    # 对网格平面上的所有点进行预测,输出各自的类别0或1
    
    y_predict = model.predict(X_new)
    print("y_predict.shape",y_predict.shape);
    zz = y_predict.reshape(x0.shape)
    print("zz.shape",zz.shape);
    
    # 彩色可视化
    from matplotlib.colors import ListedColormap
    custom_cmap = ListedColormap(['#EE9A9A', '#FFF59D','#90CAF9'])
    plt.contourf(x0, x1, zz, cmap=custom_cmap)
    
    w =  model.coef_[0]
    b =  model.intercept_[0]
    # w0 * x0 + w1 * x1 + b => x1 = -w0/w1 * x0 - b/w1
    plot_x = np.linspace(axis[0], axis[1], 200)
    up_y = -w[0]/w[1] * plot_x - b/w[1] + 1/w[1]
    dw_y = -w[0]/w[1] * plot_x - b/w[1] - 1/w[1]
    
    up_index = (up_y >=axis[2]) & (up_y <= axis[3])
    dw_index = (dw_y >=axis[2]) & (dw_y <= axis[3])
    plt.plot(plot_x[up_index], up_y[up_index], color="black")
    plt.plot(plot_x[dw_index], dw_y[dw_index], color="black")
# 根据可视化后的结果可以看出,原始数据normalization之后的数据,落在【-3,+3】之间
# 因此设置坐标值的范围如下:
xy = [-3, 3, -3, 3] 
plot_svc_boundary(svc, axis=xy)

plt.scatter(X_standard[y==0,0], X_standard[y==0,1], color = 'red')
plt.scatter(X_standard[y==1,0], X_standard[y==1,1], color = 'blue')
plt.show()
y_predict.shape (360000,)
zz.shape (600, 600)

(1)C = 10时

(2)C = 1时

(3)C =0.1时


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/123800789

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[机器学习与scikit-learn-35]:算法-分类-支持向量机-线性分类代码示例 的相关文章

随机推荐

  • Cocos2d-x 3.9教程:10.使用CocosStudio的UI编辑器从UI文件中加载布局和控件

    Cocos2d x 3 9教程 10 使用CocosStudio的UI编辑器从UI文件中加载布局和控件 1 1 使用CocosStudio的UI编辑器 1 1 1 安装和启动 从官网上下载2015年11月18日版本 Cocos studio
  • 谷歌浏览器输入url地址后http自动转https问题解决方法

    谷歌浏览器输入 http 域名 后自动变成 https 域名 格式原因 安装配置了 SSL证书后 浏览器开启了 HSTS HTTP Strict Transport Security 功能 它会告诉浏览器只能通过 https 访问 绝对禁止
  • Dagger2的使用以及原理分析

    使用 Dagger2的使用说起来并不难 关键在于要掌握Dagger2的提供的几个注解及其意思 环境搭建 在模块级的build gradle文件中加入如下依赖 plugins id com android application id org
  • C++:基于浅拷贝/深拷贝对模拟string类的一些优化

    文章目录 string类和日期类 浅拷贝 深拷贝 对于上述代码的深拷贝写法 正常版本和优化版本 写时拷贝 string类和日期类 前面我们已经实现了string类和日期类 这两个类有没有想过它们有什么不同 其实答案很明显 不同的地方在于st
  • vue history模式刷新页面进入404解决方案

    前言 vue 的路由模式严格意义上来讲有三种 但是常见的hash模式和history模式 1 默认的路由模式 2 hash模式 就是连接后边会跟 号 3 history模式 history模式的详细配置请移步官方文档vue路由history
  • PLL时钟约束

    方法 1 自动创建基时钟和 PLL 输出时钟 例 derive pll clocks 这一方法使您能够自动地约束 PLL 的输入和输出时钟 ALTPLL megafunction 中指定的 所有 PLL 参数都用于约束 PLL 的输入和输出
  • 安恒10月夺旗赛

    概述 昨天参加的比赛 这个比赛是信安之路微信公众号和安恒合作的一个比赛 是个人赛 作为一个大一的嫩鸡 还是搞web的 对于re和pwn毫无办法 所以昨天最终的结果是这样的 过程 这一次部分题需要用VPN内网访问 但是不知道为什么刚开始的时候
  • Verilog HDL 语言笔记

    目录 一 基本语法 1 模块的结构 1 模块声明 2 端口定义 3 数据类型说明 4 逻辑功能描述 2 语言要素及数据类型 2 1语言要素 2 2 常量 2 3 变量和数据类型 2 4 参数 2 5 向量 2 6 存储器 2 7 运算符 3
  • phpstorm定位错误代码

    phpstorm可以智能的帮你发现错误 例如你在文件中有一处语法错误 它会自动帮你标红 但当你打开这个文件 想找到具体错误代码在哪一行 你需要一行一行的浏览 而且错误标记不是很明显 这样太痛苦了 解决方法 点击Next Highlighte
  • ios抓包工具stream抓包教程

    ios抓包工具stream抓包教程 1 首先在应用商店搜索并下载stream 2 安装后打开app 3 准备安装证书 4 选择安装证书 允许应用添加vpn配置 5 这时app会自动跳转至浏览器下载证书文件 允许即可 6 下载完成后在描述与文
  • 为不同的调制方案设计一个单载波系统(映射器-信道-去映射器)(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Matlab代码实现 1 概述 本代码为不同的调制方案 BPSK QPSK
  • cadence allegro 学习记录(一)

    1 主题颜色设置 Options Preference Applications Theme 在Schematic Theme 原理图的主题颜色中修改 2 原理图格点设置 Options Preference Grid Display 左侧
  • java入门基础知识(第一课)初识Java!!!

    硬件 硬盘 计算机永久存储数据的载体 所有计算机所要使用的信息都存储在这里 内存 计算机暂时存储数据的载体 主要负责将数据从硬盘中传输到CPU中 平衡速率差 CPU 计算机的核心 大脑 主要处理单元 所有的信息都由CPU进行运算得出结果 软
  • MySQL常见报错

    1 授权错误 更改root密码 ALTER USER root IDENTIFIED WITH mysql native password BY 123456 2 Can t open file xxx forums MYI errno 1
  • 大页内存原理及使用设置

    内存分页大小对性能的提升原理 首先 我们需要回顾一小部分计算机组成原理 这对理解大内存分页至于JVM性能的提升是有好处的 什么是内存分页 我们知道 CPU是通过寻址来访问内存的 32位CPU的寻址宽度是 0 0xFFFFFFFF 计算后得到
  • Android牛人启航博客地址

    http blog csdn net harvic880925 article category 1707319
  • (2023)Linux安装pytorch并使用pycharm远程编译运行

    2023 Linux安装pytorch并使用pycharm远程编译运行 安装miniconda 这部分参考我这篇博客的前半部分Linux服务器上通过miniconda安装R 2022 miniconda 安装r Dream of Grass
  • 服务器硬盘sas速度多少,服务器硬盘SAS接口和SATA接口哪个速度快,它们分别有什么优缺点?...

    SATA 串行ATA总线 SAS 希捷研究出来的取代SCSI技术的接口 目前SCSI是最高级的硬盘 SAS没有大量上市 同ATA一样 SCSI是一种能够通过各自的数据信道连接多种设备的并行技术 和ATA一样 SCSI也向串行技术方向有所发展
  • Anaconda3安装PyEcharts包后无法正常调用

    最近在研究数据可视化问题 然后得知了Python的PyEcharts包库 使用pip install pyecharts 命令安装显示成功 但是在Spyder中输入from pyecharts import Bar 显示无法import b
  • [机器学习与scikit-learn-35]:算法-分类-支持向量机-线性分类代码示例

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 123800789 目录 前言 第1步骤