基于经典的支持向量机算法完成鸢尾花的分类问题


机器学习专栏限时优惠
数据集的介绍
这篇文章是要使用机器学习中的支持向量机算法实现分类问题 , 首先我们现在使用非常有名的用于分类问题的数据集:鸢尾花数据集 。 它是基于鸢尾花的花萼的长度和宽度进行分类的 。 我们只用其中两维特征 , 这能够方便可视化 。
我们先来看一下它的数据是什么样子的
基于经典的支持向量机算法完成鸢尾花的分类问题
本文插图
这里有四列 , 我们只使用花萼的长度和宽度这两个特征来完成分类问题 。
基于经典的支持向量机算法完成鸢尾花的分类问题
本文插图
我们只获取了iris数据集的前两列 , 为X,我们获取对应每一个样本的标签值 , 为y , 分别是0 , 1 , 2 。
支持向量机的使用
支持向量机有两种:SVC , 支持向量分类 , 用于分类问题;SVR,支持向量回归 , 用于回归问题 。 这里我们是使用支持向量机来完成分类问题 , 所以使用SVC 。
sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0, shrinking=True, probability=False,tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None,random_state=None)
C:C-SVC的惩罚参数C , 默认值是1.0C越大 , 相当于惩罚松弛变量 , 希望松弛变量接近0 , 即对误分类的惩罚增大 , 趋向于对训练集全分对的情况 , 这样对训练集测试时准确率很高 , 但泛化能力弱 。 C值小 , 对误分类的惩罚减小 , 允许容错 , 将他们当成噪声点 , 泛化能力较强 。
kernel :核函数 , 默认是rbf , 可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’
0 – 线性:u'v
1 – 多项式:(gamma*u'*v + coef0)^degree
2 – RBF函数:exp(-gamma|u-v|^2)
3 –sigmoid:tanh(gamma*u'*v + coef0)degree :多项式poly函数的维度 , 默认是3 , 选择其他核函数时会被忽略 。
gamma : ‘rbf’,‘poly’ 和‘sigmoid’的核函数参数 。 默认是’auto’ , 则会选择1/n_features coef0 :核函数的常数项 。 对于‘poly’和 ‘sigmoid’有用 。 probability :是否采用概率估计?.默认为Falseshrinking :是否采用shrinking heuristic方法 , 默认为true tol :停止训练的误差值大小 , 默认为1e-3cache_size :核函数cache缓存大小 , 默认为200class_weight :类别的权重 , 字典形式传递 。 设置第几类的参数C为weight*C(C-SVC中的C) verbose :允许冗余输出?max_iter :最大迭代次数 。 -1为无限制 。 decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3random_state :数据洗牌时的种子值 , int值
程序一:将数据集分成两部分 , 一部分140行训练集 , 一部分10行测试集 , 我们用140行训练集来训练模型 , 画出分类边界 , 然后用10行进行测试 , 并将测试的点画在图中
# -*- coding: utf-8 -*-
import numpy as np
from sklearn import svm
from sklearn import datasets
from matplotlib.colors import ListedColormap
import pylab as pl
iris = datasets.load_iris()
X = iris.data[:, :2]
y = iris.target
i=np.random.permutation(len(X))
x_train=X[i[:-10]]
y_train=y[i[:-10]]
x_test=X[i[-10:]]
【基于经典的支持向量机算法完成鸢尾花的分类问题】y_test=y[i[-10:]]
svc = svm.SVC(kernel='linear')
cmap_light = ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])


推荐阅读