实验十一:支持向量机

目录

实验前准备

线性可分支持向量机与硬间隔最大化

导入数据集并且画出散点图

求对偶问题的最优解

求解w*和b*

画出数据集的散点图并且给出决策边界

线性支持向量机与软间隔最大化

导入数据集并且画出散点图

求对偶问题的最优解

求解w*和b*

画出数据集的散点图并且给出决策边界

非线性支持向量机与核函数

读入数据集

求解对偶问题的最优解

求解b*

对测试集进行预测并且求解准确率

实验总结

线性可分支持向量机与硬间隔最大化:

线性可分支持向量机与软间隔最大化:

非线性可分支持向量机与核函数:

三种支持向量机方法之间的异同点:

支持向量机是一种强大的分类算法,它具有良好的泛化能力和鲁棒性。


实验前准备

本实验是在Anaconda下的jupyter notebook上进行的,使用的代码语言为python。在开始实验前,我们首先需要导入所需要的库与包或者模块。本实验是一个支持向量机的实验,需要处理大量的实验数据,需要处理多维数组对象,以及可能还需要画图进行可视化处理,还有一些数学公式的运用,所以我们需要导入的包为numpypandasmath以及matplotlib.pyplot。同时我们可能还需要使用random函数来随机选取标签,所以我们还需要导入random。而且在本次实验中,我们需要处理求解凸优化问题,例如支持向量机 (SVM) 中的二次规划问题,以及线性规划问题,而这一些问题的求解都集成在了cvxopt库中,所以我们还需要导入cvxopt 库。而且在最后,由于我们在画图中,需要为图像做标记,可以采用英文也可以采用中文的形式做标记,但是如果采用的是中文的话,可能会有乱码的现象,所以我们还需要设置中文字体。

代码实现:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math
import cvxopt
from cvxopt import matrix
from cvxopt import solvers

# 设置中文字体,用于在画图时显示中文字体,以防有乱码现象
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']

线性可分支持向量机与硬间隔最大化

导入数据集并且画出散点图

实验要求:

代码实现:

# ---- Your code here ----
# 读入数据样本dataset1.csv,并且数据的格式为dataframe
dataset_frame=pd.read_csv("dataset1.csv")
# 将dataset_frame转换为NumPy数组,并将数据类型转换为np.double
dataset_array=dataset_frame.values.astype(np.double)
# 获取样本数据的样本量
m=dataset_array.shape[0]
# 提取出特征矩阵(X变量)
X=dataset_array[:, 0:-1]
# 提取最后一列的标签列
Y=dataset_array[:, -1].reshape(-1, 1)
# 绘制散点图
plt.scatter(dataset_array[:, 0], dataset_array[:, 1], c=dataset_array[:, 2], cmap='cool')
# 添加标题和坐标轴标签
plt.title("Scatter Plot of Dataset1")
plt.xlabel("x1")
plt.ylabel("x2")
# 绘制文本进行标记——正样本(+1)/负样本(-1)
plt.text(-0.9, -2.2, '负样本(-1)', color='red')
plt.text(2.5, 5.8, '正样本(+1)', color='purple')
# 显示图像
plt.show()

实验结果分析:如图所示,我们首先通过read_csv函数来读取数据集,并且此时的数据集格式为dataframe,然后又调用函数将其格式转换为NumPy数组的形式,同时将数据类型转换为np.double。随后我们可以获取该样本数据集的样本量、特征列、标签列等数据。然后便可以开始绘制散点图。我们将散点图的坐标轴分别设为x1x2,同时将散点图的标题设为“Scatter Plot of Dataset1”,最后我们还需要在图中绘制文本进行标记,将这两种样本进行区分,分别为正样本(+1)负样本(-1)

       我们所绘制的散点图如图所示,从图中我们可以看到,这些样本点明显地划分在了两个区域,所以我们可以知道这一些数据点是可以线性可分的,同时还是硬间隔的,所以后面的实验才可以继续进行,同时我们也知道我们这一部分的代码是没有问题的。

求对偶问题的最优解

实验要求:

代码实现:

# ---- Your code here ----
#如果求解报错可以尝试在solvers.qp()中添加参数kktsolver='ldl'
# 首先需要构建P矩阵
P=matrix(np.dot(X * Y, (X * Y).T))

# 构建q向量
q=matrix(-np.ones((m, 1)))

