数据挖掘-支持向量机(SVM)+代码实现

简介: 数据挖掘-支持向量机(SVM)+代码实现

从例子出发

949598e86d5e4428a03f671a1848c822.png

算法原理


支持向量机(SVM)是一类按监督学习方式对数据进行二元分类的广义线性分类器,其决策边界是对学习样本求解的最大边距超平面,可以将问题化为一个求解凸二次规划的问题。与逻辑回归和神经网络相比,支持向量机,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。


具体来说就是在线性可分时,在原空间寻找两类样本的最优分类超平面。在线性不可分时,加入松弛变量并通过使用非线性映射将低维度输入空间的样本映射到高维度空间使其变为线性可分,这样就可以在该特征空间中寻找最优分类超平面。


287e6eb16fc34820926ffa17bd658e1e.png92894f310c62422e9b7b73330f532188.png


超平面


0d28e72c3d9c4313a1a63522093f44e1.png


支持向量


假设找到一条线可以分割红豆和绿豆

红豆和绿豆中距离这条线最近的几个样本点被称为支持向量(Support Vector)

这些点到这条线的距离称为间隔

在决定最佳超平面时只有支持向量起作用,而其他数据点并不起作用


如何处理不清晰的边界


d53b01a0ce9a46188c001c6c69c66207.png

36625649adf144859fa25dfb7b6d3d3e.png

非线性可分的情况

4a60ff816d98453ba2faa36d119b092a.png

SVM中采取的办法是:

把不可划分的样本映射到高维空间中

在SVM中借助“核函数”,来实现映射到高维的操作


常见的核函数

544ccf667e4a4e368e10da674ba67f2f.png


b0475a4560834674b7d357aa15267e4f.png

算法的优点

c99f8c2d60904992b7581bddb36777c7.png

支持向量机算法可以解决小样本情况下的机器学习问题,简化了通常的分类和回归等问题。

由于采用核函数方法克服了维数灾难和非线性可分的问题,所以向高维空间映射时没有增加计算的复杂性。换句话说,由于支持向量计算法的最终决策函数只由少数的支持向量所确定,所以计算的复杂性取决于支持向量的数目,而不是样本空间的维数。

支持向量机算法利用松弛变量可以允许一些点到分类平面的距离不满足原先要求,从而避免这些点对模型学习的影响。


算法的缺点


43ec7eddfa7e46a3b2cb15de63b70bce.png

支持向量机算法对大规模训练样本难以实施。这是因为支持向量机算法借助二次规划求解支持向量,这其中会涉及m阶矩阵的计算,所以矩阵阶数很大时将耗费大量的机器内存和运算时间。

经典的支持向量机算法只给出了二分类的算法,而在数据挖掘的实际应用中,一般要解决多分类问题,但支持向量机对于多分类问题解决效果并不理想。

SVM算法效果与核函数的选择关系很大,往往需要尝试多种核函数,即使选择了效果比较好的高斯核函数,也要调参选择恰当的参数。另一方面就是现在常用的SVM理论都是使用固定惩罚系数C,但正负样本的两种错误造成的损失是不一样的。


代码的实现


from sklearn import datasets
from sklearn import svm
#引入svm包
import numpy as np
np.random.seed(0)
iris=datasets.load_iris()
iris_x=iris.data
iris_y=iris.target
indices= np.random.permutation(len(iris_x))
iris_x_train = iris_x[indices[:-10]]
iris_y_train= iris_y[indices[:-10]]
iris_x_test = iris_x[indices[-10:]]
iris_y_test = iris_y[indices[-10:]]
#使用线性核SVC是分类支持向量机的意思,另外还有SVR是回归支持向量机
clf = svm.SVC(kernel = 'linear')
clf.fit(iris_x_train,iris_y_train)#拟合
#调用该对象的测试方法,主要接收一个参数:测试数据集


72f6b178b58744ce8c5a85077856ef05.png


