百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分类 > 正文

支持向量机(SVM)说明及示例(支持向量机有哪些优缺点)

ztj100 2024-11-08 15:06 23 浏览 0 评论


支持向量机(SVM)可以解决支持分类和回归问题,这两个问题的解决都是通过构造函数h来实现的,该函数将输入向量x与输出y进行匹配:y = h(x )

优缺点

优点:该算法可以基于内核对线性和非线性问题的极限进行建模。它对于“过拟合”也非常可行,尤其是在大空间中。

劣势:支持向量机需要大量的内存,由于选择正确的核(kernel)很重要,所以很难调整,而且在相当大的数据集下也无法获得良好的结果。

简要说明

假设我们有6点的数据集,如下所示

你可以看到它们是线性可分的,但问题是有成千上万的直线可以做到这一点

所有这些线均有效,并且可以100%正确的进行分类。但问题是,这些线是有效的,但不是最优的。

如下图所示,它们的原理很简单:它们的目的是使用尽可能“简单”的边界将数据分离到类中,从而使不同数据组之间的距离和它们之间的边界达到最大。这个距离也被称为“margin”,支持向量机因此被称为“wide margin separators”,“支持向量”是最接近边界的数据。

要使用的机器学习数据集

1)进行分类的SVM:我们将使用“ Social Network Ads”机器学习数据集,这是此数据集的链接(https://www.kaggle.com/rakeshrau/social-network-ads)。数据集由5列组成(User ID、Gender、 Age、 Estimated Salary 和 Purchased),共有400行。

2)第二个SVM进行回归:我们将使用“Position Salaries”机器学习数据集,这是此数据集(https://www.kaggle.com/farhanmd29/position-salaries)的链接。数据集由3列组成(Position、 Level、Salary),有10行。

要达到的结果

分类:可视化并识别不同类,并按数据集绘制分界线以进行测试

回归:可视化数据点并绘制回归线,并预测level为4.5和8.5员工的薪水

遵循的步骤

分类

  1. 导入必要的库
  2. 导入数据集
  3. 将数据分为训练集和测试集
  4. 根据需要建立特征缩放
  5. 从SVM库创建用于分类的SVC对象
  6. 拟合数据集(训练集)
  7. 预测结果(测试集)
  8. 评估机器学习模型

回归

  1. 导入必要的Python库
  2. 导入机器学习数据集
  3. 根据需要建立特征缩放
  4. 从SVM库创建用于回归的SVC对象
  5. 拟合数据集
  6. 预测结果

算法实现(分类)

这部分代码进行了数据预处理,特征缩放,将数据划分为训练集和测试集,然后从支持向量机类中声明我们的SVC分类模型以进行拟合和预测

# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# Importing the dataset
dataset = pd.read_csv('Social_Network_Ads.csv')
X = dataset.iloc[:, [2, 3]].values
y = dataset.iloc[:, 4].values

# Splitting the dataset into the Training set and Test set
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.25, random_state = 0)

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)

# Fitting classifier to the Training set
from sklearn.svm import SVC
classifier = SVC(random_state=0) # for non-linear model use this parametre kernel='rbf'
classifier.fit(X_train, y_train)

# Predicting the Test set results
y_pred = classifier.predict(X_test)

# Making the Confusion Matrix
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, y_pred)

数据可视化部分的Python代码如下:

# Visualising the Training set results
from matplotlib.colors import ListedColormap
X_set, y_set = X_train, y_train
X1, X2 = np.meshgrid(np.arange(start = X_set[:, 0].min() - 1, stop = X_set[:, 0].max() + 1, step = 0.01),
                     np.arange(start = X_set[:, 1].min() - 1, stop = X_set[:, 1].max() + 1, step = 0.01))
plt.contourf(X1, X2, classifier.predict(np.array([X1.ravel(), X2.ravel()]).T).reshape(X1.shape),
             alpha = 0.75, cmap = ListedColormap(('red', 'green')))
plt.xlim(X1.min(), X1.max())
plt.ylim(X2.min(), X2.max())
for i, j in enumerate(np.unique(y_set)):
    plt.scatter(X_set[y_set == j, 0], X_set[y_set == j, 1],
                c = ListedColormap(('red', 'green'))(i), label = j)
plt.title('Classifier (Training set)')
plt.xlabel('Age')
plt.ylabel('Estimated Salary')
plt.legend()
plt.show()

结果

我们将使用线性和非线性的核来可视化svc对象的测试集

算法实现(回归)