# 构建G矩阵和h向量
G=matrix(-np.eye(m))
h=matrix(np.zeros((m, 1)))

# 构建A矩阵和b向量
A=matrix(Y.T)
b=matrix(np.zeros((1, 1)))

# 使用凸优化库求解二次规划问题
solvers.options['show_progress']=False
sol=solvers.qp(P, q, G, h, A, b)

# 提取最优解
lambda_=np.array(sol['x'])

print("最优解 𝜆∗ 为:")
print(lambda_)

实验结果分析:如图所示,我们首先需要根据公式构建P矩阵,然后构建q矩阵,随后利用前面求得的样本数量m来计算构建G矩阵h向量。然后又利用前面划分的特征列个标签列来计算构建A矩阵b向量。在进行上面的计算之后,我们便可以调用cvxopt库中的函数来进行凸优化求解该二次规划问题了,随后调用函数来提取最优解,最后我们将这一个计算得到的最优解进行打印。

我们可以看到打印出来的最优解如上所示,我们将这一些最优解与其它同学计算得到的最优解进行比对,然后发现我们的结果是一样的,所以我们可以知道我们的思路以及代码的编写都是没有问题的,我们这一部分的代码是正确无误的。

求解w*b*

实验要求:

代码实现:

# ---- Your code here ----
# 计算omega_
omega_=np.sum(lambda_ * Y * X, axis=0)

# 找到使lambda_最大的索引j
j=np.argmax(lambda_)

# 计算b_
b_=Y[j, 0]-np.dot(omega_, X[j, :])

print(f"𝜔∗ = {omega_}")
print(f"𝑏∗ = {b_}")

实验结果分析:如图所示,我们需要计算求解w*和b*,我们首先需要通过公式来计算w*,然后找到使得w*最大的索引,然后利用该索引来计算b*。最后我们将这一些结果进行打印即可。同样的,我们将我们计算得到的w*和b*与其它同学的进行比对,发现结果也是正确无误的,所以我们这一部分的代码的编写是没有问题的。

画出数据集的散点图并且给出决策边界

实验要求:

代码实现:

# ---- Your code here ----
# 设置阈值,将靠近0的值过滤掉
threshold=1e-5

# 找出支持向量的索引
index=np.squeeze(lambda_>threshold)
# 找出支持向量(正样本)和支持向量(负样本)的索引
pos_index=np.squeeze(np.logical_and(lambda_>threshold, Y>0))
neg_index=np.squeeze(np.logical_and(lambda_>threshold, Y<0))

# 绘制散点图
plt.scatter(X[~index, 0], X[~index, 1], c=Y[~index, 0], cmap='coolwarm')
plt.scatter(X[pos_index, 0], X[pos_index, 1], color='red', label='支持向量(正样本)')
plt.scatter(X[neg_index, 0], X[neg_index, 1], color='blue', label='支持向量(负样本)')

# 绘制决策边界和间隔边界
X2_min2max = np.array([np.min(X[:, 1]), np.max(X[:, 1])], dtype=np.double)
decision_boundary=(-b_-omega_[1]*X2_min2max)/omega_[0]
margin_boundary_1=(1-b_-omega_[1]*X2_min2max)/omega_[0]
margin_boundary_2=(-1-b_-omega_[1]*X2_min2max)/omega_[0]

plt.plot(decision_boundary, X2_min2max, label=r'决策边界 $\mathbf{\omega}^{*T}\mathbf{x} + b = 0$')
plt.plot(margin_boundary_1, X2_min2max, '--', label=r'间隔边界 $\mathbf{\omega}^{*T}\mathbf{x} + b = 1$')
plt.plot(margin_boundary_2, X2_min2max, '--', label=r'间隔边界 $\mathbf{\omega}^{*T}\mathbf{x} + b = -1$')

# 添加标题和坐标轴标签
plt.title("线性可分支持向量机与硬间隔的最大化")
plt.xlabel("x1")
plt.ylabel("x2")
# 绘制文本进行标记——正样本(+1)/负样本(-1)
plt.text(-0.9, -2.2, '负样本(-1)', color='blue')
plt.text(2.5, 5.8, '正样本(+1)', color='red')
# 添加图例
plt.legend(loc='upper left', bbox_to_anchor=(1.05, 1))
# 显示图像
plt.show()

