【Python机器学习实战】 | 基于支持向量机(Support Vector Machine, SVM)进行分类和回归任务分析

🎩 欢迎来到技术探索的奇幻世界👨‍💻

📜 个人主页:@一伦明悦-CSDN博客

✍🏻 作者简介: C++软件开发、Python机器学习爱好者

🗣️ 互动与支持💬评论      👍🏻点赞      📂收藏     👀关注+

如果文章有所帮助,欢迎留下您宝贵的评论,

点赞加收藏支持我,点击关注,一起进步!

引言

svm.SVC是Scikit-learn中用于支持向量机(Support Vector Machine, SVM)分类任务的类。具体来说,svm.SVC实现了基于支持向量的分类器,其核心是在特征空间中找到最佳的超平面来区分不同类别的数据点。

主要参数解释:

  1. C

    • 正则化参数,控制错误分类样本的惩罚力度。C值越小,容错空间越大,模型可能更简单;C值越大,容错空间越小,模型可能更复杂。
  2. kernel

    • 核函数的选择,用于将数据从原始特征空间映射到更高维的空间,以便更好地分离不同类别的数据点。
    • 常见的核函数包括线性核(‘linear’)、多项式核(‘poly’)、高斯径向基函数(RBF)核(‘rbf’)、sigmoid核等。
  3. degree(仅在kernel='poly’时有效):

    • 多项式核函数的阶数。
  4. gamma

    • 核函数的系数,影响模型的拟合能力。较大的gamma值可以产生更复杂的决策边界,可能导致过拟合。
  5. class_weight

    • 类别权重的设置,用于处理不平衡类别问题。
  6. probability

    • 是否启用概率估计。如果设置为True,则会启用概率估计,并在训练过程中计算每个类别的概率。

方法和属性:

  • fit(X, y)

    • 训练模型,X是特征数据,y是标签数据。
  • predict(X)

    • 对新数据进行预测。
  • decision_function(X)

    • 返回每个样本到决策函数的距离。
  • predict_proba(X)

    • 返回每个样本预测为各个类别的概率值(仅在probability=True时可用)。
  • support_

    • 返回支持向量的索引。
  • coef_intercept_

    • 分别返回决策函数的系数和常数项。

示例用法:

from sklearn import svm
X = [[0, 0], [1, 1]]
y = [0, 1]
clf = svm.SVC()
clf.fit(X, y)
print(clf.predict([[2., 2.]]))

这段代码创建了一个svm.SVC分类器,并用样本X和标签y进行训练。然后,它对新的数据点[[2., 2.]]进行了预测。

总结来说,svm.SVC是一个强大的分类器,通过调整不同的参数(如C、kernel、gamma等),可以实现不同复杂度的分类模型,适用于多种分类问题。

正文

01-分类数据集,并将其可视化

这段代码的作用是生成一个简单的分类数据集,并将其可视化。

具体步骤和功能解释如下:

  1. 导入模块

    • 导入了需要使用的各种Python模块,如numpy用于数值计算,pandas用于数据处理,matplotlib用于绘图,以及一些机器学习相关的模块如sklearn。
  2. 设置警告过滤和绘图参数

    • warnings.filterwarnings(action='ignore'):设置忽略警告,通常用于屏蔽不影响程序运行的警告信息。
    • %matplotlib inline:指定在Jupyter Notebook中显示matplotlib绘制的图形。
    • plt.rcParams:设置matplotlib绘图的一些参数,如中文字体和负号显示问题。
  3. 生成分类数据集

    • 使用make_classification函数生成具有两个特征的分类数据集。
    • n_samples=N:指定生成样本的数量为100。
    • n_features=2:每个样本具有2个特征。
    • n_redundant=0:生成的特征中不包含冗余信息。
    • n_informative=2:两个特征是信息性的。
    • class_sep=1:两个类之间的分离度为1。
    • random_state=1:随机数种子,确保结果可重现。
    • n_clusters_per_class=1:每个类别内部只有一个簇。

    这些参数共同作用,生成了一个具有两个特征和两个类别的分类数据集。

  4. 数据集划分

    • 使用train_test_split函数将生成的数据集划分为训练集和测试集。
    • train_size=0.85:指定训练集占总数据的85%。
    • random_state=123:随机数种子,确保划分结果可重现。
  5. 数据可视化

    • 使用matplotlib进行数据的可视化。
    • markers=['^', 'o']:定义两种不同的标记样式,用于不同类别的数据点。
    • 使用循环结构和条件筛选,分别在训练集和测试集上绘制不同类别的数据点。
    • plt.scatter函数用于绘制散点图,其中包括了标记样式、颜色、边缘颜色等参数。
    • plt.titleplt.xlabelplt.ylabel设置图表标题和坐标轴标签。
    • plt.grid(True, linestyle='-.')添加网格线,并指定网格线的样式为虚线。
  6. 展示图形

    • plt.show()显示生成的散点图,展示了训练集和测试集中不同类别的数据点分布情况。

总结:该段代码的主要作用是生成一个包含100个样本观测点的二维分类数据集,并通过散点图展示数据点在特征空间中的分布情况,其中训练集和测试集的不同类别用不同的标记和颜色区分开来。

#本章需导入的模块
import numpy as np
from numpy import random
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import warnings
warnings.filterwarnings(action = 'ignore')
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus']=False
from sklearn.datasets import make_classification,make_circles,make_regression
from sklearn.model_selection import train_test_split,KFold
import sklearn.neural_network as net
import sklearn.linear_model as LM
from scipy.stats import multivariate_normal
from sklearn.metrics import r2_score,mean_squared_error,classification_report
from sklearn import svm
import osN=100
X,Y=make_classification(n_samples=N,n_features=2,n_redundant=0,n_informative=2,class_sep=1,random_state=1,n_clusters_per_class=1)
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,train_size=0.85, random_state=123)
markers=['^','o']
for k,m in zip([1,0],markers):plt.scatter(X_train[Y_train==k,0],X_train[Y_train==k,1],marker=m,s=40)
for k,m in zip([1,0],markers):plt.scatter(X_test[Y_test==k,0],X_test[Y_test==k,1],marker=m,s=40,c='r',edgecolors='g')
plt.title("100个样本观测点的分布")
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(True,linestyle='-.')
plt.show()   