与上面的SVR模型相类似。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# import and split the data and classes
dataset = pd.read_csv("Position_Salaries.csv")
X = dataset.iloc[:, 1:-1].values
Y = dataset.iloc[:, 2].values


# features scaling
from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
sc_Y = StandardScaler()
X = sc_X.fit_transform(X)
Y = sc_Y.fit_transform(np.reshape(Y, (10,1)))

# Fitting Regression modelto the dataset
from sklearn.svm import SVR
regressor = SVR() # add this parametre kernel='rbf'
regressor.fit(X,Y)

# predicts a new result with polyn reg
y_pred = sc_Y.inverse_transform(regressor.predict(sc_X.transform(np.array([[8.5]]))))

# Visualisation the regression result
plt.scatter(x=X, y=Y,color='red')
plt.plot(X, regressor.predict(X), color='green')
plt.title('Truth of Bluff / SVR')
plt.xlabel('Position level')
plt.ylabel('Salary')
plt.show()

结果

我们需要了解SVM有几种类型的核(‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’)。

4.5的预测为130101.64,8.5为303706.02

我们将regressor = SVR()替换为regressor = SVR(kernel='rbf'),然后重新运行程序

而预测这里有115841.63(4.5)和403162.82(8.5)

最后

SVM的限制包括:

  • SVM算法不适用于大型数据集。
  • 当数据集的噪声较大时,支持向量机不能很好地工作。
  • 如果每个数据点的样本数量超过了训练数据样本的数量,SVM将会表现不佳。
  • 由于支持向量分类器通过在分类超平面的上方和下方放置数据点来工作,因此没有概率解释。

相关推荐

再说圆的面积-蒙特卡洛(蒙特卡洛方法求圆周率的matlab程序)

在微积分-圆的面积和周长(1)介绍微积分方法求解圆的面积,本文使用蒙特卡洛方法求解圆面积。...

python编程:如何使用python代码绘制出哪些常见的机器学习图像?

专栏推荐...

python创建分类器小结(pytorch分类数据集创建)

简介:分类是指利用数据的特性将其分成若干类型的过程。监督学习分类器就是用带标记的训练数据建立一个模型,然后对未知数据进行分类。...

matplotlib——绘制散点图(matplotlib散点图颜色和图例)

绘制散点图不同条件(维度)之间的内在关联关系观察数据的离散聚合程度...

python实现实时绘制数据(python如何绘制)

方法一importmatplotlib.pyplotaspltimportnumpyasnpimporttimefrommathimport*plt.ion()#...

简单学Python——matplotlib库3——绘制散点图

前面我们学习了用matplotlib绘制折线图,今天我们学习绘制散点图。其实简单的散点图与折线图的语法基本相同,只是作图函数由plot()变成了scatter()。下面就绘制一个散点图:import...

数据分析-相关性分析可视化(相关性分析数据处理)

前面介绍了相关性分析的原理、流程和常用的皮尔逊相关系数和斯皮尔曼相关系数,具体可以参考...

免费Python机器学习课程一:线性回归算法

学习线性回归的概念并从头开始在python中开发完整的线性回归算法最基本的机器学习算法必须是具有单个变量的线性回归算法。如今,可用的高级机器学习算法,库和技术如此之多,以至于线性回归似乎并不重要。但是...

用Python进行机器学习(2)之逻辑回归

前面介绍了线性回归,本次介绍的是逻辑回归。逻辑回归虽然名字里面带有“回归”两个字,但是它是一种分类算法,通常用于解决二分类问题,比如某个邮件是否是广告邮件,比如某个评价是否为正向的评价。逻辑回归也可以...

【Python机器学习系列】拟合和回归傻傻分不清?一文带你彻底搞懂

一、拟合和回归的区别拟合...

推荐2个十分好用的pandas数据探索分析神器

作者:俊欣来源:关于数据分析与可视化...

向量数据库:解锁大模型记忆的关键!选型指南+实战案例全解析

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在...

用Python进行机器学习(11)-主成分分析PCA

我们在机器学习中有时候需要处理很多个参数,但是这些参数有时候彼此之间是有着各种关系的,这个时候我们就会想:是否可以找到一种方式来降低参数的个数呢?这就是今天我们要介绍的主成分分析,英文是Princip...

神经网络基础深度解析:从感知机到反向传播

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在...

Python实现基于机器学习的RFM模型

CDA数据分析师出品作者:CDALevelⅠ持证人岗位:数据分析师行业:大数据...

取消回复欢迎 发表评论: