08 支持向量机(SVM)

支持向量机分类器(Support Vector Classifer),根据训练样本的分布,搜索所有可能的线性分类器中最佳的那个。

使用支持向量机分类器处理Scikit-learn内部继承的手写体数字图片数据集。

#coding=UTF-8

######手写体数据读取代码样例

#从sklearn.datasets里导入手写体数字加载器
from sklearn.datasets import load_digits
#通过数据加载器获得手写体数字的数码图像数据,并储存在digits变量中
digits=load_digits()
#检视数据规模和特征维度
digits.data.shape
#[out]:(1797L, 64L)
#输出结果表明:该手写体数字的数码图像数据共有1797条
#并且每幅图片是由8x8=64的像素矩阵表示

#依照惯例,对于没有直接提供测试样本的数据
#要通过数据分割获取75%的训练样本和25%的测试样本

######手写体数据分割代码样例

#从sklearn.cross_validation中导入train_test_split用于数据分割
#若:from sklearn.cross_validation import train_test_split
#会:DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
# "This module will be removed in 0.20.", DeprecationWarning)
#所以:sklearn.cross_validation报警告,将其改为sklearn.model_selection
from sklearn.model_selection import train_test_split

#随机选取75%的数据作为训练样本
#其余25%的数据作为测试样本
X_train,X_test,y_train,y_test=train_test_split(digits.data,digits.target,test_size=0.25,random_state=33)

#分别检视训练与测试数据规模
print y_train.shape
#[out]:(1347L,)
print y_test.shape
#[out]:(450L,)

######使用支持向量机(分类)对手写体数字图像进行识别

#从sklearn.preprocessing里导入数据标准化模块
from sklearn.preprocessing import StandardScaler
#从sklearn.svm里导入基于线性假设的支持向量机分类器LinearSVC
from sklearn.svm import LinearSVC 

#仍然需要对训练和测试的特征数据进行标准化
ss=StandardScaler()
X_train=ss.fit_transform(X_train)
X_test=ss.transform(X_test)

#初始化线性假设的支持向量机分类器LinearSVC
lsvc=LinearSVC()
#进行模型训练
lsvc.fit(X_train,y_train)
#利用训练好的模型对测试样本的数字类别进行预测,预测结果储存在变量y_predict中
y_predict=lsvc.predict(X_test)

######性能评测:使用准确率、召回率、精确率和F1指标,对SVM分类模型从事手写体数字图像识别任务进行性能评估

#支持向量机(分类)模型对手写体数字图像识别能力的评估
#使用模型自带的评估函数进行准确性评测
print ‘The Accuracy of Linear SVC is‘,lsvc.score(X_test,y_test)
#[out]:The Accuracy of Linear SVC is 0.953333333333
#使用sklearn.metrics里面的classification_report模块对预测结果做更详细的分析
from sklearn.metrics import classification_report
print classification_report(y_test,y_predict,target_names=digits.target_names.astype(str))
#[out]:
#              precision    recall  f1-score   support

#           0       0.92      1.00      0.96        35
#           1       0.96      0.98      0.97        54
#           2       0.98      1.00      0.99        44
#           3       0.93      0.93      0.93        46
#           4       0.97      1.00      0.99        35
#           5       0.94      0.94      0.94        48
#           6       0.96      0.98      0.97        51
#           7       0.92      1.00      0.96        35
#           8       0.98      0.84      0.91        58
#           9       0.95      0.91      0.93        44

# avg / total       0.95      0.95      0.95       450
时间: 2024-10-14 12:01:19

08 支持向量机(SVM)的相关文章

【机器学习速成宝典】模型篇08支持向量机【SVM】(附python代码)

