三、支持向量机算法(SVC,Support Vector Classification)(有监督学习)

支持向量机Support Vector Machine,就是所谓的SVM,它指的是一系列的机器学习算法,根据解决问题的不同,分为SVC(分类)和SVR(回归)

SVC,Support Vector Classification,其本质也是支持向量机support vector,只不过是用于分类classification任务
SVR,Support Vector Regression,其本质也是支持向量机support vector,只不过是用于回归Regression任务
本专栏主要是分类算法的总结,主要介绍SVC

C-Support Vector Classification(C-支持向量分类器)其实现基于libsvm。拟合时间至少与样本数成二次方关系,超过数万个样本后可能就不可行了。对于大型数据集,可以考虑使用 LinearSVC或SGDClassifier,可能的话,在使用Nystroem变换器或其他内核近似方法后再使用。

一、算法思路

以二分类任务为例,有两类不同的样本数据,新来一个样本,对其进行归类划分;下面是一些核心概念,用我自己的大白话进行描述

寻找一条线,可以将这两个类别的样本数据进行划分,这条线称之为决策边界
以决策边界为中心,分别向两边进行平移,触碰到样本点为止,这两条线之间的间隔称为margin(间隔);所触碰到的样本点称为支持向量
最终变成寻找margin最大问题

决策边界:找到一个可以划分这两个类别数据的一条线(二维),或者一个超平面(三维)等
间隔:以决策边界为中心向两边平移,直到碰到最近的样本点为止,这两条线之间的距离就是margin(间隔)
支持向量:以决策边界为中心向两边平移,这两条线所碰到的样本点被称为支持向量
硬间隔:死板的间隔,严格按照算法求解思路进行操作得到的间隔
软间隔:灵活的间隔,若来了一个异常点或者噪点,可以根据正则化进行限制,得到一个合乎

这里的蓝色噪点更应该属于五边形类别,但是它在数据集样本中是五角星类别,该样本是个噪点,会影响正常的分类,需要进行排除,此时就引入了软间隔,降低该噪点的影响。
在这里插入图片描述

二、官网API

官网API

class sklearn.svm.SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape='ovr', break_ties=False, random_state=None)

这里的参数还是比较多的,具体的参数使用,可以根据官网给的demo进行学习,多动手尝试;这里就以一些常用的参数进行说明。
导包:from sklearn.svm import SVC

①正则化参数C

正则化强度与正则化参数C成反比,惩罚是L2正则化的平方,C是一个浮点数类型

具体官网详情如下:
在这里插入图片描述

使用方式

SVC(C=2.0)

②核函数kernel

linear’:线性核函数,速度快;只能处理数据集样本线性可分,不能处理线性不可分。
poly’:多项式核函数,可将数据集样本升维,从低维空间映射到高维空间;参数较多,计算量大
rbf’:高斯核函数,和多项式核函数一样,可将样本升维;相较于多项式核函数来说,参数较少;默认值
'sigmoid’:sigmoid 核函数;当选用 sigmoid 核函数时,SVM 可实现的是多层神经网络
precomputed’:核矩阵;使用用户给定的核函数矩阵(n*n)
也可以自定义自己的核函数,然后进行调用即可

具体官网详情如下:
在这里插入图片描述

使用方式

SVC(kernel='sigmoid')

③多项式核函数的阶数degree

多项式核函数的阶数;该参数只对多项式核函数(poly)有用;若是其他的核函数,系统会自动忽略该参数

具体官网详情如下:
在这里插入图片描述

使用方式

SVC(kernel='ploy',degree=2)

④核系数gamma

rbf、poly 和 sigmoid核函数的核系数,该参数只针对这三个核函数,需要注意
scale’:默认值,具体的计算公式看下面的详细官网详情
auto’:具体的计算公式看下面的详细官网详情
或者是其他的浮点数均可

具体官网详情如下:
在这里插入图片描述

使用方式

SVC(gamma='auto')

⑤随机种子random_state

如果要是为了对比,需要控制变量的话,这里的随机种子最好设置为同一个整型数

具体官网详情如下:
在这里插入图片描述

使用方式

SVC(random_state=42)

⑥最终构建模型

SVC(C=3.0,kernel=‘sigmoid’,gamma=‘auto’,random_state=42)

三、代码实现

①导包

这里需要评估、训练、保存和加载模型,以下是一些必要的包,若导入过程报错,pip安装即可

import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt
import joblib
%matplotlib inline
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import confusion_matrix, classification_report, accuracy_score

②加载数据集

数据集可以自己简单整个,csv格式即可,我这里使用的是6个自变量X和1个因变量Y
在这里插入图片描述

fiber = pd.read_csv("./fiber.csv")
fiber.head(5) #展示下头5条数据信息

在这里插入图片描述

③划分数据集

前六列是自变量X,最后一列是因变量Y

常用的划分数据集函数官网API:train_test_split
在这里插入图片描述
test_size:测试集数据所占比例
train_size:训练集数据所占比例
random_state:随机种子
shuffle:是否将数据进行打乱
因为我这里的数据集共48个,训练集0.75,测试集0.25,即训练集36个,测试集12个

X = fiber.drop(['Grade'], axis=1)
Y = fiber['Grade']

X_train, X_test, y_train, y_test = train_test_split(X,Y,train_size=0.75,test_size=0.25,random_state=42,shuffle=True)

print(X_train.shape) #(36,6)
print(y_train.shape) #(36,)
print(X_test.shape) #(12,6)
print(y_test.shape) #(12,)

④构建SVC模型

参数可以自己去尝试设置调整

svc = SVC(C=3.0,kernel='sigmoid',gamma='auto',random_state=42)

⑤模型训练

就这么简单,一个fit函数就可以实现模型训练

svc.fit(X_train,y_train)

⑥模型评估

把测试集扔进去,得到预测的测试结果

y_pred = svc.predict(X_test)

看看预测结果和实际测试集结果是否一致,一致为1否则为0,取个平均值就是准确率

accuracy = np.mean(y_pred==y_test)
print(accuracy)

也可以通过score得分进行评估,计算的结果和思路都是一样的,都是看所有的数据集中模型猜对的概率,只不过这个score函数已经封装好了,当然传入的参数也不一样,需要导入accuracy_score才行,from sklearn.metrics import accuracy_score

score = svc.score(X_test,y_test)#得分
print(score)

⑦模型测试

拿到一条数据,使用训练好的模型进行评估
这里是六个自变量,我这里随机整个test = np.array([[16,18312.5,6614.5,2842.31,25.23,1147430.19]])
扔到模型里面得到预测结果,prediction = svc.predict(test)
看下预测结果是多少,是否和正确结果相同,print(prediction)

test = np.array([[16,18312.5,6614.5,2842.31,25.23,1147430.19]])
prediction = svc.predict(test)
print(prediction) #[2]

⑧保存模型

svc是模型名称,需要对应一致
后面的参数是保存模型的路径

joblib.dump(svc, './svc.model')#保存模型

⑨加载和使用模型

svc_yy = joblib.load('./svc.model')

test = np.array([[11,99498,5369,9045.27,28.47,3827588.56]])#随便找的一条数据
prediction = svc_yy.predict(test)#带入数据,预测一下
print(prediction) #[4]

完整代码

模型训练和评估,不包含⑧⑨。

from sklearn.svm import SVC
import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split

fiber = pd.read_csv("./fiber.csv")
# 划分自变量和因变量
X = fiber.drop(['Grade'], axis=1)
Y = fiber['Grade']
#划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, Y, random_state=0)

svc = SVC(C=3.0,kernel='sigmoid',gamma='auto',random_state=42)
svc.fit(X_train,y_train)#模型拟合
y_pred = svc.predict(X_test)#模型预测结果
accuracy = np.mean(y_pred==y_test)#准确度
score = svc.score(X_test,y_test)#得分
print(accuracy)
print(score)

test = np.array([[23,97215.5,22795.5,2613.09,29.72,1786141.62]])#随便找的一条数据
prediction = svc.predict(test)#带入数据,预测一下
print(prediction)
  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
SVC产品实现过程(依据现在的状态做出) 序 主要过程 责任部门 协助部门 输出文件 基本要求 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 信息 N Y ?? N Y Y N Y N Y N Y N Y 供应 部 件 ??? 市场部 ? ? 市场部 市场部 质量部 市场部 供应部 SVC部 工程部 质量部 质量部 供应部 生产部 SVC部 质量部 生产部 生产部 SVC部 质量部 生产部 市场部 工程部 工程部 SVCSVCSVC部 市场部 SVC部 工程部 SVC部 工程部 SVC部 工程部 SVC部 工程部 SVC部 供应部 市场部 工程部 生产部 SVC部 工程部 生产部 供应部 SVC部 工程部 供应部 市场部 生产部 质量部 SVC部 工程部 生产部 供应部 市场部 SVC部 供应部 SVC部 供应部 质量部 生产部 质量部 SVC部 生产部 SVC部 供应部 质量部 质量部 生产部 质量部 SVC部 生产部 市场部 质量部 生产部 SVC部 供应部 工程部 ??? 记录 系统方案 标书 评审记录 商务合同书 评审记录 会议决议 设计任务书 采购合同 技术文件 图纸 维护手册 使用手册 工艺文件 检验文件 工程图纸 评审记录 会议决议 检验记录 入库单 出库单 帐本 装配记录 调试记录 检验记录 装配记录 外观检验记录 调试记录 检验记录 检验报告 出厂合格证 装箱单 运输合同 交接单 施工记录 施工记录 技术交底记录 设备移交记录 工程竣工报告 接线记录 调试记录 验收报告 信息联络单 (见管理文件的编号)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond谚语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值