支持向量机是一个点离决策边界越近,离决策面越远的问题

求解的过程主要是通过拉格朗日乘子法,来求解带约束的优化问题,在问题中涉及两个方面,一个是线性的,一个是非线性的,非线性的有

我们平时比较常见的高斯核函数(径向基函数),他的主要做法就是把低维的数据变成高维数据,通过^2的方法

在支持向量基中的参数有 svc__C(松弛因子)和svc__gamma 两个参数,两个参数越大,模型的复杂度也越大

接下来我们使用一组人脸数据来进行模型,我们会进行参数调节

第一步数据载入

from sklearn.datasets import fetch_lfw_people  #从datasets数据包中获取数据
import pandas as pd
import matplotlib.pyplot as plt
faces = fetch_lfw_people(min_faces_per_person=60) #不小于60张图片
print(faces.target_names) #输出照片里的人物名字
print(faces.images.shape) #输出照片的大小, 639张, 62*47表示的是像素点,每个像素点代表的是一个数据

第二步 取前15张图片,画成3行5列的图片

fig, ax = plt.subplots(3, 5)
for i, axi in enumerate(ax.flat):
axi.imshow(faces.images[i], cmap='bone') # cmap 表示配色方案,bone表示苍白的
axi.set(xticks=[], yticks=[], xlabel=faces.target_names[faces.target[i]]) #faces.target[i]对应着0和1标签,
# target_names 的 key 是 0和1...,value是名字
plt.show()

第三步:通过make_pipeline 连接pca,svm函数

from sklearn.svm import  SVC
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline pca = PCA(n_components=150, whiten=True, random_state=42) #whiten确保无相关的输出
svc = SVC(kernel='rbf', class_weight='balanced') #核函数为径向基函数 model = make_pipeline(pca, svc) #连接两个函数, 函数按照先后顺序执行

第四步: 通过GridSearchCV调节svc__C 和 svc__gamma 参数,.best_estimator获得训练好的模型

#把函数分为训练集和测试集
from sklearn.model_selection import train_test_split Xtrain, Xtest, Ytrain, Ytest = train_test_split(faces.data, faces.target, random_state=40) #参数调整svc__C和svc__gamma
from sklearn.model_selection import GridSearchCV #备选参数
param_grid = {'svc__C':[1, 5, 10],
'svc__gamma':[0.0001, 0.0005, 0.001]} grid = GridSearchCV(model, param_grid) #第一个参数是model(模型), 第二个参数是param_grid 需要调整的参数
print(Xtrain.shape, Ytrain.shape)
grid.fit(Xtrain, Ytrain) #建立模型
print(grid.best_params_) #输出模型的参数组合 model = grid.best_estimator_ #输出最好的模型 yfit = model.predict(Xtest) #用当前最好的模型做预测

第五步:对预测结果画图,这里画了4*6的图

fig , ax = plt.subplots(4, 6)  #画出24副图,呈现4行6列的摆放形式

for i, axi in enumerate(ax.flat):
axi.imshow(Xtest[i].reshape(62, 47), cmap='bone')
axi.set(xticks=[], yticks=[])
axi.set_ylabel(faces.target_names[yfit[i]].split()[-1], #取名字的后一个字符,如果预测结果与真实结果相同,贤黑色,否则显红色
color='black'if yfit[i]==Ytest[i] else 'red') plt.show()
fig.suptitle('Predicted Names; Incorrect Labels in Red', size=14) #加上标题 from sklearn.metrics import classification_report #输出精确度,召回值
print(classification_report(Ytest, yfit, target_names=faces.target_names))

第六步:画出一个混淆矩阵的图

from sklearn.metrics import  confusion_matrix  #做混淆矩阵
import seaborn as sns
mat = confusion_matrix(Ytest, yfit) #Ytest表示待测标签, yfit表示预测结果 sns.heatmap(mat.T, square=True, annot=True, fmt='d', cbar=False,
            xticklabels=faces.target_names,
yticklabels=faces.target_names)
plt.xlabel('true label')
plt.ylabel('predicted label')
plt.show()

