【数据挖掘】SVM原理详解及对iris数据集分类实战(超详细 附源码)

简介: 【数据挖掘】SVM原理详解及对iris数据集分类实战(超详细 附源码)

需要源码请点赞关注收藏后评论区留言私信~~~

支持向量机(Support Vetor Machine,SVM)由Vapnik等人于1995年首先提出,在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并推广到人脸识别、行人检测和文本分类等其他机器学习问题中

SVM建立在统计学习理论的VC维理论和结构风险最小原理基础上,根据有限的样本信息在模型的复杂性和学习能力之间寻求最佳平衡,以求获得最好的推广能力。SVM可以用于数值预测和分类

算法原理

支持向量机(Support Vetor Machine,SVM)是一种对线性和非线性数据进行分类的方法。SVM 使用一种非线性映射,把原训练数据映射到较高的维上,在新的维上,搜索最佳分离超平面

由简至繁SVM可分类为三类:线性可分(linear SVM in linearly separable case)的线性SVM、线性不可分的线性SVM、非线性(nonlinear)SVM

SVM可分类为三类:线性可分的线性SVM、线性不可分的线性SVM、非线性SVM。如果训练数据线性可分,则通过硬间隔最大化学习一个线性分类器即线性可分支持向量机,也称为硬间隔支持向量机;如果训练数据近似线性可分,则通过软间隔最大化学习得到一个线性分类器即线性支持向量机,也称为软间隔支持向量机;对于数据非线性可分的情况,通过扩展线性SVM的方法,得到非线性的SVM,即采用非线性映射把输入数据变换到较高维空间,在新的空间搜索分离超平面

1. 数据线性可分的情况

SVM的主要目标是找到最佳超平面,以便在不同类的数据点之间进行正确分类。超平面的维度等于输入特征的数量减去1。图7-5显示了分类的最佳超平面和支持向量(实心的数据样本)

向量到超平面距离公式如下

2.数据非线性可分的情况

在某些情况下,训练数据甚至连近似的线性划分也找不到,线性超平面无法有效划分正类与负类,而是需要超曲面等非线性划分。然而,非线性的优化问题很难求解。通常的做法是将输入向量从输入的空间投射到另一个空间,如图7-6所示。在这个特征空间中,投射后的特征向量线性可分或者近似线性可分,然后通过线性支持向量机的方法求解

然而这样做也带来一个新的问题,即使得投射后的特征向量(近似)线性可分的特征空间维度往往比原输入空间的维度高很多,甚至具有无限个维度。为了解决新特征空间维度高的问题,引入核方法(Kernal Method),在计算中不需要直接进行非线性变换,从而避免由计算高维度向量带来的问题

常用核函数如下图

支持向量机在高维空间中非常高效,即使在数据维度比样本数量大的情况下仍然有效,而且在决策函数中使用了训练集的自己,因此它也是高效利用内存的,但是如果特征数量比样本数量大得多,在选择核函数时就要避免过拟合

SVM算法实战

在sklearn中SVM的算法库分为两类,一类是分类的算法库,包括SVC、NuSVC和LinearSVC 3个类。另一类是回归算法库,包括SVR、NuSVR和LinearSVR 3个类。相关的类都包括在sklearn.svm模块之中

下面利用SV对Iris数据集进行分类

输出结果如下

部分代码如下

import numpy as np
from sklearn import svm
from sklearn import datasets
from sklearn import metrics
from sklearn import model_selection
import matplotlib.pyplot as plt
iris = datasets.load_iris()
x, y = iris.data,iris.target
x_train, x_test, y_train, y_test = model_selection.train_test_split(x, y, random_state = 1, test_size = 0.2)
classifier=svm.SVC(kernel='linear',gamma=0.1,decision_function_shape='ovo',C=0.1)
classifier.fit(x_train, y_train.ravel())
print("SVM-输出训练集的准确率为:", classifier.score(x_train, y_train))
print("SVM-输出测ification_report(y_test,y_hat)
print(classreport)

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
8天前
|
算法 数据挖掘 Python
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
【数据挖掘】层次聚类DIANA、AGNES算法讲解及实战应用(图文解释 超详细)
198 0
|
8天前
|
算法 搜索推荐 数据挖掘
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(续)
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(续)
|
8天前
|
机器学习/深度学习 数据采集 算法
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(二)
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(二)
|
8天前
|
数据可视化 搜索推荐 数据挖掘
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(一)
数据挖掘实战 —— 抖音用户浏览行为数据分析与挖掘(一)
|
8天前
|
机器学习/深度学习 算法 数据挖掘
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
|
8天前
|
机器学习/深度学习 算法 搜索推荐
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(上)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例
|
8天前
|
算法 数据可视化 数据挖掘
【数据挖掘】密度聚类DBSCAN讲解及实战应用(图文解释 附源码)
【数据挖掘】密度聚类DBSCAN讲解及实战应用(图文解释 附源码)
231 1
|
8天前
|
数据采集 算法 搜索推荐
数据挖掘实战:基于KMeans算法对超市客户进行聚类分群
数据挖掘实战:基于KMeans算法对超市客户进行聚类分群
209 0
|
8天前
|
运维 算法 数据挖掘
【数据挖掘】离群点检测方法详解及Sklearn中异常检测方法实战(附源码 超详细)
【数据挖掘】离群点检测方法详解及Sklearn中异常检测方法实战(附源码 超详细)
119 0
【数据挖掘】离群点检测方法详解及Sklearn中异常检测方法实战(附源码 超详细)
|
8天前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】K-Means、K-Means++、ISODATA算法详解及实战(图文解释 附源码)
【数据挖掘】K-Means、K-Means++、ISODATA算法详解及实战(图文解释 附源码)
115 1

热门文章

最新文章