一、基础理解

  • 数据:线性数据、非线性数据;
  • 线性数据:线性相关、非线性相关;(非线性相关的数据不一定是非线性数据)

 1)SVM 解决非线性数据分类的方法

  • 方法一:

  • 多项式思维:扩充原本的数据,制造新的多项式特征;(对每一个样本添加多项式特征)
  • 步骤
  1. PolynomialFeatures(degree = degree):扩充原始数据,生成多项式特征;
  2. StandardScaler():标准化处理扩充后的数据;
  3. LinearSVC(C = C):使用 SVM 算法训练模型;
  • 方法二:

  • 使用scikit-learn 中封装好的核函数: SVC(kernel='poly', degree=degree, C=C)
  • 功能:当 SVC() 的参数 kernel = ‘poly’ 时,直接使用多项式特征处理数据;
  • :使用 SVC() 前,也需要对数据进行标准化处理

二、例

 1)生成数据

  • datasets.make_ + 后缀:自动生成数据集;
  • 如果想修改生成的数据量,可在make_moons()中填入参数;
    import numpy as np
    import matplotlib.pyplot as plt
    from sklearn import datasets X, y = datasets.make_moons(noise=0.15, random_state=666)
    plt.scatter(X[y==0, 0], X[y==0, 1])
    plt.scatter(X[y==1, 0], X[y==1, 1])
    plt.show()

 2)绘图函数

  • def plot_decision_boundary(model, axis):
    
        x0, x1 = np.meshgrid(
    np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1),
    np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1)
    )
    X_new = np.c_[x0.ravel(), x1.ravel()] y_predict = model.predict(X_new)
    zz = y_predict.reshape(x0.shape) from matplotlib.colors import ListedColormap
    custom_cmap = ListedColormap(['#EF9A9A','#FFF59D','#90CAF9']) plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)

 3)方法一:多项式思维

  • from sklearn.preprocessing import PolynomialFeatures, StandardScaler
    from sklearn.svm import LinearSVC
    from sklearn.pipeline import Pipeline def PolynomialSVC(degree, C=1.0):
    return Pipeline([
    ('poly', PolynomialFeatures(degree=degree)),
    ('std)scaler', StandardScaler()),
    ('linearSVC', LinearSVC(C=C))
    ]) poly_svc = PolynomialSVC(degree=3)
    poly_svc.fit(X, y) plot_decision_boundary(poly_svc, axis=[-1.5, 2.5, -1.0, 1.5])
    plt.scatter(X[y==0, 0], X[y==0, 1])
    plt.scatter(X[y==1, 0], X[y==1, 1])
    plt.show()

  • 改变参数:degree、C,模型的决策边界也跟着改变;

 4)方法二:使用核函数 SVC()

  • 对于SVM算法,在scikit-learn的封装中,可以不使用 PolynomialFeatures的方式先将数据转化为高维的具有多项式特征的数据,在将数据提供给算法;
  • SVC() 算法:直接使用多项式特征;
    from sklearn.svm import SVC
    
    # 当算法SVC()的参数 kernel='poly'时,SVC()能直接打到一种多项式特征的效果;
    # 使用 SVC() 前,也需要对数据进行标准化处理
    def PolynomialKernelSVC(degree, C=1.0):
    return Pipeline([
    ('std_scaler', StandardScaler()),
    ('kernelSVC', SVC(kernel='poly', degree=degree, C=C))
    ]) poly_kernel_svc = PolynomialKernelSVC(degree=3)
    poly_kernel_svc.fit(X, y) plot_decision_boundary(poly_kernel_svc, axis=[-1.5, 2.5, -1.0, 1.5])
    plt.scatter(X[y==0, 0], X[y==0, 1])
    plt.scatter(X[y==1, 0], X[y==1, 1])
    plt.show()

  • 调整 PolynomialkernelSVC() 的参数:degree、C,可改决策边界;