实验结果分析:如图所示,我们首先需要设置阈值,将那些靠近0的值进行过滤,然后我们需要找出支持向量(正和负)的索引,然后还需要继续找出支持向量(正样本)和支持向量(负样本)的索引。随后我们便可以绘制散点图,我们将所有的点都进行绘制,同时根据前面计算得到的值来进行决策边界和间隔边界的绘制,然后为了显示清晰,我们将不同颜色对应的意义画在了图像的右侧。我们还需要在图像中绘制文本进行标记正样本和负样本。最后将图像进行显示即可。

我们所绘制的散点图和决策边界如图所示,我们可以知道,决策边界明显地将正样本和负样本进行了区分,然后两条间隔边界是硬间隔地最大化的边界,而且两条间隔边界之间是没有其它数据点的,所以我们可以知道我们所绘制的图像是正确地将支持向量地正样本和负样本进行了划分,符合该实验要求的预期。所以我们可以知道我们的实验是成功的,我们这一部分的代码的编写是正确无误的。

线性支持向量机与软间隔最大化

导入数据集并且画出散点图

实验要求:

代码实现:

# ---- Your code here ----
# 将数据集dataset2导入,并且格式为dataframe
dataset_frame=pd.read_csv("dataset2.csv")
# 将dataset_frame转换为NumPy数组,并将数据类型转换为np.double
dataset_array=dataset_frame.values.astype(np.double)
# 获取样本数据的样本量
m=dataset_array.shape[0]
# 提取出特征矩阵(X变量)
X=dataset_array[:, 0:-1]
# 提取最后一列的标签列
Y=dataset_array[:, -1].reshape(-1, 1)

# 绘制散点图
plt.scatter(X[:, 0], X[:, 1], c=Y[:, 0], cmap='cool')

# 添加标题和坐标轴标签
plt.title("Scatter Plot of Dataset2")
plt.xlabel("x1")
plt.ylabel("x2")
# 绘制文本进行标记——正样本(+1)/负样本(-1)
plt.text(8.6, 0.3, '负样本(-1)', color='red')
plt.text(0.75, 7.75, '正样本(+1)', color='purple')

# 显示图像
plt.show()

实验结果分析:如图所示,我们首先通过read_csv函数来读取数据集,并且此时的数据集格式为dataframe,然后又调用函数将其格式转换为NumPy数组的形式,同时将数据类型转换为np.double。随后我们可以获取该样本数据集的样本量、特征列、标签列等数据。然后便可以开始绘制散点图。我们将散点图的坐标轴分别设为x1x2,同时将散点图的标题设为“Scatter Plot of Dataset1”,最后我们还需要在图中绘制文本进行标记,将这两种样本进行区分,分别为正样本(+1)负样本(-1)

       我们所绘制的散点图如图所示,从图中我们可以看到,这些样本点明显地划分在了两个区域,所以我们可以知道这一些数据点是可以线性可分的,同时还是硬间隔的,所以后面的实验才可以继续进行,同时我们也知道我们这一部分的代码是没有问题的。

求对偶问题的最优解

实验要求:

代码实现:

# ---- Your code here ----
# 设定参数C
C=1.

# 计算P矩阵
P=matrix(np.dot(X*Y, (X*Y).T))

# 找到q
q=matrix(-np.ones((m, 1)))

# 找到G
G=matrix(np.concatenate((-np.eye(m), np.eye(m)), axis=0))

# 找到h
h=matrix(np.concatenate((np.zeros(m), np.full(m, C)), axis=0))

# 找到A
A=matrix(Y.T)

# 找到b
b=matrix(np.zeros(1))

# 使用凸优化库求解问题
solvers.options['show_progress']=False
sol=solvers.qp(P, q, G, h, A, b)

# 获取最优解
lambda_=np.array(sol['x'])

print("最优解 𝜆∗ 为:")
print(lambda_)

实验结果分析:如图所示,我们首先需要设定一个参数C,然后根据公式构建P矩阵,然后构建q矩阵,随后利用前面求得的样本数量m来计算构建G矩阵h向量。然后又利用前面划分的特征列个标签列来计算构建A矩阵b向量。在进行上面的计算之后,我们便可以调用cvxopt库中的函数来进行凸优化求解该二次规划问题了,随后调用函数来提取最优解,最后我们将这一个计算得到的最优解进行打印。

       我们可以看到打印出来的最优解如上所示,我们将这一些最优解与其它同学计算得到的最优解进行比对,然后发现我们的结果是一样的,所以我们可以知道我们的思路以及代码的编写都是没有问题的,我们这一部分的代码是正确无误的。

求解w*和b*

实验要求:

代码实现:

# ---- Your code here ----
# 计算 omega_
omega_=np.sum(lambda_*Y*X, axis=0)

# 找到满足条件的 lambda 值对应的索引
j=np.argmin(np.abs(lambda_-C/2))

# 计算 b_
b_=Y[j, 0]-np.dot(omega_, X[j, :])

# 将结果进行打印
print(f"𝜔∗ = {omega_}")
print(f"𝑏∗ = {b_}")

实验结果分析:如图所示,我们需要计算求解w*和b*,我们首先需要通过公式来计算w*,然后找到使得w*最大的索引,然后利用该索引来计算b*。最后我们将这一些结果进行打印即可。同样的,我们将我们计算得到的w*和b*与其它同学的进行比对,发现结果也是正确无误的,所以我们这一部分的代码的编写是没有问题的。

画出数据集的散点图并且给出决策边界

实验要求:

代码实现:

# ---- Your code here ----
# 设定阈值
threshold=1e-5

# 首先找出支持向量(训练数据中 𝜆∗𝑗>0 的对应的样本)的索引
index=np.squeeze(lambda_>threshold)

# 找出支持向量(正样本)和支持向量(负样本)的索引
pos_index=np.squeeze(Y>0)
neg_index=np.logical_not(pos_index)

# 绘制散点图
plt.scatter(X[~index, 0], X[~index, 1], c=Y[~index, 0], cmap='coolwarm')
plt.scatter(X[np.logical_and(index, pos_index), 0], X[np.logical_and(index, pos_index), 1], color='red',
            label='支持向量(正样本)')
plt.scatter(X[np.logical_and(index, neg_index), 0], X[np.logical_and(index, neg_index), 1], color='blue',
            label='支持向量(负样本)')

X2_min2max = np.array([np.min(X[:, 1]), np.max(X[:, 1])], dtype=np.double)
decision_boundary=(-b_-omega_[1]*X2_min2max)/omega_[0]
margin_boundary_1=(1-b_-omega_[1]*X2_min2max)/omega_[0]
margin_boundary_2=(-1-b_-omega_[1]*X2_min2max)/omega_[0]

plt.plot(decision_boundary, X2_min2max, label=r'决策边界 $\mathbf{\omega}^{*T}\mathbf{x} + b = 0$')
plt.plot(margin_boundary_1, X2_min2max, '--', label=r'间隔边界 $\mathbf{\omega}^{*T}\mathbf{x} + b = 1$')
plt.plot(margin_boundary_2, X2_min2max, '--', label=r'间隔边界 $\mathbf{\omega}^{*T}\mathbf{x} + b = -1$')

plt.title("线性支持向量机与软间隔最大化")
plt.xlabel("x1")
plt.ylabel("x2")
# 绘制文本进行标记——正样本(+1)/负样本(-1)
plt.text(8.6, 0.3, '负样本(-1)', color='blue')
plt.text(0.75, 7.75, '正样本(+1)', color='red')
plt.legend(loc='upper left', bbox_to_anchor=(1.05, 1))
# 显示图像
plt.show()

实验结果分析:如图所示,我们首先需要设置阈值,将那些靠近0的值进行过滤,然后我们需要找出支持向量(正和负)的索引,然后还需要继续找出支持向量(正样本)和支持向量(负样本)的索引。随后我们便可以绘制散点图,我们将所有的点都进行绘制,同时根据前面计算得到的值来进行决策边界和间隔边界的绘制,然后为了显示清晰,我们将不同颜色对应的意义画在了图像的右侧。我们还需要在图像中绘制文本进行标记正样本和负样本。最后将图像进行显示即可。

我们所绘制的散点图和决策边界如图所示,我们可以知道,决策边界明显地将正样本和负样本进行了区分,但是这两个间隔边界没有将正样本和负样本隔离在左侧和右侧,即是在间隔边界之间还有其它样本点的存在,因为这一个样本的区分并不是很明显,但是这一个样本也是支持线性可分的,只是没有办法进行硬间隔的划分而已,但是可以清晰的知道这是一个软间隔的分类器,这一个划分结果也是符合本实验的预期结果的。所以我们可以知道,我们这一个实验是成功的,我们这一部分所编写的代码也是正确无误的。

非线性支持向量机与核函数

读入数据集

实验要求:

代码实现:

# ---- Your code here ----
# 将数据集Raisin_train数据集读取进来,并且格式为dataframe
dataset_frame=pd.read_csv("Raisin_train.csv")

# 将数据集转换为数组并转换为浮点数类型
dataset_array=dataset_frame.values.astype(np.double)

# 获取样本数量m
m=dataset_array.shape[0]

# 提取特征列和标签列
X=dataset_array[:, 0:-1]
Y=dataset_array[:, -1].reshape(-1, 1)

实验结果分析:如图所示,我们首先通过read_csv函数来读取数据集,并且此时的数据集格式为dataframe,然后又调用函数将其格式转换为NumPy数组的形式,同时将数据类型转换为np.double。随后我们可以获取该样本数据集的样本量、特征列、标签列等数据。我们将这一些数据分别用不同的变量来进行存储,方便后续的实验操作。

求解对偶问题的最优解

实验要求:

代码实现:

# ---- Your code here ----
# 设定参数C
C=0.05

# 计算P矩阵
P=matrix(np.dot(Y,Y.T)*np.dot(X,X.T))

# 找到q
q=matrix(-np.ones((m,1)))

# 找到G
G=matrix(np.vstack((-np.eye(m), np.eye(m))))

# 找到h
h=matrix(np.vstack((np.zeros((m,1)), C*np.ones((m,1)))))

# 找到A
A=matrix(Y.T)

# 找到b
b=matrix(np.zeros((1, 1)))

# 求解优化问题
sol=solvers.qp(P,q,G,h,A,b)

# 提取最优解 lambda_
lambda_=np.array(sol['x'])

print("最优解 𝜆∗ 为:")
print(lambda_)

实验结果分析:如图所示,我们首先需要设定一个参数C,然后根据公式构建P矩阵,然后构建q矩阵,随后利用前面求得的样本数量m来计算构建G矩阵h向量。然后又利用前面划分的特征列个标签列来计算构建A矩阵b向量。在进行上面的计算之后,我们便可以调用cvxopt库中的函数来进行凸优化求解该二次规划问题了,随后调用函数来提取最优解,最后我们将这一个计算得到的最优解进行打印。

我们可以看到打印出来的最优解如上所示,我们将这一些最优解与其它同学计算得到的最优解进行比对,然后发现我们的结果是一样的,所以我们可以知道我们的思路以及代码的编写都是没有问题的,我们这一部分的代码是正确无误的。

求解b*

实验要求:

代码实现:

# ---- Your code here ----
# 找到满足条件的最小值索引
j=np.argmin(np.abs(lambda_-C/2))

# 计算 b*
b_=Y[j,0]-np.sum(lambda_*Y*np.dot(X,X[j].reshape(-1,1)))

print(f"𝑏∗ = {b_}")

实验结果分析:如图所示,我们需要求解b*,我们首先需要找到满足条件的最小的索引,然后根据前面找到的最小索引值进行计算b*,最后再将这一个计算得到的b*进行打印即可。我们将计算得到的b*与其它同学计算得到的值进行比对发现,我们计算的结果是正确的,所以我们可以知道我们这一部分所编写的代码的思路以及逻辑是正确的,我们的代码编写是正确无误的。

对测试集进行预测并且求解准确率

实验要求:

代码实现:

# ---- Your code here ----
# 读取测试数据集
test_frame=pd.read_csv('Raisin_test.csv')
# 将数据集的格式改成numpy
test_array=test_frame.values

# 提取测试数据集的特征和标签
X_test=test_array[:, 0:-1]
Y_test=test_array[:, -1]

# 计算预测值 Y_predicted
Y_predicted=np.sign(np.sum(lambda_*Y*np.dot(X,X_test.T), axis=0)+b_)

# 计算准确率
accu=np.mean(Y_test==Y_predicted)

# 打印准确率
print(f'使用线性核的准确率:{accu}')

实验结果分析:如图所示,我们首先通过函数read_csv将测试集进行读取,并且该数据集的格式为dataframe,然后通过函数将该格式的数据集转换为numpy格式的数据。然后我们提取测试数据集的特征列和标签列。然后我们通过前面训练的向量机来对测试集进行预测,最后我们将预测的结果与该数据集原本的结果标签列进行比对,从而来计算准确率。我们最后将这一个准确率进行打印出来即可。