运行结果如下图所示: 

这段代码主要实现了以下功能:

  1. 生成网格数据

    • 使用 np.meshgrid 创建了一个密集的网格点集合 (X1, X2),覆盖了训练数据集特征空间的范围。这样做是为了后续在整个特征空间内进行预测和可视化。
  2. 创建绘图框架

    • 使用 plt.subplots 创建了一个包含4个子图的图像框架,分布为2行2列,每个子图的大小为 (12, 8)
  3. 循环训练和可视化

    • 使用循环遍历不同的随机种子 (123, 3000, 0, 20) 和对应的子图位置 (H, L)
    • 对于每个随机种子,创建一个 MLPClassifier 多层感知器模型 (NeuNet):
      • activation='logistic':指定激活函数为逻辑斯蒂函数。
      • random_state=seed:设置随机种子,以便结果可复现。
      • hidden_layer_sizes=(10,):指定一个包含10个神经元的隐藏层。
      • max_iter=200:设置最大迭代次数为200。
    • 使用 NeuNet.fit(X_train, Y_train) 对训练集进行训练。
  4. 预测和可视化分类结果

    • 使用训练好的模型 NeuNet 对整个特征空间 (X0) 进行预测,得到预测结果 Y0
    • 在每个子图中:
      • 根据预测结果将网格点分别用灰色和淡红色表示,以显示模型预测的分类边界。
      • 用不同的标记 ('^' 和 'o') 和颜色 ('r' 和 'g') 分别绘制训练集和测试集的数据点。
      • 添加虚线网格以增强可读性。
      • 设置子图标题,包括当前随机种子和测试误差率 (1 - NeuNet.score(X_test, Y_test)) 的信息。

