SVM→8.SVM实战→3.调节SVM参数

.card { font-family: arial; font-size: 20px; text-align: left; color: black; background-color: white }
.cloze { font-weight: bold; color: red }
.myCode { font-family: droid sans mono; background-color: #f2f2f2; padding-left: 5px; padding-right: 5px }

《SVM→8.SVM实战→3.调节SVM参数》

描述 代码
  1. 导入模块

1
2
3
4

from sklearn.datasets.samples_generator import make_blobs
import matplotlib.pyplot as plt
from sklearn.svm import SVC # "Support vector classifier"
import numpy as np

  1. 生成数据集
    1. 使用make_blobs函数生成用于聚类的数据,主要参数有:
      1. n_samples:样本个数
      2. centers:样本中心(类别)数
      3. random_state:随机种子(被指定后,每次构造数据相同)
      4. cluster_std:数据离散程度
      5. n_features:特征数,默认是2
    2. 返回值有样本数据集X和标签y,且都是ndarray对象

1
2
3
4

In[3]: type(make_blobs)
Out[3]: function
In[4]: X, y = make_blobs(n_samples=50, centers=2,random_state=0, cluster_std=0.80)
In[5]: plt.scatter(X[:, 0], X[:, 1], c=y,  s=50, cmap=‘autumn‘)

  1. 模型选择及超参数调优
    1. 使用svm.SVC(C=1.0, kernel=’rbf’)来创建一个SVC对象,选择核为linear及不同的C
    2. 当C值特别大时,相当于=0,此时为硬间隔最大化;当C值很小时,此时为软间隔最大化,软间隔的支持向量或者在间隔边界上,或者在间隔边界与分离超平面之间, 或者在分离超平面误分一侧。

1
2
3
4
5
6
7

_,axi = plt.subplots(1,2)

for axi, C in zip(axi, [10.0, 0.1]):
    model = SVC(kernel=‘linear‘, C=C).fit(X, y)
    axi.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=‘autumn‘)
    plot_svc_decision_function(model, axi)
    axi.set_title(‘C = {0:.1f}‘.format(C), size=14)

plot_svc_decision_function参考见扩展

  1. 绘制图形
    1. 使用svm.SVC(C=1.0, kernel=’rbf’)来创建一个SVC对象,选择核为rbf及不同的gamma    
    2. gamma越大,拟合的曲线就越复杂。

1
2
3
4
5
6
7

_,axi = plt.subplots(1,2)

for axi, gamma,C in zip(axi, [10.0, 0.1],[1,1]):
    model = SVC(kernel=‘rbf‘, gamma=gamma,C=C).fit(X, y)
    axi.scatter(X[:, 0], X[:, 1], c=y, s=50, cmap=‘autumn‘)
    plot_svc_decision_function(model, axi)
    axi.set_title(‘gamma = {0:.1f}‘.format(gamma), size=14)

Show 拓展

参考见SVM→8.SVM实战→1.训练一个基本的SVM

 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

def plot_svc_decision_function(model, ax=None, plot_support=True):
    """Plot the decision function for a 2D SVC"""
    if ax is None:
        ax = plt.subplot(111)
    xlim = ax.get_xlim()
    ylim = ax.get_ylim()

    # create grid to evaluate model
    x = np.linspace(xlim[0], xlim[1], 30)
    y = np.linspace(ylim[0], ylim[1], 30)
    X,Y = np.meshgrid(x, y)
    xy = np.vstack([X.flatten(), Y.flatten()]).T
    P = model.decision_function(xy).reshape(X.shape)

    # plot decision boundary and margins
    #levels是 alpha是透明度 linestyles
    ax.contour(X, Y, P, colors=‘k‘,
               levels=[-1, 0, 1], alpha=0.5,
               linestyles=[‘--‘, ‘-‘, ‘--‘])

    # plot support vectors
    if plot_support:
        ax.scatter(model.support_vectors_[:, 0],
                   model.support_vectors_[:, 1],
                   s=500,c=‘‘,edgecolors=‘black‘)

原文地址:https://www.cnblogs.com/LeisureZhao/p/9752733.html

时间: 2024-10-28 21:37:14

SVM→8.SVM实战→3.调节SVM参数的相关文章

机器学习实战笔记6(SVM)

