python实现支持向量机SVM

支持向量机

支持向量机有两种:SVC,支持向量分类,用于分类问题;SVR,支持向量回归,用于回归问题。

线性支持向量机(Linear SVMs):用一个非常有名的用于分类问题的数据集:鸢尾花数据集。它是基于鸢尾花的花萼的长度和宽度进行分类的。我们只用其中两维特征,这能够方便可视化。

  • kernel="linear"(线性核函数)给了我们线性的决策边界:两类之间的分离边界是直线。
  • 多分类的工作方式就是"one versus one" :在任意两类样本之间设计一个SVM,因此k个类别的样本就需要设计k(k-1)/2个SVM。当对一个未知样本进行分类时,最后得票最多的类别即为该未知样本的类别。
  • 线性支持向量分类器(LinearSVC):对于线性核函数,有一个新的对象LinearSVC ,它使用了不同的算法。在某些数据集上运行地更快(比如稀疏数据集,文本挖掘就是典型的例子)。它对于多分类采用的是"one versus all"策略。
  • 支持向量:就是最靠近分离边界的样本点。支持向量机的工作方式就是找到这些支持向量,它们被认为是在二分类问题中最具代表性的样本点。
  • 为了更方便的可视化,我们选择二分类问题,也就是只考虑鸢尾花数据集中的1类和2类样本。这两类不是线性可分的
  • 正则化 :只考虑支持向量其实就是一种正则化的形式。实际上,它强迫模型在处理样本特征的时候变得更加简单。 This regularization can be tuned with the C parameter:
  • 正则项可以通过调整系数 C 来决定:
    • 小的C值:将会有很多支持向量。决策边界=类别A的平均值-类别B的平均值
    • 大的C值:将会有较少的支持向量。决策边界是被大多数支持向量所决定
  • 核方法

  • 采用核方法,能够很方便地产生非线性分类边界。

  • linear,线性核,会产生线性分类边界。一般来说它的计算效率最高,而且需要数据最少。
  • poly ,多项式核,会产生多项式分类边界。
  • rbf,径向基函数,也就是高斯核,是根据与每一个支持向量的距离来决定分类边界的。它的映射到无线维的。它是最灵活的方法,但是也需要最多的数据。
import numpy as np
from sklearn import svm
import pylab as pl
from sklearn import datasets

svc = svm.SVC(kernel='linear')
# 鸢尾花数据集是sklearn自带的。
irics = datasets.load_iris()#irics为字典

#取出前两个特征
irics_feature = irics['data'][:,:2]
irics_target = irics['target']

#基于这些特征和目标训练支持向量机
#svc.fit(irics_feature,irics_target)

#将预测结果可视化
from matplotlib.colors import ListedColormap
# 因为鸢尾花是3分类问题,我们要对样本和预测结果均用三种颜色区分开。
camp_light =ListedColormap(['#FFAAAA', '#AAFFAA', '#AAAAFF'])
camp_bold = ListedColormap(['#FF0000', '#00FF00', '#0000FF'])
pl.figure()
def plot_estimater(estimator,X,y):
    '''
    这个函数的作用是基于分类器,对预测结果与原始标签进行可视化。
    '''
    estimator.fit(X,y)
    # 确定网格最大最小值作为边界
    x_min,x_max = X[:,0].min()-.1,X[:,0].max()+.1
    y_min,y_max = X[:,1].min()-.1,X[:,1].max()+.1
    #产生网格节点
    #linspace作用为在区间[x_min,x_max]产生100个元素的数列
    xx,yy = np.meshgrid(np.linspace(x_min,x_max,100),np.linspace(y_min,y_max,100))
    # 基于分离器,对网格节点做预测
    #np.c_[xx.ravel(),yy.ravel()]相当于产生一个坐标
    Z = estimator.predict(np.c_[xx.ravel(),yy.ravel()])
    #对预测结果上色,维度保持一致
    Z=Z.reshape(xx.shape)
   
    pl.pcolormesh(xx,yy,Z,cmap=camp_light)
    # 同时对原始训练样本上色
    pl.scatter(X[:,0],X[:,1],c=y,cmap=camp_bold)
    pl.axis('tight')
    pl.axis('off')
    pl.tight_layout()
    