总结:该段代码通过多次使用不同的随机种子训练 MLPClassifier 模型,并在网格点上绘制模型的分类边界,展示了模型在不同随机种子下的分类效果。每个子图展示了模型对特征空间的不同划分,帮助理解模型在决策边界上的表现。

X1,X2= np.meshgrid(np.linspace(X_train[:,0].min(),X_train[:,0].max(),300),np.linspace(X_train[:,1].min(),X_train[:,1].max(),300))
X0=np.hstack((X1.reshape(len(X1)*len(X2),1),X2.reshape(len(X1)*len(X2),1)))fig,axes=plt.subplots(nrows=2,ncols=2,figsize=(12,8))
for seed,H,L in [(123,0,0),(3000,0,1),(0,1,0),(20,1,1)]:NeuNet=net.MLPClassifier(activation='logistic',random_state=seed,hidden_layer_sizes=(10,),max_iter=200)NeuNet.fit(X_train,Y_train)#NeuNet.out_activation_  #输出节点的激活函数Y0=NeuNet.predict(X0)axes[H,L].scatter(X0[np.where(Y0==1),0],X0[np.where(Y0==1),1],c='lightgray')axes[H,L].scatter(X0[np.where(Y0==0),0],X0[np.where(Y0==0),1],c='mistyrose')for k,m in [(1,'^'),(0,'o')]:axes[H,L].scatter(X_train[Y_train==k,0],X_train[Y_train==k,1],marker=m,s=40)axes[H,L].scatter(X_test[Y_test==k,0],X_test[Y_test==k,1],marker=m,s=40,c='r',edgecolors='g')axes[H,L].grid(True,linestyle='-.')axes[H,L].set_title("分类平面(随机数种子=%d,测试误差=%.2f)"%(seed,1-NeuNet.score(X_test,Y_test)))

 运行结果如下图所示: 

02-线性可分下的支持向量机最大边界超平面分析

这段代码实现了以下功能:

  1. 生成数据集

    • 使用 make_classification 函数生成一个二维特征的分类数据集 X 和对应的标签 Y。数据集具有100个样本,每个样本包括2个特征,是一个线性可分的数据集。
  2. 数据集的可视化

    • 使用 train_test_split 将数据集分割成训练集 (X_train, Y_train) 和测试集 (X_test, Y_test),其中训练集占85%。
    • 使用 plt.scatter 绘制训练集中的样本点,分别用不同的标记 ('^' 和 'o') 表示两类样本,帮助可视化数据分布。
  3. 创建网格数据

    • 使用 np.meshgrid 创建密集的二维网格 (X1, X2),覆盖了训练集特征空间的范围。这样做是为了后续在整个特征空间内进行预测和可视化。
  4. 训练支持向量机模型

    • 使用 svm.SVC 创建一个支持向量机分类器 modelSVC,采用线性核函数 (kernel='linear'),设置随机种子 (random_state=123) 和正则化参数 C=2
    • 使用 modelSVC.fit(X_train, Y_train) 对训练集进行训练,学习得到最大边界超平面以及支持向量的位置。
  5. 预测和可视化分类结果

    • 使用训练好的支持向量机模型 modelSVC 对整个特征空间 (X0) 进行预测,得到预测结果 Y0
    • 在单个图像中:
      • 根据预测结果将网格点分别用灰色和淡红色表示,以显示模型预测的分类边界。
      • 使用不同的标记 ('^' 和 'o') 和颜色 ('r' 和 'g') 分别绘制训练集和测试集的数据点。
      • 使用蓝色圆圈标记支持向量的位置,并调整其透明度以区分它们。
  6. 添加图像元素

    • 设置图像的标题、坐标轴标签和网格线,增强图像的可读性和解释性。

总结:该段代码展示了如何使用支持向量机处理线性可分的二维数据集。通过训练模型并在特征空间中绘制分类边界和支持向量的位置,帮助理解支持向量机在数据分类中的应用及其决策边界的形成。