机器学习:SVM(非线性数据分类:SVM中使用多项式特征和核函数SVC)的更多相关文章

  1. 【笔记】sklearn中的SVM以及使用多项式特征以及核函数

    sklearn中的SVM以及使用多项式特征以及核函数 sklearn中的SVM的使用 SVM的理论部分 需要注意的是,使用SVM算法,和KNN算法一样,都是需要做数据标准化的处理才可以,因为不同尺度的 ...

  2. 【笔记】逻辑回归中使用多项式(sklearn)

    在逻辑回归中使用多项式特征以及在sklearn中使用逻辑回归并添加多项式 在逻辑回归中使用多项式特征 在上面提到的直线划分中,很明显有个问题,当样本并没有很好地遵循直线划分(非线性分布)的时候,其预测 ...

  3. 吴裕雄 python 机器学习——支持向量机SVM非线性分类SVC模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm fr ...

  4. 在opencv3中实现机器学习之:利用svm(支持向量机)分类

    svm分类算法在opencv3中有了很大的变动,取消了CvSVMParams这个类,因此在参数设定上会有些改变. opencv中的svm分类代码,来源于libsvm. #include "s ...

  5. 机器学习经典算法之SVM

    SVM 的英文叫 Support Vector Machine,中文名为支持向量机.它是常见的一种分类方法,在机器学习中,SVM 是有监督的学习模型. 什么是有监督的学习模型呢?它指的是我们需要事先对 ...

  6. 【机器学习具体解释】SVM解二分类,多分类,及后验概率输出

    转载请注明出处:http://blog.csdn.net/luoshixian099/article/details/51073885 CSDN−勿在浮沙筑高台 支持向量机(Support Vecto ...

  7. 机器学习笔记——支持向量机 (SVM)

    声明: 机器学习系列主要记录自己学习机器学习算法过程中的一些参考和总结,其中有部分内容是借鉴参考书籍和参考博客的. 目录: 什么支持向量机(SVM) SVM中必须知道的概念 SVM实现过程 SVM核心 ...

  8. 【机器学习】支持向量机(SVM)

    感谢中国人民大学胡鹤老师,课程深入浅出,非常好 关于SVM 可以做线性分类.非线性分类.线性回归等,相比逻辑回归.线性回归.决策树等模型(非神经网络)功效最好 传统线性分类:选出两堆数据的质心,并做中 ...

  9. 基于SVM的数据分类预測——意大利葡萄酒种类识别

    update:把程序源代码和数据集也附上http://download.csdn.net/detail/zjccoder/8832699 2015.6.24 --------------------- ...

随机推荐

  1. INSPIRED启示录 读书笔记 - 第11章 评估产品机会

    市场需求文档 大多数的公司产品选择权是由高管.市场部门.开发团队甚至是大客户,在这种情况下公司会跳过市场需求文档或是误写成产品规范文档,回避评估产品机会 在正常情况下,应该是由业务人员会撰写一份论证产 ...

  2. Oracle基本概念

    1. 数据库和实例 什么是数据库,其实很简单,数据库就是存储数据的一种媒介.比如常用的文件就是一种,在Oracle10g中,数据的存储有好几种.第一种是文件形 式,也就是在你的磁盘中创建一批文件,然后 ...

  3. Sublime 输入中文显示方框问号乱码

     最近使用的sublime 编辑器出现了打开写好的程序,中文显示的确是方框,方框里面是问号,就是不显示中文.     然后再网上查找了一下,大概都是说是需要中文编码插件,比如converttoutf8 ...

  4. ADO.Net连接Mysql

    首先下载一个mysql.data.dll拷贝到bin下面并引用一下 using MySql.Data.MySqlClient; class Program { static void Main(str ...

  5. java基础9(IO流)-File类

    File类 File:文件和目录路径名的抽象表示形式.即java中把文件或者目录都封装成File对象 代码练习1 import java.io.File; public class FileDemo1 ...

  6. DB2数据库管理常用操作

    查询db2数据库相关配置(日志,字符集) db2 get db cfg for uppdb 查询db2数据库db2codepage db2set 在进行数据库导入导出的时候,可能要修改db2codep ...

  7. IE 内使用ActiveX,写注册表被重定向到如下注册表

    IE 内使用ActiveX,写注册表被重定向到如下注册表,所以使用注册表做标记要注意下,目前还没找为什么会这样 HKEY_CURRENT_USER\Software\Microsoft\Interne ...

  8. compile to 32-bit elf file

    nasm -f elf -o a.o a.asm gcc -c -m32 -o b.o b.c ld -s -m elf_i386 -Ttext 0x30400 -o b.bin b.o a.o

  9. UML用例建模解析(二)---------用例执行者之间关系

    (1) 关联关系 关联关系是指执行者与用例之间的关系,又称为通信关系,如果某个执行者可以对某个用例进行操作,它们之间就具有关联关系,如下图所示,“经理”有一个功能为“查看库存报表”,因此可以在执行者“ ...

  10. Android Studio开发技巧

    为了android更有效率的开发,总结学习android集成开发环境(android studio1.3为例) android studio 1-打印log及配置ec快捷键 2-代码提示及移动快捷键 ...