#plot_estimater(svc,irics_feature,irics_target)
#plot_estimater(svm.LinearSVC(), irics_feature,irics_target)

X,y = irics_feature[np.in1d(irics_target,[1,2])],irics_target[np.in1d(irics_target,[1,2])]
'''
plot_estimater(svc,X,y)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', zorder=10)

svc=svm.SVC(kernel='linear',C=1e3)
plot_estimater(svc,X,y)

svc=svm.SVC(kernel='linear',C=1e-3)
plot_estimater(svc,X,y)
'''
svc = svm.SVC(kernel='linear')
plot_estimater(svc, X, y)
pl.scatter(svc.support_vectors_[:, 0], svc.support_vectors_[:, 1], s=80, facecolors='none', zorder=10)
pl.title('Linear kernel')
pl.show()

svc=svm.SVC(kernel = 'poly',degree=4)
plot_estimater(svc, X, y)
pl.title('poly kernel')
pl.show()

svc=svm.SVC(kernel = 'rbf',gamma=1e2)
plot_estimater(svc, X, y)
pl.title('rbf kernel')
pl.show()


     


 

### 回答1: 机器学习实战Python基于支持向量机SVM)是一种强大的分类器算法。SVM是一种监督学习方法,可以用于解决二分类和多分类问题。 SVM的基本思想是找到一个最佳的超平面,将数据分割成不同的类别。超平面被定义为在n维空间中具有n-1维的子空间。这个子空间可以将不同类别的数据点分开,并且尽可能地最大化边界。这就意味着SVM在分类时尽量避免误分类,并且对于新的未知数据具有较好的泛化能力。 在Python中,我们可以使用scikit-learn库中的SVM实现机器学习任务。首先,我们需要导入必要的库和数据集。然后,我们可以对数据集进行预处理,如特征缩放和数据划分。接下来,我们可以创建一个SVM分类器,并使用训练数据进行模型的训练。训练完成后,我们可以使用测试数据进行预测,并评估模型的性能。 SVM还有一些重要的参数需要调节,如C和gamma。C表示惩罚项的权重,用于控制分类器的错误率和边界的平衡。较大的C值会减小错误率,但可能导致边界过拟合。gamma表示径向基函数核的参数,影响分类器的决策边界的灵活性。较大的gamma值会导致边界更加精确地拟合训练数据,但可能导致过拟合。 总的来说,机器学习实战Python基于支持向量机SVM)是一个强大的分类器算法,可以用于解决二分类和多分类问题。在实际应用中,我们需要注意调节参数,使得分类器具有良好的泛化能力。 ### 回答2: 机器学习实战是一本非常实用的书籍,其中详细介绍了如何使用Python编程语言基于支持向量机SVM)进行机器学习实践。 支持向量机是一种强大的监督学习算法,可以用于解决分类和回归问题。该算法通过寻找一个最优的超平面来分割样本空间,使得不同类别的样本尽可能远离超平面。实际上,SVM通过最大化支持向量与超平面的距离,来确保分类的准确性和泛化能力。 在书籍中,作者通过经典的例子和详细的代码示例,展示了如何应用Python编程语言和scikit-learn库来构建和训练SVM模型。读者将学会如何准备数据集,进行特征选择和数据预处理,选择合适的SVM参数以及评估模型的性能。 此外,书中还强调了交叉验证、网格搜索和模型调优等重要概念。这些概念是整个机器学习过程中不可或缺的一部分,能够帮助我们提高模型的准确性和可靠性。 机器学习实战还提供了丰富的示例和应用,涵盖了多个领域,如文本分类、手写数字识别和人脸识别等。通过这些实例,读者可以深入理解SVM在实际问题中的应用。 总而言之,机器学习实战是一本非常实用的书籍,提供了丰富的例子和代码,使读者能够快速上手并应用SVM算法解决实际问题。无论是对于初学者还是有一定机器学习经验的人来说,这本书都是一本值得推荐的学习资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值