#本章需导入的模块
import numpy as np
from numpy import random
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import warnings
warnings.filterwarnings(action = 'ignore')
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus']=False
from sklearn.datasets import make_classification,make_circles,make_regression
from sklearn.model_selection import train_test_split,KFold
import sklearn.neural_network as net
import sklearn.linear_model as LM
from scipy.stats import multivariate_normal
from sklearn.metrics import r2_score,mean_squared_error,classification_report
from sklearn import svm
import osN=100
X,Y=make_classification(n_samples=N,n_features=2,n_redundant=0,n_informative=2,class_sep=1,random_state=1,n_clusters_per_class=1)plt.figure(figsize=(9,6))
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,train_size=0.85, random_state=123)
markers=['^','o']
for k,m in zip([1,0],markers):plt.scatter(X_train[Y_train==k,0],X_train[Y_train==k,1],marker=m,s=50)
plt.title("训练集中样本观测点的分布")
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(True,linestyle='-.')
plt.show()   N=100
X,Y=make_classification(n_samples=N,n_features=2,n_redundant=0,n_informative=2,class_sep=1,random_state=1,n_clusters_per_class=1)
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,train_size=0.85, random_state=123)
X1,X2= np.meshgrid(np.linspace(X_train[:,0].min(),X_train[:,0].max(),500),np.linspace(X_train[:,1].min(),X_train[:,1].max(),500))
X0=np.hstack((X1.reshape(len(X1)*len(X2),1),X2.reshape(len(X1)*len(X2),1)))
modelSVC=svm.SVC(kernel='linear',random_state=123,C=2) #modelSVC=svm.LinearSVC(C=2,dual=False)
modelSVC.fit(X_train,Y_train)
print("超平面的常数项b:",modelSVC.intercept_)
print("超平面系数W:",modelSVC.coef_)
print("支持向量的个数:",modelSVC.n_support_)
Y0=modelSVC.predict(X0)
plt.figure(figsize=(6,4)) 
plt.scatter(X0[np.where(Y0==1),0],X0[np.where(Y0==1),1],c='lightgray')
plt.scatter(X0[np.where(Y0==0),0],X0[np.where(Y0==0),1],c='mistyrose')
for k,m in [(1,'^'),(0,'o')]:plt.scatter(X_train[Y_train==k,0],X_train[Y_train==k,1],marker=m,s=40)plt.scatter(X_test[Y_test==k,0],X_test[Y_test==k,1],marker=m,s=40,c='r',edgecolors='g')plt.scatter(modelSVC.support_vectors_[:,0],modelSVC.support_vectors_[:,1],marker='o',c='b',s=120,alpha=0.3)
plt.xlabel("X1")
plt.ylabel("X2")
plt.title("线性可分下的支持向量机最大边界超平面")
plt.grid(True,linestyle='-.')
plt.show()  

 运行结果如下图所示: 

03-广义线性可分下的支持向量机最大边界超平面

这段代码主要包括以下几个部分:

  1. 导入必要的模块:

    • numpy:用于数值计算。
    • pandas:用于数据处理和分析。
    • matplotlib.pyplot:用于绘图。
    • mpl_toolkits.mplot3d:用于绘制3D图形。
    • warnings:用于控制警告输出。
    • sklearn 相关模块:包括生成数据集、模型选择、评估指标、支持向量机等。
    • scipy.stats:用于生成多维正态分布。
    • os:用于与操作系统进行交互。
  2. 生成样本数据和划分训练集、测试集:

    • 使用 make_classification 生成具有分类信息的数据集,包括特征和类别标签。
    • 使用 train_test_split 将数据集划分为训练集和测试集,比例为 0.85:0.15。
  3. 绘制训练集样本观测点的分布:

    • 使用不同的标记符号和颜色展示训练集中两类样本点的分布情况。
    • 设置图像标题、坐标轴标签,并显示网格线。
    • 将绘制的图保存为文件,并展示在输出窗口中。
  4. 使用支持向量机 (SVM) 模型拟合数据和绘制决策边界:

    • 使用线性核的 SVM 模型,分别设定不同的惩罚参数 C 值。
    • 根据模型预测结果绘制分类边界和支持向量。
    • 在两个子图中展示不同 C 值下的分类效果、支持向量,以及训练集、测试集样本的分布。
    • 设置子图的标题、坐标轴标签,并显示网格线。
    • 将绘制的图保存为文件。

整体上,这段代码主要展示了如何生成分类数据集、划分数据集、利用 SVM 模型进行分类,并通过可视化展示不同参数下的分类效果和支持向量分布。

#本章需导入的模块
import numpy as np
from numpy import random
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import warnings
warnings.filterwarnings(action = 'ignore')
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus']=False
from sklearn.datasets import make_classification,make_circles,make_regression
from sklearn.model_selection import train_test_split,KFold
import sklearn.neural_network as net
import sklearn.linear_model as LM
from scipy.stats import multivariate_normal
from sklearn.metrics import r2_score,mean_squared_error,classification_report
from sklearn import svm
import osN=100
X,Y=make_classification(n_samples=N,n_features=2,n_redundant=0,n_informative=2,class_sep=1.2,random_state=1,n_clusters_per_class=1)
rng=np.random.RandomState(2)
X+=2*rng.uniform(size=X.shape)
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,train_size=0.85, random_state=1)plt.figure(figsize=(9,6))
markers=['^','o']
for k,m in zip([1,0],markers):plt.scatter(X_train[Y_train==k,0],X_train[Y_train==k,1],marker=m,s=50)
plt.title("训练集中样本观测点的分布")
plt.xlabel("X1")
plt.ylabel("X2")
plt.grid(True,linestyle='-.')
plt.savefig("../4.png", dpi=500) 
plt.show()  N=100
X,Y=make_classification(n_samples=N,n_features=2,n_redundant=0,n_informative=2,class_sep=1.2,random_state=1,n_clusters_per_class=1)
rng=np.random.RandomState(2)
X+=2*rng.uniform(size=X.shape)
X_train, X_test, Y_train, Y_test = train_test_split(X,Y,train_size=0.85, random_state=1)
X1,X2= np.meshgrid(np.linspace(X_train[:,0].min(),X_train[:,0].max(),500),np.linspace(X_train[:,1].min(),X_train[:,1].max(),500))
X0=np.hstack((X1.reshape(len(X1)*len(X2),1),X2.reshape(len(X1)*len(X2),1)))
fig,axes=plt.subplots(nrows=1,ncols=2,figsize=(15,6))
for C,H in [(5,0),(0.1,1)]:modelSVC=svm.SVC(kernel='linear',random_state=123,C=C) modelSVC.fit(X_train,Y_train)Y0=modelSVC.predict(X0)axes[H].scatter(X0[np.where(Y0==1),0],X0[np.where(Y0==1),1],c='lightgray')axes[H].scatter(X0[np.where(Y0==0),0],X0[np.where(Y0==0),1],c='mistyrose')for k,m in [(1,'^'),(0,'o')]:axes[H].scatter(X_train[Y_train==k,0],X_train[Y_train==k,1],marker=m,s=40)axes[H].scatter(X_test[Y_test==k,0],X_test[Y_test==k,1],marker=m,s=40,c='r',edgecolors='g')axes[H].scatter(modelSVC.support_vectors_[:,0],modelSVC.support_vectors_[:,1],marker='o',c='b',s=120,alpha=0.3)axes[H].set_xlabel("X1")axes[H].set_ylabel("X2")axes[H].set_title("广义线性可分下的支持向量机最大边界超平面\n(C=%.1f,训练误差=%.2f)"%(C,1-modelSVC.score(X_train,Y_train)))axes[H].grid(True,linestyle='-.')
plt.savefig("../4.png", dpi=500) 

运行结果如下图所示 

04-广义线性可分下的支持向量机最大边界超平面

这段代码主要包括以下几个部分:

  1. 导入必要的模块:

    • numpy:用于数值计算。
    • pandas:用于数据处理和分析。
    • matplotlib.pyplot:用于绘图。
    • mpl_toolkits.mplot3d:用于绘制3D图形。
    • warnings:用于控制警告输出。
    • sklearn 相关模块:包括生成数据集、模型选择、评估指标、支持向量机等。
    • scipy.stats:用于生成多维正态分布。
    • os:用于与操作系统进行交互。
  2. 生成样本数据和可视化:

    • 使用 make_circles 生成环形结构的数据集,包括特征和类别标签。
    • 创建一个包含两个子图的大图(fig),其中一个是 3D 散点图,另一个是二维散点图和等高线图。
    • 在 3D 散点图中,根据数据点的位置和类别,使用不同的标记符号和颜色展示样本点的分布情况。
    • 设置 3D 图的 x、y、z 轴标签以及标题。
  3. 在二维空间中绘制样本散点图和等高线图:

    • 在第二个子图中,根据样本点的位置和类别,使用不同的标记符号展示样本点的分布情况。
    • 设置二维图的标题、坐标轴标签,并显示网格线。
    • 使用等高线图表示二维样本数据在三维空间中的分布情况。

整体上,这段代码主要展示了如何生成环形结构的数据集,并通过可视化在三维和二维空间中展示样本数据的分布情况。通过这种可视化方式,可以更直观地理解数据的特征和结构。

#本章需导入的模块
import numpy as np
from numpy import random
import pandas as pd
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import warnings
warnings.filterwarnings(action = 'ignore')
%matplotlib inline
plt.rcParams['font.sans-serif']=['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus']=False
from sklearn.datasets import make_classification,make_circles,make_regression
from sklearn.model_selection import train_test_split,KFold
import sklearn.neural_network as net
import sklearn.linear_model as LM
from scipy.stats import multivariate_normal
from sklearn.metrics import r2_score,mean_squared_error,classification_report
from sklearn import svm
import osN=100
X,Y=make_circles(n_samples=N,noise=0.2,factor=0.5,random_state=123)
fig = plt.figure(figsize=(20,6))
markers=['^','o']
ax = fig.add_subplot(121, projection='3d')
var = multivariate_normal(mean=[0,0], cov=[[1,0],[0,1]])
Z=np.zeros((len(X),))
for i,x in enumerate(X):Z[i]=var.pdf(x)
for k,m in zip([1,0],markers):ax.scatter(X[Y==k,0],X[Y==k,1],Z[Y==k],marker=m,s=40)
ax.set_xlabel('X1')
ax.set_ylabel('X2')
ax.set_zlabel('Z')
ax.set_title('三维空间下100个样本观测点的分布')  ax = fig.add_subplot(122)
X1,X2= np.meshgrid(np.linspace(X[:,0].min(),X[:,0].max(),500),np.linspace(X[:,1].min(),X[:,1].max(),500))
X0=np.hstack((X1.reshape(len(X1)*len(X2),1),X2.reshape(len(X1)*len(X2),1)))
Z=np.zeros((len(X0),))
for i,x in enumerate(X0):Z[i]=var.pdf(x)
for k,m in zip([1,0],markers):ax.scatter(X[Y==k,0],X[Y==k,1],marker=m,s=50)
ax.set_title("100个样本观测点在二维空间中的分布")
ax.set_xlabel("X1")
ax.set_ylabel("X2")
ax.grid(True,linestyle='-.')
contour = plt.contour(X1,X2,Z.reshape(len(X1),len(X2)),[0.12],colors='k')
#ax.clabel(contour,fontsize=10,colors=('k'))  #等高线上标明z(即高度)的值

运行结果如下图所示  

总结

