用鸢尾花Iris数据集做SVM线性分类

一、安装及创建虚拟环境

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名

二、SVM简介

  • Svmsupport Vector Mac)又称为支持向量机,是一种二分类的模型。支持向量机可以分为线性和非线性两大类。其主要思想是找到空间中的一个更够将所有数据样本划开的直线(平面或者超平面),并且使得数据集中所有数据到这个超平面的距离最短。
  • 线性SVM有两种方式实现:LinearSVC(C)SVC(C=1, kernel="linear")
  • LinearSVCLinear Support Vector Classification)线性支持向量机,核函数是 linear,相关参数:
    • C:目标函数的惩罚系数C,默认C = 1.0;
    • loss:指定损失函数. squared_hinge(默认), squared_hinge
    • penalty : 惩罚方式,str类型,l1, l2
    • dual:选择算法来解决对偶或原始优化问题。当nsamples>nfeaturesdual=false
    • tolsvm结束标准的精度, 默认是1e - 3
    • multi_class:如果y输出类别包含多类,用来确定多类策略, ovr表示一对多,crammer_singer优化所有类别的一个共同的目标 。如果选择crammer_singer,损失、惩罚和优化将会被被忽略。
    • max_iter : 要运行的最大迭代次数。int,默认1000。
  • SVC用于分类,用libsvm实现,参数如下:
    • C: 惩罚项,默认为1.0,C越大容错空间越小;C越小,容错空间越大
    • kernel : 核函数的类型,可选参数为:
      • linear: 线性核函数
      • poly : 多项式核函数
      • rbf : 高斯核函数
      • sigmod : sigmod核函数(竟然还有这种核函数)
      • precomputed : 核矩阵,表示自己提前计算好核函数矩阵
    • degree: 多项式核函数的阶,默认为3,只对多项式核函数生效,其他的自动忽略
    • gamma: 核函数系数,可选,float类型,默认为auto。只对rbf ,poly ,sigmod有效。如果gammaauto,代表其值为样本特征数的倒数,即1/n_features.
    • coef0 :核函数中的独立项,float类型,可选,默认为0.0。只有对polysigmod核函数有用,是指其中的参数c
    • probability:是否启用概率估计,bool类型,可选参数,默认为False,这必须在调用fit()之前启用,并且会fit()方法速度变慢
    • tolsvm停止训练的误差精度,float类型,可选参数,默认为1e^-3
    • cache_size :内存大小,float,可选,默认200。指定训练所需要的内存,单位MB
    • class_weight:类别权重,dict类型或str类型,可选,默认None。给每个类别分别设置不同的惩罚参数C,如果没有,则会给所有类别都给C=1,即前面指出的C。如果给定参数balance,则使用y的值自动调整与输入数据中的类频率成反比的权重
    • max_iter:最大迭代次数,int类型,默认为-1,不限制
    • decision_function_shape:决策函数类型,可选参数ovoovr,默认为ovrovo表示one vs oneovr表示one vs rest。(多分类)
    • random_state :数据洗牌时的种子值,int类型,可选,默认为None
  • 模型训练结束后,可以使用下列参数:
    • support_ : array类型,支持向量的索引
    • support_vectors_: 支持向量的集合
    • n_support_ : 比如SVC将数据集分成了4类,该属性表示了每一类的支持向量的个数。
    • dual_coef_ : array, shape = [n_class-1, n_SV]对偶系数,支持向量在决策函数中的系数,在多分类问题中,这个会有所不同。
    • coef_ : array,该参数仅在线性核时才有效,指的是每一个属性被分配的权值。
    • intercept_:array, shape = [n_class * (n_class-1) / 2]决策函数中的常数项bias。和coef_共同构成决策函数的参数值.

三、LinearSVC(C)方式实现分类

  • 输入python命令进入python编译
  • 导入需要的包:
import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.preprocessing import StandardScaler
from sklearn.svm import LinearSVC
  • 获取数据集:
# 获取所需数据集
iris=datasets.load_iris()
#每行的数据,一共四列,每一列映射为feature_names中对应的值
X=iris.data
#每行数据对应的分类结果值(也就是每行数据的label值),取值为[0,1,2]
Y=iris.target
#通过Y=iris.target.size,可以得到一共150行数据,三个类别个50条数据,并且数据是按照0,1,2的顺序放的
  • 对数据集进行处理:
#只取y<2的类别,也就是0 1并且只取前两个特征
X=X[:,:2]
#获取0 1类别的数据
Y1=Y[Y<2]
y1=len(Y1)
#获取0类别的数据
Y2=Y[Y<1]
y2=len(Y2)
X=X
  • 4
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
安德森尾花数据集是一份常用的分类问题的数据集,其中包含三个品种的尾花:Setosa、Versicolour和Virginica。我们需要根据尾花样本的花萼长度、花萼宽度、花瓣长度、花瓣宽度四个特征来判断其所属的尾花品种,这是一个典型的多分类问题。因此,为了将其转化为一个二分类问题,我们需要选择两个类别作为我们的关注对象。 在本问题中,我们选择将Setosa品种和Versicolour品种作为二分类问题的两个类别,因为这两个品种在四个特征上的差异较大,比较容易进行区分。我们可以将Setosa品种设置为正样本,Versicolour品种设置为负样本。 在选择好我们的二分类问题后,我们可以使用支持向量机(SVM分类器来进行建模。SVM分类器的核心是将数据映射到高维空间中,寻找能够准确将正负样本分开的超平面。我们可以使用sklearn库中的SVM分类器来实现这个分类问题。在训练SVM分类器时,我们需要指定一些参数: 1. kernel:SVM中常用的核函数有线性核、多项式核和径向基函数(RBF)核三种。在本问题中,我们可以使用RBF核函数作为我们的核函数。 2. C:SVM中的惩罚参数C用于控制模型的复杂度。C取值越大,分类器对错误分类的惩罚越严格,容错能力越小,分类精度越高。 3. gamma:当选用RBF核函数时,gamma参数用于控制支持向量的多少。gamma取值越小,支持向量越少,分类器的决策边界越平滑;gamma取值越大,支持向量越多,分类器在样本内部的拟合能力越强,但泛化能力越弱。 最后,我们可以使用训练好的SVM分类器来对新尾花样本进行分类。需要输入尾花的四个特征值,分类器会给出预测结果。需要注意的是,为了保证预测结果的准确性,我们需要将数据集拆分为训练集和测试集,使用训练集进行模型训练,使用测试集进行模型测试。同时,我们还可以采用最优化的方法(如网格搜索)来寻找最优的SVM分类器参数。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值