鉴于July大哥的SVM三层境界(http://blog.csdn.net/v_july_v/article/details/7624837)已经写得非常好了,这里我就不详细描述,只是阐述简单的几个概念.如果看SVM三层境界有困惑,我也愿意与大家交流,共同进步. 简单概念描述: (1)      支持向量机(SVM, support vectormachine)就是通过最大化支持向量到分类超平面之间的分类间隔.分类超平面就是我们想要得到的决策曲面:支持向量就是离分类超平面最近的点,而间隔即为支持

SVM: 使用kernels(核函数)的整个SVM算法过程

将所有的样本都选做landmarks 一种方法是将所有的training data都做为landmarks,这样就会有m个landmarks(m个trainnign data),这样features就是某个x(可以是trainning data/cross validation data/test data里面的)与这些landmarks之间的距离的远近程度的描述. landmarks选定后得出新的features向量 给出一个x,则通过这些landmarks来计算features向量,和之前的

SVM4TS (SVM for Time Series) 企业级SVM大数据算法运算平台

SVM4TS(SVM for Time Series)是一款基于SVM的大数据运行平台,支持大数据训练.模型产生.模型实例化.模型发布与上线.目前,SVM4TS是最优秀的商业大数据算法运行平台之一.STV4TS具有如下优点:(1)STV4TS更适合针对时间序列的机器学习计算,包括连续时间序列(如传感器数据)以及离散时间序列(如股票数据):(2)SVM4TS提供了数据分析.模型产生.模型升级.模型上线的全套解决方案,使用相对容易:(3)算法表现好,其算法的综合测评在众多框架中均名列前茅:(4)价格

oracle入门(8)——实战:支持可变参数、多种条件、多个参数排序、分页的存储过程查询组件

[本文介绍] 学了好几天,由于项目需要,忙活了两天,写出了个小组件,不过现在还只能支持单表操作.也没考虑算法上的优化,查询速度要比hibernate只快了一点点,可能是不涉及多表查询的缘故吧,多表的情况下才更快. 经非专业的测试,在有分页的情况下,在300万条数据里面查询的时间保持在0.1秒内.相同查询条件+分页的情况下,hibernate 用时0.3秒内. 不分页的条件下,查出来的数据越多,时间越长,时间长的话,跟hibernate相相比就没什么优势了. [思路] 我的思路是从java传来”字

hog+svm+检测人(代替默认的参数)

#include <iostream>#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/ml/ml.hpp>//#include <opencv2/gpu/gpu.hpp>#include <fstream>#include <iomanip> #include "opencv2/imgp

解密SVM系列(二):SVM的理论基础

上节我们探讨了关于拉格朗日乘子和KKT条件.这为后面SVM求解奠定基础,本节希望通俗的细说一下原理部分. 一个简单的二分类问题例如以下图: 我们希望找到一个决策面使得两类分开.这个决策面一般表示就是WTX+b=0,如今的问题是找到相应的W和b使得切割最好.知道logistic分类 机器学习之logistic回归与分类的可能知道,这里的问题和那里的一样.也是找权值.在那里,我们是依据每个样本的输出值与目标值得误差不断的调整权值W和b来求得终于的解的.当然这样的求解最优的方式仅仅是当中的一种方式.那

spring boot 实战 / mvn spring-boot:run 参数详解

概述   Spring boot项目通常情况下有如下几种启动方式: 通过主类启动. 通过spring-boot的maven插件spring-boot-maven-plugin方式启动. 通过可执行jar/war包方式启动. 通过Servlet容器启动,如Tomcat.Jetty等.   今天我们来聊一下spring boot的maven插件spring-boot-maven-plugin启动过程中的profiles问题.首先,我们前往网站SPRING INITIALIZR,参照下图创建一个名称为

SVM详解(包含它的参数C为什么影响着分类器行为)-scikit-learn拟合线性和非线性的SVM

引言 这篇文章详细地介绍了SVM背后的原理,它为什么是大间距分类器?分类器的参数C为什么影响着分类器的行为?核函数背后采用了什么样的技术,看过这篇文章以后,相信你能很好地理解这些问题.最后,我用scikit-learn来分别来拟合线性和非线性的SVM,让大家对SVM分类器有更加深刻的理解. 找寻最优化目标 相信所有用过SVM的人都知道它是一个大间距分类器.但是,它的原理是什么?它为什么可以最大化决策边界与样本之间的距离?下面我将一步一步的揭开它神秘的面纱. 从上图中我们可以看到,SVM会最大化间

SVM模型进行分类预测时的参数调整技巧

一:如何判断调参范围是否合理 正常来说,当我们参数在合理范围时,模型在训练集和测试集的准确率都比较高:当模型在训练集上准确率比较高,而测试集上的准确率比较低时,模型处于过拟合状态:当模型训练集和测试集上准确率都比较低,模型处于欠拟合状态.正常来说测试集上的准确率都会比训练集要低. 二:如何确定参数的调节方向 当使用线性支持向量机时,我们只需调节正则化参数C的范围即可. 这里我们以RBF作为核的SVM为例,这时候我们需要调节的参数是正则化参数C和核函数参数gamma.为了保证调参的精确度,一般我们