SVM全称是Support Vector Machine,即支持向量机,是一种监督式学习算法。它主要应用于分类问题,通过改进代码也可以用作回归。所谓支持向量就是距离分隔面最近的向量。支持向量机就是要确保这些支持向量距离超平面尽可能的远以保证模型具有相当的泛化能力。

当训练数据线性可分时,通过硬间隔最大化,学习一个线性分类器,即线性可分支持向量机;当训练数据近似线性可分时,通过软间隔最大化,也学习一个线性分类器,即线性支持向量机;当训练数据线性不可分时,通过使用核技巧,将低维度的非线性问题转化为高维度下的线性问题,学习得到非线性支持向量机。

所谓核技巧就是将低维数据映射到高维空间的办法。如果原始数据是有限维的,那么一定存在一个高维特征空间使样本可分。

支持向量机的一些证明推导公式不在这里说明。我简单说明一下支持向量机在Python中的实现。

在Python中sklearn算法包已经实现了所有基本机器学习的算法。直接from sklearn import svm就可以调用该算法。

以Iris数据集为例,从UCI数据库(archive.ics.uci.edu)中下载的data文件比较工整,无需做进一步处理可以直接使用。

从网上其他地方下载下来的csv格式数据集可能比较混乱,如下图:

这种有样本序号有列名的数据集需要预处理一下才方便做实验。处理时需要导入pandas,将csv格式转换成便于处理的DataFrame格式。

其中names是设置列名称。

然后是使用drop方法消除原数据集中的第一行(列名称)以及第一列(样本序号)。

其中('a',axis=1)代表消除的是列名称为a的一整列。(0 ,axis=0)代表消除第0行。

最后使用to_csv方法输出文件即可处理完毕。

其中'newiris.csv'是指生成文件名,sep指的是分割符号(空格为\t),index为行索引(即序列号),header为列名称。

处理结果如下:

接下来开始SVM实验。首先读取我们刚才处理好的数据集。具体方法是使用numpy中的loadtxt方法此方法可以读取txt、csv、data格式的数据。

第一个位置path指的文件路径,dtype指的是读出来的数据类型,delimiter指的是分隔符,converters指的是将数据列与转换函数进行映射的字典。

我们数据的第五列显然不是float类型,因此要写一个函数进行转换。

读取后的结果如下:

接下来需要将读取到的数据集特征指标与结果分开,并划分为训练集与测试集,此处为了方便作图只取了前两列特征值做实验:

其中size指的是样本数量,若此数小于1表示样本比例,大于1的整数表示样本数量。random_state指的是随机数的种子。

准备好后就可以开始训练SVM了。

kernel指的是核函数rbf是高斯核。高斯核的gamma值越小,分类界面越连续;gamma值越大,分类界面越“散”,分类效果越好,但有可能会过拟合。linear为线性核。线性核C越大分类效果越好,但有可能会过拟合。

decision_function_shape有两个取值,一个是ovr,即一个类别与其他类别进行划分;另一个是ovo,即将类别两两之间进行划分,用二分类的方法模拟多分类的结果。

最后用测试集去查看分类准确度,此处可以直接调用score方法查看准确度,也可以调用sklearn中metrics的accuracy_scor方法查看。两者没有区别。

结果为0.7333333。结果不尽如人意但可以慢慢改参数改进。

最后绘制图片:

可以看到绿点几乎可以被很好的区分,但是蓝点和红点存在不易区分的地方。这时候调整核技巧或者将更多的特征属性加入学习可能会有更好的效果。

用Python实现支持向量机并处理Iris数据集的更多相关文章

  1. 机器学习笔记2 – sklearn之iris数据集

    前言 本篇我会使用scikit-learn这个开源机器学习库来对iris数据集进行分类练习. 我将分别使用两种不同的scikit-learn内置算法--Decision Tree(决策树)和kNN(邻 ...

  2. Iris数据集实战

    本次主要围绕Iris数据集进行一个简单的数据分析, 另外在数据的可视化部分进行了重点介绍. 环境 win8, python3.7, jupyter notebook 目录 1. 项目背景 2. 数据概 ...

  3. 从Iris数据集开始---机器学习入门

    代码多来自<Introduction to Machine Learning with Python>. 该文集主要是自己的一个阅读笔记以及一些小思考,小总结. 前言 在开始进行模型训练之 ...

  4. 85、使用TFLearn实现iris数据集的分类

    ''' Created on 2017年5月21日 @author: weizhen ''' #Tensorflow的另外一个高层封装TFLearn(集成在tf.contrib.learn里)对训练T ...

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

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

  6. 吴裕雄 python 机器学习——支持向量机线性分类LinearSVC模型

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

  7. Python实现bp神经网络识别MNIST数据集

    title: "Python实现bp神经网络识别MNIST数据集" date: 2018-06-18T14:01:49+08:00 tags: [""] cat ...

  8. iris数据集(.csv .txt)免费下载

    我看CSDN下载的iris数据集都需要币,我愿意免费共享,希望下载后的朋友们给我留个言 分享iris数据集(供学习使用): 链接: https://pan.baidu.com/s/1Knsp7zn-C ...

  9. R语言实现分层抽样(Stratified Sampling)以iris数据集为例

    R语言实现分层抽样(Stratified Sampling)以iris数据集为例 1.观察数据集 head(iris) Sampling)以iris数据集为例">  选取数据集中前6个 ...

随机推荐

  1. 二维码图片以字符串的形式保存DB,已文件流显示页面上

    以下是生成二维码的方法,我只用其中一个方法 这个需要引用ZXing.DLL 链接:https://pan.baidu.com/s/1mCTwHiAm_awtsPcibAotZw 提取码:ufp6 pu ...

  2. jieba(杰巴)分词的三种模式

    jieba(结巴)是一个强大的分词库,完美支持中文分词,做为最好的Python中文分词组件. 安装:pip install jieba 特点 支持三种分词模式: 1.精确模式,试图将句子最精确地切开, ...

  3. python值json与pickle模块

    #json 是用来序列化对象的 # 只有2个方法,序列化与反序列化 # 但是不能序列化类 与 函数 import json dict={"key1":[1,2,3,4,5]} f ...

  4. 从Redis到Codis移植实践

    一.    背景 随着业务的发展,线上Redis的数据越来越多,所以必须考虑扩容的事情了.对于redis的扩容,目前可选的方案有三种:1.client自己做sharding,一般是按key的hash值 ...

  5. 31 Python中 sys.argv[]的用法简明解释(转)

    Python中 sys.argv[]的用法简明解释 因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果, ...

  6. listener 监听 tomcat 容器的初始化和销毁

    为了简单,就写个统计Action 请求数量的例子: 1.首先写个 listener public class TestServletContextListener implements Servlet ...

  7. java基础语法-内部类与匿名内部类

    1.成员内部类(声明在类内部&&方法之外) class Person{ String name = "韩梅梅"; int age; class Bird{ Stri ...

  8. Angular4 投影ngContent

  9. node获取当前路径的三种方法

    node提供了3种获取路径的方法  ,在当前目录下,运行node const {resolve} = require('path') console.log('__dirname : ' + __di ...

  10. Simple Factory Pattern

    Question: How do you achieve the functions of calculator by Object-Oriented ? Analysis: 1,The functi ...