svm解决兵王问题_机器学习: svm

本周学习内容为SVM的基本原理和运用。

参考资料:耳东陈:零基础学SVM—Support Vector Machine(一)

1、什么是SVM

SVM的全称是Support Vector Machine,即支持向量机,主要用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种。SVM要解决的问题可以用一个经典的二分类问题加以描述。如图1所示,红色和蓝色的二维数据点显然是可以被一条直线分开的,在模式识别领域称为线性可分问题。然而将两类数据点分开的直线显然不止一条,这是线性分类器的特征。不同的分类方案,分类直线到两类向量之间的面积是不一样的,术语称为“决策面”,svm试图找到一个直线量两个类分类,并且面积最大的最优的解,而这个直线取决于两个类型最边界的三个向量。

354245dd6f503d042651da53e0e1f2fb.png
线性分类器

7921c8bf41e3ee054ec97912030ae741.png
svm分类器

16c4c41ea1749b9e7e2073d345047cb9.png
svm数学模型和约束

svm的优缺点:

优点:模型训练鲁棒性很强,对特征向量、噪音数据不敏感,预测快,占内存少。

缺点:训练耗时,时间复杂度是O(N的立方),至少是N的平方,对于太多维度的寻里昂非常耗时和耗费资源。

svm是一种非常优秀的分类器,老师说在深度学习出现之前,它统治机器学习领域20年。

2、svm的优化

现实场景中,使用svm训练可能遇到很多的问题,比如奇怪的数据,比如异常数据outlier的样本数据,一种分类中存在另一种分类的样本,我们需要通过带松弛变脸的svm进行处理,避免无解。松弛变量是常数C,常数C可控制松弛的量度。

e7b4404ee58531fcc56598d79f34bee9.png
带松弛变量的svm

fc174e8b1833d310fea9292aee4e69a0.png
松弛变量数学模型。

SVM虽然解决的是二分类问题,但可以扩展到多个分类问题。

1)、可以对每个需要识别的类型分别训练一个分类模型,用于预测的时候,哪个分类器的预测值高(wtix),就取哪个。

2)、对K个类别,训练k*(k-1)/2个Svm,预测的时候采用投票方式决定,哪个次数多选哪个。

以上方法适用于每种分类模型。

3、作业:

用特征数据预测蘑菇是否有毒。

import pandas as pd
import numpy as np# 导入数据
mush_df = pd.read_csv('./data/mushrooms.csv')# 将值从字母转换为
mush_df_encoded = pd.get_dummies(mush_df) ##独热(ont-hot)编码,将离散的值转(ABC)换为数字mush_df.head()# 将特征和类别标签分布赋值给 X 和 y
X_mush = mush_df_encoded.iloc[:,2:]
y_mush = mush_df_encoded.iloc[:,1]
#查看特征数据
X_mush.head()
#查看标签
y_mush.head()
#训练svm
from sklearn.svm import SVC
from sklearn.decomposition import PCA
from sklearn.pipeline import make_pipeline# TODO
pca = PCA(n_components=100, whiten=True, random_state=42)
##这里采用的核函数为线性分类器linear,经过测试效果比非线性的好
svc = SVC( kernel='linear',class_weight='balanced') 
model = make_pipeline(pca, svc)
from sklearn.model_selection import train_test_split
Xtrain, Xtest, ytrain, ytest = train_test_split(X_mush, y_mush, random_state=41)
from sklearn.model_selection import GridSearchCV# TODO
param_grid = {'svc__C': [1, 5, 10, 50]}
grid = GridSearchCV(model, param_grid)%time grid.fit(Xtrain, ytrain)
print(grid.best_params_)
# TODO
model = grid.best_estimator_
yfit = model.predict(Xtest)
from sklearn.metrics import classification_report
print(classification_report(ytest, yfit))
##结果展示,全是1。。。
precision    recall  f1-score   support0       1.00      1.00      1.00      10471       1.00      1.00      1.00       984avg / total       1.00      1.00      1.00      2031

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/427817.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django基础11(Django中form表单)

Form介绍 之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。 与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户输入的…

mysql上k8s_通过搭建MySQL掌握k8s(Kubernetes)重要概念(上):网络与持久卷

上一篇"通过实例快速掌握k8s(Kubernetes)核心概念"讲解了k8s的核心概念,有了核心概念整个骨架就完整了,应付无状态程序已经够了,但还不够丰满。应用程序分成两种,无状态和有状态的。一般的前段和后端程序都是无状态的&a…

python简单笔记

Remarks:python中注意缩进(Tab键或者4个空格) print(输出) 格式:print(values) 字符串、数字、变量等都可以输出: 实例: print(1)->1 print(11)->2 a …

mysql字符集latin1_mysql的latin1字符集支持所有字符集

1. 先来看看latin1 (参考百度百科)Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符&#…

latex参考文献bib基本格式_在Latex中利用.bib进行参考文献管理

使用bibtex与jabref简化论文写作中的文献管理和引用bibtex是latex(中文Ctex可在www.ctex.org找到)的一个组件,用于文献引用。.bib是文献引用信息文件。1. IEEEtran包(Package)的下载打开WinEdt。选择Accessories->MiKTex->MiKTex Package Manager,…

BZOJ2302 [HAOI2011]Problem c 【dp】

题目 给n个人安排座位,先给每个人一个1~n的编号,设第i个人的编号为ai(不同人的编号可以相同),接着从第一个人开始,大家依次入座,第i个人来了以后尝试坐到ai,如果ai被占据了&#xff…

mysql 3_mysql3

回顾字段类型(列类型): 数值型, 时间日期型和字符串类型数值型: 整型和小数型(浮点型和定点型)时间日期型: datetime, date,time,timestamp, year字符串类型: 定长, 变长, 文件字符串(text和blob), 枚举和集合Mysql记录长度: 65535个字节, varchar达不到理论长度, NULL占用一个…

H5+App开发框架汇总

MUI:http://dcloudio.github.io/mui/(使用H5app模式,号称是最接近原生,但是目前在手机和电脑浏览器无法使用) app-framework:http://app-framework-software.intel.com/ (有Android、iOS等主题样…

C#-interface

接口成员不能有访问修饰符,默认为public。接口成员只能给出签名,不能有具体实现。继承接口的类必须全部实现接口成员。接口是多继承的。实现继承的过程中,基类必须放在所有接口的最前面。接口不能实例化对象。接口是引用类型。转载于:https:/…

【Alpha阶段】第一次Scrum Meeting

PS:因为安装android的SDK插件出现问题,在eclipse和android studio中安装都不成功,项目不能运行,且一直在下载一些插件,安装了3天都没有成功,按照网上的解决办法进行解决都没有成功,导致项目不能…

mysql galera 下载_Mysql-Galera Cluster

使用Galera Cluster需要下载包含wsrep补丁的mysql版本;官网下载地址:http://galeracluster.com/downloads/安装前要卸载之前安装的mariadb或者mysql;或者迁移也可以,不过就是另一套操作了!具体的安装过程官网描述的很完…

ext4fs error mysql_请教一个 Linux 挂在磁盘阵列报错 EXT4-fs error 问题

从昨天开始 linux 通过光纤直接连接磁盘阵列,会出现磁盘阵列掉了的情况,然后机器会重启,本来重启后,rose ha 会自动挂载磁盘阵列,现在由于 rose ha 也出了点问题,导致不切换备用服务器,主服务器…

hashtable和hashmap的区别?

相同点: 1.都实现了map接口 2.都是键值对的方式存储 3.都是通过单链表解决冲突的 4. 都实现了Serializable接口和Cloneable接口,因此它支持序列化和被克隆。 不同点: 1.hashtable不支持键-值为null,而hashmap支持。 2.hashmap是线程不安全&am…

mysql数据库的各种锁_关于MySQL各类锁的总结

想要用好 MySQL,索引与锁是一个绕不开的话题。最近一直在维护以前的业务系统,线上频繁报出数据库死锁的异常警告,为了排查以及规避死锁的问题,因此对 MySQL 的锁(Innodb引擎)做了一个比较深入学习,顺便加深自己对 MySQ…

581. Shortest Unsorted Continuous Subarray连续数组中的递增异常情况

[抄题]: Given an integer array, you need to find one continuous subarray that if you only sort this subarray in ascending order, then the whole array will be sorted in ascending order, too. You need to find the shortest suc…

python enumerate函数返回值_python中enumerate函数用法实例分析

本文实例讲述了python中enumerate函数用法。分享给大家供大家参考。具体分析如下:今日发现一个新函数 enumerate 。一般情况下对一个列表或数组既要遍历索引又要遍历元素时,会这样写: for i in range (0,len(list)):print i ,list[i]但是这种…

Java异常处理原则与技巧总结

一 处理原则 Java异常代码中我们使用异常的目的是让异常的异常类型来提示“什么”被抛出了--- 即出了什么问题;用异常的栈打印信息来跟踪异常在“哪里”抛出 --- 即哪里出了问题; 异常提示信息来提示“为什么”会抛出 --- 即出问题的原因。在对异常进行…

python三阶魔方_三阶魔方自动求解及动态可视化matlab代码

三阶魔方自动求解及动态可视化matlab代码思路与步骤三阶魔方有6个面,每个面有333\times333小块,用一个6336\times3\times3633的矩阵来保存魔方的状态;定义412种魔方旋转行为:整体旋转(左右上下共4种方式AaCc),侧面(6个…

Qt 常用类——QStandardItemModel

转载:落叶知秋时 类QabstractItemModel,QabstractListModel,QAbstractTableModel不保存数据,用户需要从这些类派生出子类,并在子类中定义某种数据结构来保存数据。 与此不同,类QStandardItemModel负责保存数…

thinkphp mysql 中文_耗时5天解决thinkphp连接mysql中文乱码的问题

坑大,或者不大,它就在那里,等着你进。先前修改成熟的一个基于thinkphp3.1.2的后台框架,里面有我的autoCode,本来在新项目上不想再用这么落后的版本,但考虑到后台项目不对外使用,重点是autoCode是…