当前位置: 首页 > news >正文

【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)策略处理多类别分类问题。

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

相关文章:

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

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…...

备份和还原

stai和dnta snat:源地址转换 内网---外网 内网ip转换成可以访问外网的ip 内网的多个主机可以使用一个有效的公网ip地址访问外部网络 DNAT:目的地址转发 外部用户,可以通过一个公网地址访问服务内部的私网服务。 私网的ip和公网ip做一个…...

Java数组的初始化方法

Java数组的初始化方法 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在Java编程中,数组是一种非常基础也非常重要的数据结构,它能够存储…...

通过分离有色和无色pdf页面减少打印费

前言 该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具,去打印店打印全彩的毕业论文的话会比较贵,他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印,前者打印彩色,后者打印黑白&#xf…...

c语言--指针

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理c语言中指针的相关知识点。 指针概念 指针存储的就是数据的地址。 直观理解: 李华家是北洋路130号1单元101 用变量处理数据: 我们去李华家拿数据。 用指针处理数据: 我们去北洋路130号1单元101拿数据…...

python-九九乘法表(对齐式1)

[题目描述] 输出九九乘法表,输出格式见样例。输入格式: 无输出格式: 输出乘法表,对齐方式见样例输出。样例输入 无样例输出 来源/分类(难度系数:一星) 完整代码展示: #对齐式1 a[] …...

thinkphp单独为某个接口设置缓存

参考 官方文档 $this->request->cache(__URL__,600);只需要在接口方法的开头添加这个代码即可...

OpenCV视觉--视频人脸微笑检测(超详细,附带检测资源)

目录 概述 具体实现 1.加载分类器 2.打开摄像头并识别人脸 3.处理人脸并检测是否微笑 效果 总结 概述 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习库,广泛应用于图像处理和视频分析等领…...

docker 搭建 AI大数据模型 --- 使用GPU

docker 搭建 AI大数据模型 — 使用GPU方式 搭建本地大模型,最简单的方法!效果直逼GPT 服务器GPU系统HP580 G8P40Rocky9.2 安装程序AnythingLLM前端界面Open WebUIChatOllamaollama 一、AnythingLLM 介绍 AnythingLLM 是 Mintplex Labs Inc. 开发的一…...

面向对象, 常用类, 集合, 异常, JDBC, mysql数据库 复习

1.面向对象 (1)面向过程和面向对象 ● 面向过程的程序设计思想 (procedure -Oriented Programming),简称POP ● 关注的焦点是过程:过程就是操作数据的步骤。如果某个过程的实现代码重复出 现,那么就可…...

js取数组最大值之Math.max、Math.max.apply

js取数组最大值之Math.max、Math.max.apply Math.maxMath.max.applyapply()第一个参数为什么可以是null 最小值同理 Math.max Math.max(n1,n2,n3,…,nX) 支持传递多个参数,带有较大的值的那个数 Math.max(2,5,3,6,2,4,2,15,9,6,0,1)Math.max.apply apply() 语法&a…...

各种中间件的安装

文章目录 20232306mysql的wondows安装 2023 2306 mysql的wondows安装 常用mysql教程 springboot整合druid连接池SpringBoot配置Druid连接池 mysql的wondows安装 MySQL学习笔记 01、MySQL安装 这个是安装的具体思路 win10 安装 mysql 5.7 msi版的教程图文详解 这个是安装的…...

【Mysql】多表查询、隐式内链接、显式内连接、左外连接、右外连接

多表查询 什么是多表查询 •DQL: 查询多张表,获取到需要的数据 •比如 我们要查询家电分类下 都有哪些商品,那么我们就需要查询分类与商品这两张表 数据准备 创建db3_2 数据库 -- 创建 db3_2 数据库,指定编码 CREATE DATABASE db3_2 CHARACTER SET utf8;创建分类表与商品表 …...

Linux驱动开发(三)--新字符设备驱动开发 LED驱动开发升级

1、新字符设备驱动原理 使用 register_chrdev 函数注册字符设备的时候只需要给定一个主设备号即可,但是这样会 带来两个问题 需要我们事先确定好哪些主设备号没有使用 会将一个主设备号下的所有次设备号都使用掉,比如现在设置 LED 这个主设备号为200&…...

