『』支持向量机(SVM)说明及示例


『』支持向量机(SVM)说明及示例
本文插图
支持向量机(SVM)可以解决支持分类和回归问题 , 这两个问题的解决都是通过构造函数h来实现的 , 该函数将输入向量x与输出y进行匹配:y = h(x )
优缺点
优点:该算法可以基于内核对线性和非线性问题的极限进行建模 。 它对于“过拟合”也非常可行 , 尤其是在大空间中 。
劣势:支持向量机需要大量的内存 , 由于选择正确的核(kernel)很重要 , 所以很难调整 , 而且在相当大的数据集下也无法获得良好的结果 。
简要说明
假设我们有6点的数据集 , 如下所示
『』支持向量机(SVM)说明及示例
本文插图
你可以看到它们是线性可分的 , 但问题是有成千上万的直线可以做到这一点
『』支持向量机(SVM)说明及示例
本文插图
所有这些线均有效 , 并且可以100%正确的进行分类 。 但问题是 , 这些线是有效的 , 但不是最优的 。
如下图所示 , 它们的原理很简单:它们的目的是使用尽可能“简单”的边界将数据分离到类中 , 从而使不同数据组之间的距离和它们之间的边界达到最大 。 这个距离也被称为“margin” , 支持向量机因此被称为“wide margin separators” , “支持向量”是最接近边界的数据 。
『』支持向量机(SVM)说明及示例
本文插图
要使用的机器学习数据集
1)进行分类的SVM:我们将使用“ Social Network Ads”机器学习数据集 , 这是此数据集的链接(https://www.kaggle.com/rakeshrau/social-network-ads) 。 数据集由5列组成(User ID、Gender、 Age、 Estimated Salary 和 Purchased) , 共有400行 。
『』支持向量机(SVM)说明及示例
本文插图
2)第二个SVM进行回归:我们将使用“Position Salaries”机器学习数据集 , 这是此数据集(https://www.kaggle.com/farhanmd29/position-salaries)的链接 。 数据集由3列组成(Position、 Level、Salary) , 有10行 。
『』支持向量机(SVM)说明及示例
本文插图
要达到的结果
分类:可视化并识别不同类 , 并按数据集绘制分界线以进行测试
回归:可视化数据点并绘制回归线 , 并预测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代码如下: