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 …

【Alpha阶段】第一次Scrum Meeting

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

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三阶魔方_三阶魔方自动求解及动态可视化matlab代码

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

Qt 常用类——QStandardItemModel

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

ad19原理图标注_AD19中原理图的模板如何进行编辑?

我们在进行原理图设计的时候,有时候不想去用软件自带默认的模板,想要用自己设计的模板,就涉及到我们的模板怎么去编辑的呢?我们应该如何去编辑原理图自己设计的模板?操作步骤是怎么的呢?我们今天就以AD19为…

mysql+秘密_mysql不被人知的秘密

http://blog.csdn.net/yueguanghaidao/article/details/69333872011先建立两张表。1.student表2.grade表一:mysql的复制技术1.表与数据的复制->>实现表结构和数据的同步create table desttable select * from srctable;(desttable:目标表,srctable…

mysql一个表几亿数据_如何在mysql 造1亿条记录的大容量数据表?

背景及目标:现有数据1000w单表,为压力测试准备1亿条数据。步骤:1.将1000w条记录,除id外都导入到多个文件中://DELIMITERDROP PROCEDURE if EXISTS createManyTable;create PROCEDURE createManyTable()BEGINDECLARE i …

windows键盘在mac上怎么识别_Mac电脑怎么使用pc键盘?

苹果电脑一般需要使用配套的mac键盘,毕竟按键和普通pc键盘不一样。但是总会遇到一些情况,比如配套的mac键盘坏了,而刚好有一个pc键盘,那么这时候苹果电脑要怎么用pc键盘呢?这边小编跟大家介绍mac电脑连接pc键盘以及设置…

LOJ#6002. 「网络流 24 题」最小路径覆盖

模板。 1 #include<iostream>2 #include<cstring>3 #include<cstdio>4 //#include<time.h>5 //#include<complex>6 //#include<set>7 //#include<queue>8 #include<algorithm>9 #include<stdlib.h>10 using namespace s…

zabbix mysql设置中文乱码_解决zabbix监控因php问题导致图形界面中文乱码方法

解决因编译php中添加了-enable-gd-jis-conv选项导致Zabbix监控系统图形界面中文乱码问题现象&#xff1a;php编译参数&#xff1a;说明&#xff1a;如果PHP编译时启用–enable-gd-jis-conv选项的话&#xff0c;那么非ASCII字符(例如汉字、拼音、希腊文和箭头) 会被当成EUC-JP编…

熟悉常用的HDFS操作

一、Hadoop提供的Shell命令完成相同任务&#xff1a; 在本地Linux文件系统的“/home/hadoop/”目录下创建一个文件txt&#xff0c;里面可以随意输入一些单词.在本地查看文件位置&#xff08;ls&#xff09;在本地显示文件内容使用命令把本地文件系统中的“txt”上传到HDFS中的当…

mysql 低端_mysql入门

相关了解(重点内容从标题一开始)目前主流数据库有:sqlserver, mysql, Qracle, SQLite, Access, MS SQL Server等, 我主要说的是mysql;以下几点需要记住!!!SQL包括了所有对数据库的操作, 主要由4个部分组1. 数据库定义语言(DDL): 用于定义和管理数据库对象, 包括数据库, 基本表,…

阿里云服务器由于被检测到对外攻击,已阻断该服务器对其它服务器端口的访问...

问题&#xff1a; (系统&#xff1a;CentOS 7.2 ) 前几天在阿里云服务器安装了Redis, 刚开始没有设置redis密码, 后台阿里云发送多次邮件提示如下&#xff1a; 经过几次波折才发现并彻底解决了问题&#xff1a; 原因&#xff1a; 估计是因为 Redis服务开启时没有设置密码 &…

批量找注入 python3+sqlmap结合

注入一直都是用sqlmap 导致本来就不怎么精通的手工注入现在就忘的一干二净 想实战练习 却一时又找不到有注入的网站 于是便有了这篇文章 想找个批量获取域名链接的工具 但都是只是获取域名而已 都没获取后面的参数 于是自己写了个只获取bing前10页的结果 输入q 结束循环…

golang 反射

参考&#xff1a;|--http://blog.51cto.com/speakingbaicai/1707637 |--https://studygolang.com/articles/6324 反射是在golang程序运行时检查变量所具有类型的一种机制。由于反射可以得出关于变量结构的数据&#xff08;即“关于数据的数据”&#xff09;&#xff0c;所以这也…

java硬件编程_关于JAVA并发编程你需要知道的——硬件篇

无论程序语言如何千变万化&#xff0c;他们都深深地根植于目前的计算机体系结构。左图是intel CPU的三级高速缓存设计&#xff0c;由于高速缓存对程序员基本不可见&#xff0c;因此可以抽象为右图。缓存的设计首先还是先谈谈左图。L1-cache分为两部分&#xff0c;i-cache存储指…

net Core做一个webApi的简单实例

用NetCore 和Dapper 和mySql做一个简单的实例&#xff0c; 一准备工作 1&#xff1a;VS2017windos系统&#xff0c;也可以用其他的操作系统和工具 2&#xff1a;一台Cenetos的虚拟机或者虚拟机 二&#xff1a;开始 1&#xff1a;用微软官方的netCore的ToDo项目改造&#xff0c;…