支持向量机(Support Vector Machine,SVM)是一种用于分类和回归分析的监督学习模型。以下是支持向量机的总结要点:

  1. 原理

    • SVM的核心思想是找到一个最优的超平面,将不同类别的样本点分开,并使得两个类别的支持向量到超平面的距离最大化。
    • SVM在特征空间中寻找一个最优的划分超平面,最大化间隔(Margin),同时引入核技巧进行非线性分类。
  2. 优点

    • 可用于解决线性和非线性分类问题。
    • 在高维空间中有效,适用于特征维度较高的数据集。
    • 泛化能力较强,对过拟合的控制比较好。
  3. 缺点

    • 对大规模样本数据的训练耗时较长,不适用于数据量较大的情况。
    • 对噪声敏感,数据集中存在噪声会影响模型性能。
    • 需要调节核函数和正则化参数,选择合适的参数对模型性能影响较大。
  4. 应用

    • SVM广泛应用于文本分类、图像识别、生物信息学、医学影像分析等领域。
    • 在实践中,SVM被用于二分类、多分类,以及回归等任务。
  5. 核心概念

    • 支持向量(Support Vectors):训练数据集中距离超平面最近的样本点。
    • 超平面(Hyperplane):在特征空间中将不同类别样本点分开的分界线。
    • 间隔(Margin):支持向量到超平面的距离。
  6. SVM变种

    • 支持向量回归(Support Vector Regression,SVR):用于回归问题。
    • 核支持向量机(Kernel SVM):用于处理非线性分类问题。
    • 多类别SVM:通过一对一(One vs One)或一对其余(One vs Rest)策略处理多类别分类问题。

总的来说,支持向量机是一种强大的机器学习算法,具有良好的分类性能和泛化能力,适用于多种领域的分类和回归任务。在实际应用中,需要合理选择参数、优化模型,并根据具体问题调整算法以提高模型性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/36050.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个AI图片生成工具导航网站

上周末上线了一个AI图片生成工具导航网站,主要是面向AI图片工具这个垂直领域。 https://chatgpt-image-generator.com/ 目标是通过收集当下的一些工具,然后进行分类管理,一方面方便大家发现新的工具,另一方面能够更加有针对性、…

华为OceanStor磁盘阵列存储恢复出厂设置命令 LUN不处于在线状态,不能执行此操作解决方案

环境 OceanStor S2600T V2老版本 客户现场有一台Oceanstor 2600 V2的存储,因和另一台磁盘扩展框做了跨设备LUN需要进行配置清除,配置结束后需要重新划分存储空间并对接服务器,保证业务能够正常上线!在清除配置回退的过程中&#…

G8 - ACGAN

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 目录 模型结构 模型结构 之前几期打卡中,已经介绍过GAN CGAN SGAN,而ACGAN属于上述几种GAN的缝合怪,其模型的结构图如下&a…

Python 中的抽象语法树

Abstract Syntax Trees in Python 注:机翻,未校对。 Requirement: All examples are compatible with at least Python v3.6, except for using ast.dump() with the attribute indent which has been added in Python v3.9. 要求:所有示例至…

第二十课,认识列表与定义列表

一,列表的作用 思考一个问题:如果我想要在程序中,记录5名学生的信息,如姓名。 如何做呢? 这就是列表的作用,能帮助我们更加高效的存储各种数据 思考:如果一个班级100位学生,每个人…

利用SHAP算法解释BERT模型的输出

1 何为SHAP? 传统的 feature importance 只告诉哪个特征重要,但并不清楚该特征如何影响预测结果。SHAP 算法的最大优势是能反应每一个样本中特征的影响力,且可表现出影响的正负性。SHAP算法的主要思想为:控制变量法,如果某个特征…

VMware完美安装Ubuntu20.04

一、官网下载Ubuntu20.04 下载地址为:https://releases.ubuntu.com/https://releases.ubuntu.com/ 下载完后镜像为ubuntu-20.04.4-desktop-amd64.iso 二、Ubuntu安装 2.1、打开VMware player,并创建新虚拟机。 2.2、点击浏览按钮选择需要安装的镜像 2…

Linux系统上部署Whisper。

Whisper是一个开源的自动语音识别(ASR)模型,最初由OpenAI发布。要在本地Linux系统上部署Whisper,你可以按照以下步骤进行: 1. 创建虚拟环境 为了避免依赖冲突,建议在虚拟环境中进行部署。创建并激活一个新…

ElementUI组件

目录 1、安装ElementUI 2、在main.js文件中加入 3、使用组件 终端运行: Element,一套为开发者、设计师和产品经理准备的基于Vue2.0的桌面端组件库. 1、安装ElementUI 控制台输入 npm i element-ui -S 2、在main.js文件中加入 import ElementUI from…