跟我学算法-SVM(支持向量机)的更多相关文章

  1. 跟我学算法-svm支持向量机算法推导

    Svm算法又称为支持向量机,是一种有监督的学习分类算法,目的是为了找到两个支持点,用来使得平面到达这两个支持点的距离最近. 通俗的说:找到一条直线,使得离该线最近的点与该线的距离最远. 我使用手写进行 ...

  2. 机器学习 - 算法 - SVM 支持向量机

    SVM 原理引入 支持向量机( SVM,Support Vector Machine ) 背景 2012年前较为火热, 但是在12年后被神经网络逼宫, 由于应用场景以及应用算法的不同, SVM还是需要 ...

  3. 机器学习 - 算法 - SVM 支持向量机 Py 实现 / 人脸识别案例

    SVM 代码实现展示 相关模块引入 %matplotlib inline import numpy as np import matplotlib.pyplot as plt from scipy i ...

  4. 转:机器学习中的算法(2)-支持向量机(SVM)基础

    机器学习中的算法(2)-支持向量机(SVM)基础 转:http://www.cnblogs.com/LeftNotEasy/archive/2011/05/02/basic-of-svm.html 版 ...

  5. SVM 支持向量机算法-原理篇

    公号:码农充电站pro 主页:https://codeshellme.github.io 本篇来介绍SVM 算法,它的英文全称是 Support Vector Machine,中文翻译为支持向量机. ...

  6. SVM 支持向量机算法-实战篇

    公号:码农充电站pro 主页:https://codeshellme.github.io 上一篇介绍了 SVM 的原理和一些基本概念,本篇来介绍如何用 SVM 处理实际问题. 1,SVM 的实现 SV ...

  7. 深入浅出理解SVM支持向量机算法

      支持向量机是Vapnik等人于1995年首先提出的,它是基于VC维理论和结构风险最小化原则的学习机器.它在解决小样本.非线性和高维模式识别问题中表现出许多特有的优势,并在一定程度上克服了" ...

  8. 机器学习实战 - 读书笔记(06) – SVM支持向量机

    前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第6章:SVM 支持向量机. 支持向量机不是很好被理解,主要是因为里面涉及到了许多数学知 ...

  9. SparkMLlib分类算法之支持向量机

    SparkMLlib分类算法之支持向量机 (一),概念 支持向量机(support vector machine)是一种分类算法,通过寻求结构化风险最小来提高学习机泛化能力,实现经验风险和置信范围的最 ...

随机推荐

  1. java并发--CountDownLatch、CyclicBarrier和Semaphore

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法. 以下 ...

  2. hadoop入门手册3:Hadoop【2.7.1】初级入门之命令指南

    问题导读1.hadoop daemonlog管理员命令的作用是什么?2.hadoop如何运行一个类,如何运行一个jar包?3.hadoop archive的作用是什么? 概述 hadoop命令被bin ...

  3. python(一):python语言基础

    一.python语言基本的8个要素 Python语言的8个要素:数据类型.对象引用.组合数据类型.逻辑操作符.运算操作符.控制流语句.输入/输出.函数的创建与引用.除此之外还有一个非常重要且无处不在的 ...

  4. C++ set容器

    STL中的set容器的一点总结:(元素唯一,且排序) 1.关于set (头文件:<set>) C++ STL 之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, strin ...

  5. 接口测试基础——第7篇 简单的Python知识普及(二)之装饰器

    今天我们来学习python里面的“装饰器” 1.我在函数test运行前想先打印一些内容怎么办? def func(param):    print u"打印的内容"    para ...

  6. cnpm 私服搭建(基于docker)

    备注:   使用docker-compose 进行安装 1. 代码clone git clone https://github.com/cnpm/cnpmjs.org.git 2. docker bu ...

  7. bzoj 4552 [Tjoi2016&Heoi2016]排序——二分答案

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4552 二分答案,把 >= mid 的设成1.< mid 的设成0,之后排序就变成 ...

  8. IIS6自带FTP安装及配置方法

    参考:http://v.huweishen.com/video/9.html ·IIS自带的FTP服务是最安全的,不会像Serv-U那样存在各种漏洞:但其配置过程也比较复杂. ·本节将以虚拟目录方式, ...

  9. jdk1.8新特性之方法引用

    方法引用其实就是方法调用,符号是两个冒号::来表示,左边是对象或类,右边是方法.它其实就是lambda表达式的进一步简化.如果不使用lambda表达式,那么也就没必要用方法引用了.啥是lambda,参 ...

  10. GNU Radio安装教程: Ubuntu14.04 + uhd3.10.0 + gnuradio3.7.10.1

    1. 更新和安装依赖项 在编译安装uhd和gnuradio之前,确保已安装所需依赖项.Ubuntu系统运行: sudo apt-get update 安装UHD和GNURadio所需依赖项: On U ...