目录 什么是支持向量机(SVM) 特征选择 使用ID3算法生成决策树 使用C4.5算法生成决策树 使用CART算法生成决策树 预剪枝和后剪枝 应用:遇到连续与缺失值怎么办? 多变量决策树 Python代码(sklearn库) 什么是支持向量机(SVM) 引例 现有训练集如下,请训练一个决策树模型,对未来的西瓜的优劣做预测. 返回目录 什么是决策树(Decision Tree)2 引例 现有训练集如下,请训练一个决策树模型,对未来的西瓜的优劣做预测. 返回目录 什么是决策树(Decision Tr

支持向量机(SVM)(二)-- 拉格朗日对偶(Lagrange duality)

简介: 1.在之前我们把要寻找最优的分割超平面的问题转化为带有一系列不等式约束的优化问题.这个最优化问题被称作原问题.我们不会直接解它,而是把它转化为对偶问题进行解决. 2.为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,为了使问题变得易于处理,我们的方法是把目标函数和约束全部融入一个新的函数,即拉格朗日函数,再通过这个函数来寻找最优点.即拉格朗日函数,再通过这个函数来寻找最优点. 3.约束条件可以分成不等式约束条件和等式约束条件,只有等式约束条件的问题我们在高等数学课

支持向量机(SVM)(五)-- SMO算法详解

一.我们先回顾下SVM问题. A.线性可分问题 1.SVM基本原理: SVM使用一种非线性映射,把原训练            数据映射到较高的维.在新的维上,搜索最佳分离超平面,两个类的数据总可以被超平面分开. 2.问题的提出: 3.如何选取最优的划分直线f(x)呢? 4.求解:凸二次规划 建立拉格朗日函数: 求偏导数: B.线性不可分问题 1.核函数 如下图:横轴上端点a和b之间红色部分里的所有点定为正类,两边的黑色部分里的点定为负类. 设: g(x)转化为f(y)=<a,y> g(x)=

第八篇:支持向量机 (SVM)

前言 本文讲解如何使用R语言中e1071包中的SVM函数进行分类操作,并以一个关于鸢尾花分类的实例演示具体分类步骤. 分析总体流程 1. 载入并了解数据集:2. 对数据集进行训练并生成模型:3. 在此模型之上调用测试数据集进行分类测试:4. 查看分类结果:5. 进行各种参数的调试并重复2-4直至分类的结果让人满意为止. 参数调整策略 综合来说,主要有以下四个方面需要调整: 1. 选择合适的核函数:2. 调整误分点容忍度参数cost:3. 调整各核函数的参数:4. 调整各样本的权重. 其中,对于特

机器学习第7周-炼数成金-支持向量机SVM

支持向量机SVM 原创性(非组合)的具有明显直观几何意义的分类算法,具有较高的准确率源于Vapnik和Chervonenkis关于统计学习的早期工作(1971年),第一篇有关论文由Boser.Guyon.Vapnik发表在1992年(参考文档见韩家炜书9.10节)思想直观,但细节异常复杂,内容涉及凸分析算法,核函数,神经网络等高深的领域,几乎可以写成单独的大部头与著.大部分非与业人士会觉得难以理解.某名人评论:SVM是让应用数学家真正得到应用的一种算法 思路 简单情况,线性可分,把问题转化为一个

机器学习与数据挖掘-支持向量机(SVM)(一)

最近在看斯坦福大学的机器学习的公开课,学习了支持向量机,再结合网上各位大神的学习经验总结了自己的一些关于支持向量机知识. 一.什么是支持向量机(SVM)? 1.支持向量机(Support Vector Machine,常简称为SVM)是一种监督式学习的方法,可广泛地应用于统计分类以及回归分析.支持向量机属于一般化线性分类器,这族分类器的特点是他们能够同时最小化经验误差与最大化几何边缘区,因此支持向量机也被称为最大边缘区分类器. 2.支持向量机将向量映射到一个更高维的空间里,在这个空间里建立有一个

支持向量机SVM的SMO方法实现

hdu 1163 Eddy's digital Roots Problem Description The digital root of a positive integer is found by summing the digits of the integer. If the resulting value is a single digit then that digit is the digital root. If the resulting value contains two

opencv 支持向量机SVM分类器

支持向量机SVM是从线性可分情况下的最优分类面提出的.所谓最优分类,就是要求分类线不但能够将两类无错误的分开,而且两类之间的分类间隔最大,前者是保证经验风险最小(为0),而通过后面的讨论我们看到,使分类间隔最大实际上就是使得推广性中的置信范围最小.推广到高维空间,最优分类线就成为最优分类面. 支持向量机是利用分类间隔的思想进行训练的,它依赖于对数据的预处理,即,在更高维的空间表达原始模式.通过适当的到一个足够高维的非线性映射,分别属于两类的原始数据就能够被一个超平面来分隔.如下图所示: 空心点和

【转载】支持向量机SVM(一)

支持向量机SVM(一) [转载请注明出处]http://www.cnblogs.com/jerrylead 1 简介 支持向量机基本上是最好的有监督学习算法了.最开始接触SVM是去年暑假的时候,老师要求交<统计学习理论>的报告,那时去网上下了一份入门教程,里面讲的很通俗,当时只是大致了解了一些相关概念.这次斯坦福提供的学习材料,让我重新学习了一些SVM知识.我看很多正统的讲法都是从VC 维理论和结构风险最小原理出发,然后引出SVM什么的,还有些资料上来就讲分类超平面什么的.这份材料从前几节讲的

【转载】支持向量机SVM(二)

支持向量机SVM(二) [转载请注明出处]http://www.cnblogs.com/jerrylead 6 拉格朗日对偶(Lagrange duality) 先抛开上面的二次规划问题,先来看看存在等式约束的极值问题求法,比如下面的最优化问题: 目标函数是f(w),下面是等式约束.通常解法是引入拉格朗日算子,这里使用来表示算子,得到拉格朗日公式为 L是等式约束的个数. 然后分别对w和求偏导,使得偏导数等于0,然后解出w和.至于为什么引入拉格朗日算子可以求出极值,原因是f(w)的dw变化方向受其