基于sklearn的线性支持向量机分类器原理代码实现

原理

分类器

机器学习的分类器,均可以看成一个或一组超平面,将label不同的数据点在数据空间中分开。对于线性可分问题,属于相同label的数据点在数据空间中可以看成是“类聚”的,即具有相同label的点会聚在一起。这样,分类效果最好的超平面应该满足:对于其分割的两种label,距离最近的两个不同label的数据点距离超平面的距离都足够大,即超平面离两个类聚的空间都足够远。

支持向量

对于支持向量机来说,最关心的并不是所有数据的分布情况,而是所谓类聚空间边界的相互位置,这些边界上的数据点,即两个空间间隔最小的两个数据点被称为支持向量,支持向量机分类器就是针对这些点优化的分类器

核函数

以上的所有说明都是针对线性可分问题的,当处理线性不可分问题的时候,线性分类器就无能为力了。那么需要使用一个叫核函数的东西,将线性不可分问题变成线性可分问题。核函数是一种对应关系,可以将数据映射到更高的维度上去,即认为:在当前维度不可分的问题,到达更高维度的时候有可能变的线性可分。在支持向量机的范畴中,核函数是一种先验,即人工在训练前就指定的。在当前的神经网络算法中,可以将输出层看成线性分类器,将隐藏层看成核函数,这样的视角下神经网络中的核函数是通过数据训练出来的

代码实现

载入手写体数据集

from sklearn.datasets import load_digits
digits = load_digits()
print(digits.data.shape)
print(type(digits),type(digits.data))
(1797, 64)
<class 'sklearn.utils.Bunch'> <class 'numpy.ndarray'>

使用sklearn.datasets中的load_digits()函数,可以载入8*8的手写数据集

import matplotlib.pyplot as plt
dis = digits.data[:9,:]
dis = dis.reshape([-1,8,8])
for i in range(9):
    plt.subplot(331 + i)
    plt.imshow(dis[i])
plt.show()
print(digits.target[:9])

digits_num.png

[0 1 2 3 4 5 6 7 8]

上面是使用matplotlib打印出的前9个数据的样子,可以发现已经非常不清晰了(顺便提一句MNIST比这个不知道高到那里去了,上神经网络还不是随便98%的准确率)

数据预处理

数据分割:75%训练-25%预测

from sklearn.cross_validation import train_test_split
x_train,x_test,y_train,y_test = train_test_split(digits.data,digits.target,test_size=0.25,random_state=1)
print(x_train.shape,y_train.shape)
(1347, 64) (1347,)

数据标准化

from sklearn.preprocessing import StandardScaler
ss = StandardScaler()
x_train = ss.fit_transform(x_train)
x_test = ss.transform(x_test)

调用支持向量机分类

from sklearn.svm import LinearSVC
lsvc = LinearSVC()
lsvc.fit(x_train,y_train)
LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True,
     intercept_scaling=1, loss='squared_hinge', max_iter=1000,
     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,
     verbose=0)

模型评估

使用自带评估工具

print(lsvc.score(x_test,y_test))
0.962222222222

使用sklearn专用工具

from sklearn.metrics import classification_report
y_pre = lsvc.predict(x_test)
print(classification_report(y_test,y_pre,target_names=digits.target_names.astype(str)))
             precision    recall  f1-score   support

          0       0.98      0.98      0.98        53
          1       0.98      0.98      0.98        42
          2       1.00      1.00      1.00        41
          3       0.98      0.92      0.95        52
          4       0.94      1.00      0.97        47
          5       0.92      0.92      0.92        39
          6       1.00      1.00      1.00        43
          7       1.00      0.94      0.97        48
          8       0.92      0.95      0.93        37
          9       0.90      0.94      0.92        48

avg / total       0.96      0.96      0.96       450

tips:可以发现有意思的一点:数字2和6是机器看来与其他数字最不同的

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

开发 | 用 Kaggle 经典案例教你用 CNN 做图像分类!

前言 在上一篇专栏中,我们利用卷积自编码器对 MNIST 数据进行了实验,这周我们来看一个 Kaggle 上比较经典的一个图像分类的比赛 CIFAR( CIFA...

4096
来自专栏yl 成长笔记

图形搜索中用到的机器学习基础介绍

针对目标图像(具有统一特征的图像),进行基于深度学习技术的模型训练,通过调优模型结构与参数,得到对于指定图像具有提取特征信息的模型 M。将库中所有图像通过 M ...

903
来自专栏PPV课数据科学社区

译:支持向量机(SVM)及其参数调整的简单教程(Python和R)

一、介绍 数据分类是机器学习中非常重要的任务。支持向量机(SVM)广泛应用于模式分类和非线性回归领域。 SVM算法的原始形式由Vladimir N.Vapnik...

7498
来自专栏决胜机器学习

卷积神经网络(三) ——inception网络、迁移学习

卷积神经网络(三) ——inception网络、迁移学习 (原创内容,转载请注明来源,谢谢) 一、Inception网络 1、简介 前面的文章中,有各种的卷积模...

4198
来自专栏SIGAI学习与实践平台

动手训练模型系列:过拟合与训练集规模

loss值采用Cross_entropy计算,表征训练/测试样本与实际训练/测试分类结果的总误差。

1532
来自专栏LhWorld哥陪你聊算法

【深度学习篇】--神经网络中的卷积神经网络

Convolutional neural networks  视觉皮层、感受野,一些神经元看线,一些神经元看线的方向,一些神经元有更大的感受野,组合 底层的图案...

911
来自专栏小詹同学

深度学习入门笔记系列 ( 四 )

本系列将分为 8 篇 。今天是第四篇 。总是理论有些枯燥 ,今天来动手基于 TF 框架实现两个简单的案例 ,以小搏大熟悉一下整个过程 。整体来说 ,训练神经网络...

822
来自专栏LhWorld哥陪你聊算法

【深度学习篇】--神经网络中的池化层和CNN架构模型

降采样subsample,shrink(浓缩),减少计算负荷,减少内存使用,参数数量减少(也可防止过拟合) 减少输入图片大小(降低了图片的质量)也使得神经网络可...

2592
来自专栏计算机视觉与深度学习基础

【深度学习】谷歌deepdream原理及tensorflow实现

什么是DeepDream? DeepDream是谷歌发布的对卷积神经网络(CNN)进行可视化的方法,当然它的用途不仅限于此,我们可以通过它让机器“做梦”,以下是...

4324
来自专栏锦小年的博客

3. R语言随机数生成

1. 均匀分布 函数: runif(n, min=0, max=1),n 表示生成的随机数数量,min 表示均匀分布的下限,max 表示均匀分布的上限,若省略参...

36710

扫码关注云+社区

领取腾讯云代金券