MCU的最佳存储方案CS创世 SD NAND

大家都知道MCU是一种"麻雀"虽小,却"五脏俱全"的主控。它的应用领域非常广泛,小到手机手表,大到航空航天的设备上都会用到MCU.市面上目前几个主流厂商有意法半导体(其中最经典的一款就是STM32系列)…...

40岁学习java是否需要报班学习?

在开始前刚好我有一些资料,是我根据网友给的问题精心整理了一份「java的资料从专业入门到高级教程」, 点个关注在评论区回复“666”之后私信回复“666”,全部无偿共享给大家!!!应该不需要。各种公开免费的…...

Vitis Accelerated Libraries 学习笔记--OpenCV 运行测试

目录 1. 简介 2. 实例测试 2.1 实例介绍 2.2 创建工程 2.2.1 创建工程 2.2.2 获取路径 2.2.3 设置路径 2.2.4 打开工程 2.2.5 添加文件 2.2.6 启动 GUI 2.2.7 配置 csim 参数 3 常见错误 3.1 核心共享库报错 4. 总结 1. 简介 在《Vitis Accelerated Libraries …...

加固三防平板如何提高轨道交通系统的运营效率?

在当今快节奏的社会中,轨道交通系统作为城市交通的重要组成部分,其运营效率的提升对于缓解交通拥堵、满足人们的出行需求以及促进城市的发展具有至关重要的意义。而加固三防平板作为一种先进的技术设备,正逐渐在轨道交通领域发挥着关键作用&a…...

Django 靓号管理系统:实现登录功能

本文将详细介绍如何在 Django 靓号管理系统中实现登录功能,包括用户认证、验证码生成、以及中间件的使用。我们将逐步展示所有相关代码,并附带详细注释。 1. 项目结构 首先,让我们看一下项目的基本结构: number ├── manage.py ├── monaco.ttf ├── number │ …...

【Solr 学习笔记】Solr 源码启动教程

Solr 源码启动教程 本教程记录了如何通过 IDEA 启动并调试 Solr 源码,从 Solr9 开始 Solr 项目已由 ant 方式改成了 gradle 构建方式,本教程将以 Solr 9 为例进行演示,IDE 选择使用 IntelliJ IDEA。 Solr github 地址:https://gi…...

Java中的事件驱动编程模型

Java中的事件驱动编程模型 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我将为大家介绍Java中的事件驱动编程模型。事件驱动编程模型是一种以事件为核心驱…...

Python 语法基础一

1.变量 python 中变量很简单,不需要指定数据类型,直接使用等号定义就好。python变量里面存的是内存地址,也就是这个值存在内存里面的哪个地方,如果再把这个变量赋值给另一个变量,新的变量通过之前那个变量知道那个变量…...

从零开始:Spring Boot 中使用 Drools 规则引擎的完整指南

规则引擎作用 规则引擎主要用于将业务逻辑从应用程序代码中分离出来,提高系统的灵活性和可维护性。规则引擎通过预定义的规则来处理输入数据并做出相应的决策,从而实现业务逻辑的自动化和动态调整。 例如 门店信息校验:美团点评在门店信息…...

工业边缘计算网关

1 介绍 HINETG系列边缘计算网关(Linux操作系统),是华辰智通的—款面向工业现场设备接入、数据采集、设备监控的工业级边缘计算网关。采用ARM Cortex-A7 800MHz高性能CPU,拥有以太网、串口、CAN口、IO口等丰富的接口,支持以太网、…...

【C++ 初阶路】--- 类和对象(末)

目录 一、const成员1.1 取地址及const取地址操作符重载 二、再谈构造函数2.1 构造函数体赋值2.2 初始化列表2.3 explicit关键字 三、static成员3.1 概念3.2 特性 四、友元4.1 友元函数4.2 友元类 五、内部类六、匿名对象 一、const成员 将const修饰的“成员函数”称之为const成…...

bable 【实用教程】