iris_x__test = iris_x[indices[-10:]]
iris_y_test = iris_y[indices[-10:]]
#使用线性核SVC是分类支持向量机的意思,另外还有SVR是回归支持向量机
clf = svm.SVC(kernel= 'linear')
clf.fit(iris_x_train,iris_y_train) #拟合
#调用该对象的测试方法,主要接收一个参数:测试数据集
iris_y_predict= clf.predict(iris_x_test)
#调用该对象的打分方法,计算出准确率
score=clf.score(iris_x_test,iris_y_test,sample_weight=None)
print('iris_y_predict=')
print(iris_y_predict)
print('iris_y_test= ')
print(iris_y_test)
print('Accuracy:"',score)

a41224cb2c7d4972a8e820b4a10576cd.png


总结


支持向量机算法分类和回归方法的中都支持线性性和非线性类型的数据类型。非线性类型通常是二维平面不可分,为了使数据可分,需要通过一个函数将原始数据映射到高维空间,从而使得数据在高维空间很容易可分,需要通过一个函数将原始数据映射到高维空间,从而使得数据在高维空间很容易区分,这样就达到数据分类或回归的目的,而实现这一目标的函数称为核函数。


工作原理:当低维空间内线性不可分时,可以通过高位空间实现线性可分。但如果在高维空间内直接进行分类或回归时,则存在确定非线性映射函数的形式和参数问题,而最大的障碍就是高维空间的运算困难且结果不理想。通过核函数的方法,可以将高维空间内的点积运算,巧妙转化为低维输入空间内核函数的运算,从而有效解决这一问题。

目录
相关文章
|
8月前
|
机器学习/深度学习 算法 数据挖掘
【数据挖掘】SVM原理详解及对iris数据集分类实战(超详细 附源码)
【数据挖掘】SVM原理详解及对iris数据集分类实战(超详细 附源码)
470 1
|
8月前
|
机器学习/深度学习 算法 数据挖掘
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(下)
|
8月前
|
机器学习/深度学习 算法 搜索推荐
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例(上)
【视频】支持向量机算法原理和Python用户流失数据挖掘SVM实例
|
机器学习/深度学习 数据挖掘 调度
【数据挖掘torch】 基于LSTM电力系统负荷预测分析(Python代码实现)
【数据挖掘torch】 基于LSTM电力系统负荷预测分析(Python代码实现)
417 0
|
机器学习/深度学习 算法 数据挖掘
数据挖掘-决策树算法+代码实现(七)
数据挖掘-决策树算法+代码实现(七)
322 0
数据挖掘-决策树算法+代码实现(七)
|
算法 数据挖掘
数据挖掘-KNN算法+sklearn代码实现(六)
数据挖掘-KNN算法+sklearn代码实现(六)
131 0
数据挖掘-KNN算法+sklearn代码实现(六)
|
机器学习/深度学习 算法 数据挖掘
数据挖掘十大经典算法——Svm
支持向量机,英文为Support Vector Machine,简称SV机(论文中一般简称SVM)。它是一 种监督式学习的方法,它广泛的应用于统计分类以及回归分析中。
1881 0
|
数据可视化 数据挖掘 Python
【Python数据挖掘课程】三.Kmeans聚类代码实现、作业及优化
这篇文章直接给出上次关于Kmeans聚类的篮球远动员数据分析案例,同时介绍这次作业同学们完成的图例,最后介绍Matplotlib包绘图的优化知识。希望这篇文章对你有所帮助,尤其是刚刚接触数据挖掘以及大数据的同学,同时准备尝试以案例为主的方式进行讲解。如果文章中存在不足或错误的地方,还请海涵~
7682 0
|
算法 Java 数据挖掘
数据挖掘apriori算法Java代码实现
[java] view plaincopyprint? package apriori;   import java.util.*;   import java.io.*;   public class Aprioti {              public static int K_Item=3;//产生的频繁项集
2927 0

热门文章

最新文章