如图所示,我们使用线性核的准确率为0.88888888888888,我们可以知道,我们的这一个预测结果是比较高的,所以我们前面通过训练集训练得到的支持向量机还是比较正确的,而且准确率还是比较高而且稳定的。所以我们可以知道,我们本实验是比较成功的,因为训练得到的准确率是比较高的,比较符合预期结果的,从而我们知道,我们这一段代码的编写是比较正确无误的,我们的实验是成功的。

实验总结

线性可分支持向量机与硬间隔最大化:

  1. 基本概念与基本原理:线性可分支持向量机与硬间隔最大化是支持向量机最基本的形式。它的目标是找到一个能够将不同类别的样本完全分开的超平面。超平面由支持向量决定,这些支持向量是距离超平面最近的样本点。
  2. 特点:该方法具有较好的分类性能和泛化能力。它通过最大化分类边界的间隔来提高模型的鲁棒性。
  3. 适用范围:适用于线性可分的数据集,要求样本点严格分布在超平面的两侧,且类别之间没有重叠。
  4. 优点:分类准确率高,泛化能力强。在高维空间中尤为有效,适用于处理具有大量特征的数据集。
  5. 缺点:对于非线性可分的数据无法有效处理,对噪声和重叠数据敏感。

线性可分支持向量机与软间隔最大化:

  1. 基本概念与基本原理线性可分支持向量机与软间隔最大化是对硬间隔最大化的一种改进。它允许在一定程度上有误分类样本存在,以克服线性可分模型的严格限制。
  2. 特点:通过引入松弛变量,软间隔最大化能够容忍一些误分类点,提高模型的鲁棒性。松弛变量表示样本点可以存在于超平面的错误一侧或在间隔内部。
  3. 用范围:适用于数据稍有重叠或噪声的情况,能够处理一定程度的分类错误。
  4. 优点:对于一些噪声或重叠的数据集有较好的适应性,能够处理一定程度的错误分类。
  5. 缺点:对于噪声较大或重叠较严重的数据可能效果不佳。

非线性可分支持向量机与核函数:

  1. 基本概念与基本原理非线性可分支持向量机通过引入核函数来处理非线性可分问题。核函数能够将数据从原始空间映射到一个更高维的特征空间,使得原本线性不可分的问题变为线性可分。
  2. 特点:通过核函数的引入,非线性可分支持向量机能够处理复杂的非线性问题。核函数实质上是一种相似度度量,它可以在原始空间中计算样本之间的相似度,从而在高维特征空间中构建一个线性超平面。
  3. 适用范围:适用于数据在原始空间中非线性可分的情况。
  4. 优点:能够处理复杂的非线性问题,具有较强的表达能力,适用于各种类型的数据集。
  5. 缺点:对于高维空间和大量特征的数据集,计算复杂度较高。

​​​​​​​三种支持向量机方法之间的异同点:

  1. 相同点:
    1. 都是基于最大间隔原则进行分类的机器学习算法。
    2. 都可以用于二分类问题
    3. 都使用支持向量来确定超平面
    4. 都具有较好的泛化能力鲁棒性
  2. 不同点:
    1. 线性可分支持向量机与硬间隔最大化要求数据集是线性可分的,不允许有任何误分类点。而线性可分支持向量机与软间隔最大化允许一定程度的误分类点存在。
    2. 线性可分支持向量机与软间隔最大化通过引入松弛变量来容忍误分类点,提高模型的鲁棒性。而线性可分支持向量机与硬间隔最大化没有引入松弛变量。
    3. 非线性可分支持向量机与核函数通过引入核函数来处理非线性可分问题,将数据映射到高维特征空间中进行线性分类。而线性可分支向量机不引入核函数,只能处理线性可分问题。
    4. 非线性可分支持向量机与核函数的计算复杂度较高,特别是在高维空间和大量特征的情况下。而线性可分支持向量机的计算复杂度较低,计算效率较高。

支持向量机是一种强大的分类算法,它具有良好的泛化能力和鲁棒性。

  1. 线性可分支持向量机与硬间隔最大化适用于线性可分问题,要求数据严格分开
  2. 线性可分支持向量机与软间隔最大化适用于有一定噪声或重叠的数据
  3. 非线性可分支持向量机与核函数适用于非线性可分问题,可以处理复杂的非线性关系。
  4. 在选择适当的支持向量机方法时,需要根据数据的特点和要求进行综合考虑
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值