简介 bable 用于将 ES6 的语法编译为 ES5 只关心语法,不关心 API 是否正确。不处理模块化(webpack 会处理) 搭建开发环境 安装相关的包 npm i babel/cli babel/core babel/preset-env新建文件 .babelrc,内容为 { "presets…...

Android中使用startActivityForResult启动活动

Android中使用startActivityForResult启动活动 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!在本文中,我们将深入探讨Android开发中使用startActi…...

NineData和华为云在一起!提供一站式智能数据库DevOps平台

以GuassDB数据库为底座 NineData和华为云一起 为企业提供 一站式智能数据库DevOps平台 帮助开发者 高效、安全地完成 数据库SQL审核 访问控制、敏感数据保护等 日常数据库相关开发任务 NineData 智能数据管理平台 NineData 作为新一代的云原生智能数据管理平台&#xf…...

深入解析 Redisson分布式锁看门狗机制

一、Redisson分布式锁概述 1.1 分布式锁的意义 在分布式系统中,多个节点可能同时访问共享资源,导致数据不一致或竞态条件。分布式锁通过协调不同节点对共享资源的访问,确保数据的一致性和并发访问的安全性。 1.2 Redisson分布式锁的优势 …...

Apache Arrow 和数据的未来:开放标准推动人工智能发展

Apache Arrow 是一种开源列式内存格式,适用于平面数据和分层数据。在现代数据湖中,开放数据格式(如 Apache Arrow)位于现代对象存储的存储层中。这些格式成为对象存储中的对象。 在最新版本中,Apache Arrow 宣布计划从…...

Vue项目生产环境的打包优化

Vue项目生产环境的打包优化 前言 在这篇文章我们讨论Vue项目生产环境的打包优化,并按步骤展示实际优化过程中的修改和前后对比。 背景 刚开始的打包体积为48.71M 优化 步骤一:删除viser-vue viser-vue底层依赖antv/g2等库一并被删除,…...

oracle数据库之使用Java程序调用存储过程(二十四)

在Oracle数据库中,你可以使用Java程序来调用存储过程。这通常涉及几个步骤:首先,确保你的Java环境能够连接到Oracle数据库;其次,使用JDBC(Java Database Connectivity)来调用存储过程。 以下是…...

西电953总分第一、专业课第一考研上岸

今年上岸西电杭研院网信院网络与信息安全专业,总分370分,专业课116分,分别是总分第一名,专业课第一名,感谢研梦的953叶学姐,非常负责,本硕大佬学姐,当年密码学38分选手(满…...

pytorch-模型训练

目录 1. 模型训练的基本步骤1.1 train、test数据下载1.2 train、test数据加载1.3 Lenet5实例化、初始化loss函数、初始化优化器1.4 开始train和test 2. 完整代码 1. 模型训练的基本步骤 以cifar10和Lenet5为例 1.1 train、test数据下载 使用torchvision中的datasets可以方便…...

Linux /proc目录总结

1、概念 在Linux系统中,/proc目录是一个特殊的文件系统,通常被称为"proc文件系统"或"procfs"。这个文件系统以文件系统的方式为内核与进程之间的通信提供了一个接口。/proc目录中的文件大多数都提供了关于系统状态的信息&#xff0…...

【JavaEE】浅谈线程(二)

线程 线程的常见属性 线程属性可以通过下面的表格查看。 •ID 是线程的唯⼀标识,不同线程不会重复 • 名称是各种调试⼯具⽤到(如jconsoloe) • 状态表示线程当前所处的⼀个情况,下⾯我们会进⼀步说明 • 优先级高的线程理论上来…...

爬虫:爬取知乎热榜一级评论及回答2024不包含翻页

一、先上结果(注:本文仅为兴趣爱好探究,请勿进行商业利用或非法研究,负责后果自负,与作者无关) 1、爬标题及其具体内容 2、抓标题下的对应回答 3、爬取对应一级评论 二、上流程 1、获取cookies(相信哥哥姐姐…...

AI 编程探索- iOS动态标签控件

需求分析: 标签根据文字长度,自适应标签居中显示扩展 超过内容显示范围,需要换行显示,且保持居中显示 AI实现过程 提问: 回答: import UIKit import SnapKitclass DynamicLabelsContainerView: UIView…...

计算机网络——数据链路层(数据链路层概述及基本问题)

链路、数据链路和帧的概念 数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。 链路(…...

【前端】前端权限管理的实现方式:基于Vue项目的详细指南

前端权限管理的实现方式:基于Vue项目的详细指南 在Web开发中,前端权限管理是一个确保应用安全性和优化用户体验的关键部分。本文将详细介绍前端权限管理的几种实现方式,并通过Vue项目中的代码示例来演示具体实现方法。 前端权限管理的基本实…...

MySQL数据库基础练习系列——教务管理系统

项目名称与项目简介 教务管理系统是一个旨在帮助学校或教育机构管理教务活动的软件系统。它涵盖了学生信息管理、教师信息管理、课程管理、成绩管理以及相关的报表生成等功能。通过该系统,学校可以更加高效地处理教务数据,提升教学质量和管理水平。 1.…...

windowns server2016服务器配置php调用powerpoint COM组件

解决问题:windowns server2016服务器配置php调用powerpoint COM组件 环境: windows server2016 宝塔(nginxmysqlphp7.2) IIS 搭建宝塔: 下载地址:https://www.bt.cn/download/windows.html ​ 安装使用&…...

Git之checkout/reset --hard/clean -f区别(四十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

MySQL数据库基础练习系列:科研项目管理系统

DDL CREATE TABLE Users (user_id INT AUTO_INCREMENT PRIMARY KEY COMMENT 用户ID,username VARCHAR(50) NOT NULL UNIQUE COMMENT 用户名,password VARCHAR(255) NOT NULL COMMENT 密码,gender ENUM(男, 女) NOT NULL COMMENT 性别,email VARCHAR(100) UNIQUE COMMENT 邮箱 …...

算法设计与分析--考试真题

分布式算法试题汇总选择题简答题算法题 2013级试题2019级试题2021年秋考卷 根据考试范围找相应题目做。 分布式算法试题汇总 选择题 下述说法错误的是___ A 异步系统中的消息延迟是不确定的 B 分布式算法的消息复杂性是指在所有合法的执行上发送消息总数的最大值 C 在一个异步…...

【鸿蒙学习笔记】页面和自定义组件生命周期

官方文档:页面和自定义组件生命周期 目录标题 [Q&A] 都谁有生命周期? [Q&A] 什么是组件生命周期? [Q&A] 什么是组件?组件生命周期 [Q&A] 什么是页面生命周期? [Q&A] 什么是页面?页面生…...

ASPICE与ISO 21434:汽车软件与网络安全标准的协同与互补

ASPICE(Automotive SPICE)与ISO 21434在汽车行业中存在显著的相关性,主要体现在以下几个方面: 共同目标: ASPICE和ISO 21434都旨在提高汽车系统和软件的质量、可靠性和安全性。ASPICE关注汽车软件开发过程的成熟度和…...

视频格式转换方法:如何使用视频转换器软件转换视频

众所周知,目前存在许多不同的视频和音频格式。但我们的媒体播放器、移动设备、PC 程序等仅兼容少数特定格式。例如,如果不先将其转换为 MP4、MOV 或 M4V 文件,AVI、WMV 或 MKV 文件就无法在 iPhone 上播放。 视频转换器允许您将一种视频格式…...

vim操作小诀窍:快速多行添加注释

在使用vim编译python代码的时候,经常碰到需要将一段代码注释的情况,每次都要按“向下” “向左”按钮,将光标移到句首,然后再键入#井号键。如果行数较多,则操作相当繁琐。 vim里面有将一段文字前面加#注释的方法&#…...

无线麦克风领夹哪个牌子好,2024年领夹麦克风品牌排行榜推荐

​随着短视频热潮的兴起,越来越多的人倾向于用vlog记录日常生活,同时借助短视频和直播平台开辟了副业。在这一过程中,麦克风在近两年内迅速发展,从最初的简单收音功能演变为拥有多样款式和功能,以满足视频创作的需求。…...

Python中使用Oracle向量数据库实现文本检索系统

Python中使用Oracle向量数据库实现文本检索系统 代码分析 在本文中,我们将深入分析一个使用Oracle向量数据库实现文本检索系统的Python代码,并基于相同的技术生成一个新的示例。这个系统允许我们存储文档及其嵌入向量,并执行相似性搜索。 代码分析 让我们逐步分析原始代码的主…...

es6新语法

es6新语法 1 什么是ES6 JS语法分三块 ECMAScript : 基础语法BOM 浏览器对象 history location windowDOM 文档对象 document 编程语言JavaScript是ECMAScript的实现和扩展 。ECMAScript是由ECMA(一个类似W3C的标准组织)参与进行标准化的语法规范。ECMAS…...

使用 docker buildx 构建跨平台镜像

buildx是Docker官方提供的一个构建工具,它可以帮助用户快速、高效地构建Docker镜像,并支持多种平台的构建。使用buildx,用户可以在单个命令中构建多种架构的镜像,例如x86和arm架构,而无需手工操作多个构建命令。此外bu…...

鸿蒙项目实战-月木学途:2.自定义底部导航

效果预览 Tabs组件简介 Tabs组件的页面组成包含两个部分,分别是TabContent和TabBar。TabContent是内容页,TabBar是导航页签栏,页面结构如下图所示,根据不同的导航类型,布局会有区别,可以分为底部导航、顶部…...

ppt接单渠道大公开‼️

PPT 接单主要分两种:PPT 模板投稿和PPT 定制接单,我们先从简单的 PPT 模板投稿说起。 PPT 模板投稿 利用业余时间,做一些 PPT 模板上传到平台,只要有人下载你的模板,你就有收入。如果模板质量高,简直就是一…...

JMH320【亲测】【御剑九歌】唯美仙侠手游御剑九歌+WIN学习手工端+视频教程+开服清档+运营后台+授权GM物品充值后台

资源介绍: 这也是仙梦奇缘的一个游戏 注意:外网14位IP或域名 ———————————————————————————————————– ps后台介绍: 1区运营后台:http://ip:9981/admin/admintool/ 2区运营后台:http://ip…...

加量不加价!问界新M7Ultra导购哪款更值得买?

本以为是焕新版,最终命名为Ultra版 名字不重要我们扒一扒新的M7 Ultra有哪些升级 哪款车型才是更值得入的呢?四款车型,5座车以及6座车分别对应单电机后驱版+四驱版车型1.5T发动机、42度电池包两驱车型纯电续航240公里四驱车型纯电续航210公里代替新M7的四款智驾车型7月1日前…...

车身结构的匠心打造:星途揽月与传祺GS8的安全对决

在谈论汽车的安全性时,车身结构作为一个核心要素,其重要性不言而喻。今天,我们将对两款备受瞩目的SUV——星途揽月和传祺GS8的车身结构进行深入剖析。我们将详细探讨这两款车型在车身设计上如何精益求精,通过独特的匠心独运,旨在为乘客提供最为周全和最大程度的保护,从而…...

上海市眼病防治中心发布新书,用故事告诉孩子爱眼护眼

6月3日,在第29个全国爱眼日来临前夕,一场儿童眼健康知识科普盛宴在上海市杨浦区YOUNG剧场拉开帷幕,《眼睛逃跑计划》新书发布会暨舞台剧杨浦区专场演出举行,标志着上海首个以“儿童视力保护”为主题的科普舞台剧成功转化为纸质绘本。发布的新书。上海市眼病防治中心 供图《…...

JavaScrip原型对象

参考 JavaScrip原型对象 | LogDicthttps://www.logdict.com/archives/javascripyuan-xing-mo-shi...

linux学习(六)

1.网络管理 (1)查看 ifconfig: root用户可以查看网卡状态, 普通用户: /sbin/ifconfig(需要加上命令的完整路径) (2)修改网络配置 通过命令修改网络配置 设置网卡的ip地址;禁用网卡和启用网卡了。 添加网关: (3)网络故障查询 ①ping 检测当前主机和目标主机是…...

对北京新发地当时菜品三十天内价格分布式爬取(1)---(获取当时菜品数据并构建请求数据推入redis)

本次项目网页url 北京新发地: http://www.xinfadi.com.cn/priceDetail.html 我们首先创建一个爬虫用于收集url与请求的data然后b,c,d使用RedisCrawlSpider来对数据进行分布式爬取 在此篇中我们仅介绍爬虫a 一.获取当天所有菜品数据 这是一条请求的负载我们只需要对pubDateSta…...