老司机开发技巧,如何扩展三方包功能

前言 最近碰上有个业务,查询的sql如下: sql 复制代码 select * from table where (sku_id,batch_no) in ((#{skuId},#{batchNo}),...); 本来也没什么,很简单常见的一种sql。 问题是我们使用的是mybatis-plus,然后写的时候有没…

重庆交通大学24计算机考研数据速览,专硕第二年招生,复试线321分!

重庆交通大学(Chongqing Jiaotong University,CQJTU),是由重庆市人民政府和中华人民共和国交通运输部共建的一所交通特色、以工为主的多科性大学,入选“中西部高校基础能力建设工程”、“卓越工程师教育培养计划”、国…

企业级堡垒机JumpServer

文章目录 JumpServer是什么生产应用场景 Docker安装JumpServer1.Docker安装2.MySQL服务安装3.Redis服务安装4.key生成5.JumpServer安装6.登录验证 系统设置邮箱服务器用户和用户组创建系统审计员资产管理用户创建资产节点资产授权查看用户的资产监控仪表盘 命令过滤器创建命令过…

Model3C芯片方案--86彩屏中控面板Modbus协议说明

一、概述 Model3C芯片是一款基于RISC-V的高性能、国产自主、工业级高清显示与智能控制MCU,配备强大的2D图形加速处理器、PNG/JPEG解码引擎,并支持工业宽温。基于Model3C芯片的86彩屏中控面板,通过集成Modbus协议,实现了与多种控制…

前端存储都有哪些

cookie 、sessionStorage、localStorange、http缓存 、indexDB cookie 由服务器设置,在客户端存储,然后每次发起同源请求时,发送给服务器端。cookie最多能存储4K数据,它的生存时间由expires属性指定,并且cookie只能被…

涨点超强!图像特征提取最新方法!性能效率快到飞起

在图像处理领域,有一个非常关键的步骤:图像特征提取。它能给我们提供一种高效、准确且灵活的方式来描述和分析图像内容。 通过降低图像数据的维度,去除冗余和噪声信息,图像特征提取不但简化了后续处理过程,还能提高算…

ffmpeg使用mjpeg把yuvj420p编码为jpg图像

version #define LIBAVUTIL_VERSION_MAJOR 58 #define LIBAVUTIL_VERSION_MINOR 12 #define LIBAVUTIL_VERSION_MICRO 100 note 1. 通过*.jpg推测时,out_fmt为image2,打开*.jpg文件时,in_fmt为image2 但是out_fmt为image2时&#xff…

web项目打包成可以离线跑的exe软件

目录 引言打开PyCharm安装依赖创建 Web 应用运行应用程序打包成可执行文件结语注意事项 引言 在开发桌面应用程序时,我们经常需要将网页集成到应用程序中。Python 提供了多种方法来实现这一目标,其中 pywebview 是一个轻量级的库,它允许我们…

滑动窗口算法——部分OJ题详解

目录 关于滑动窗口 部分OJ题详解 209.长度最小的子数组 3.无重复字符的最长字串 1004.最大连续1的个数Ⅲ 1658.将x减到0的最小操作数 904.水果成篮 438.找到字符串中所有字母异位词 30.串联所有单词的子串 76.最小覆盖子串 关于滑动窗口 其实滑动窗口也是通过双指针…

Git(涵盖GitHub\Gitee码云\GitLab)

Git(涵盖GitHub\Gitee码云\GitLab) 文章目录 Git(涵盖GitHub\Gitee码云\GitLab)课程介绍Git概述官网介绍版本控制介绍两种版本控制工具集中式版本控制工具分布式版本控制工具 Git工作机制代码托管中心 Git安装和客户端的使用Git常用命令设置用户签名初始化本地库查看本地库状态…

C++——string类用法指南

一、前言 在C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列的库函数,但是这些库函数与字符串是分离的,不太符合OOP的思想,而且底层空间需要用户自己管理,稍…