【机器学习】支持向量机SVR、SVC分析简明教程

关于使用SVM进行回归分析的介绍很少,在这里,我们讨论一下SVR的理论知识,并对该方法有一个简明的理解。

1. SVC简单介绍

SVR全称是support vector regression,是SVM(支持向量机support vector machine)对回归问题的一种运用。所以在介绍SVR之前,我们先简单的来了解一下什么是SVM。

SVM

SVM与logistic分类器类似,也是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解

对于下面一个数据集,有两类分别使用×和○来表示。那么我们想要找到一条曲线来区分这两类。可想而知,这样的曲线存在无数条,如何找到那一条最优的曲线呢?那就是要找到间隔(Gap)最大的那一条曲线,然后我们就可以根据这条曲线来分类了。而这条曲线,我们称为超平面。图中加粗的×与○,我们则称这些向量为支持向量。
在这里插入图片描述
而实际上,我们很少会遇到上面的情况,能直接使用一条直线将数据分类,更多的时候,数据无法通过直线来分类。比如下面这种情况:
在这里插入图片描述
当然了,这都不是事,既然在二维上该数据无法使用线性分类,那我们就将数据映射到更高维上,在高维上构造超平面,从而完成分类。
在这里插入图片描述
这就是为什么将上面的直线称为超平面。
所以对于非线性的模型,我们需要:

  1. 使用非线性映射将数据投影至特征空间;
  2. 在特征空间使用线性分类器;看似很简单,但是我们在映射时,就会发现当变量增多时,映射到高维空间的维度是呈指数增长的,计算起来十分困难,这时候就需要核函数(kernel function)了。核函数也是将特征从低维到高维进行转换,但是它是先在低维上进行计算,实际的分类效果表现在高维上。这样,我们就避免了在高维上复杂的计算,仍得到相同的结果。一些常用的核函数:
  • 多项式核
  • 高斯核
  • 线性核
    好了,SVM就简单介绍到这里。更多理论的推导或者其他更深的理论,请自行查阅!

1.1 SVC示例

下面是一个使用Scikit-Learn库的 SVM 回归示例:
在https://blog.csdn.net/weixin_48293076/article/details/127935585网站上学习到的

'''
https://scikit-learn.org/stable/modules/svm.html
'''
import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasetsdef make_meshgrid(x, y, h=.02):
#创建要在其中打印的点网格x_min, x_max = x.min() - 1, x.max() + 1y_min, y_max = y.min() - 1, y.max() + 1#np.arange(start,end,step)#X, Y = np.meshgrid(x, y) 代表的是将x中每一个数据和y中每一个数据组合生成很多点,#然后将这些点的x坐标放入到X中,y坐标放入Y中,并且相应位置是对应的xx, yy = np.meshgrid(np.arange(x_min, x_max, h),np.arange(y_min, y_max, h))return xx, yy#**params,传递dictionary
#params、*params分别传递单参数、tuple
#相当于只是绘制了分区的背景板
def plot_contours(ax, clf, xx, yy, **params):#模型预测,np.c_按行连接两个矩阵,要求行数相等Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])Z = Z.reshape(xx.shape)#contourf绘制二维颜色填充图#contour画的是等高线中的线,而contourf画的是登高线之间的区域out = ax.contourf(xx, yy, Z, **params) #Z和xx,yy维度相同return out#导入数据
iris = datasets.load_iris()
#只获取前两个特征,绘制二维图像
X = iris.data[:, :2]
y = iris.target#设置惩罚参数
C = 1.0
#定义多种模型
models = (svm.SVC(kernel='linear', C=C),svm.LinearSVC(C=C),svm.SVC(kernel='rbf', gamma=0.7, C=C),svm.SVC(kernel='poly', degree=3, C=C))
#循环拟合模型
models = (clf.fit(X, y) for clf in models)titles = ('SVC with linear kernel','LinearSVC (linear kernel)','SVC with RBF kernel','SVC with polynomial (degree 3) kernel')plt.figure(1)
#设置3*2画布 
fig, sub = plt.subplots(2, 2)
#设置子图之间的空间保留的宽度和高度
plt.subplots_adjust(wspace=0.4, hspace=0.4)X0, X1 = X[:, 0], X[:, 1]
xx, yy = make_meshgrid(X0, X1)#循环绘图
#sub.flatten()后只需要用0,1,2,3…记录位置,不使用此函数需要用坐标表示
for clf, title, ax in zip(models, titles, sub.flatten()):plot_contours(ax, clf, xx, yy,cmap=plt.cm.coolwarm, alpha=0.8)#cmap指定点颜色,edgecolors指定点的边界颜色,'k'黑色边框ax.scatter(X0, X1, c=y, cmap=plt.cm.coolwarm, s=20, edgecolors='k')ax.set_xlim(xx.min(), xx.max())ax.set_ylim(yy.min(), yy.max())ax.set_xlabel('Sepal length')ax.set_ylabel('Sepal width')ax.set_xticks(())ax.set_yticks(())ax.set_title(title)plt.show()

输出结果:
在这里插入图片描述

2. SVR简单介绍

对于非线性的模型,与SVM样使用核函数(kermel function)映射到特征空间,然后再进行回归。

支持向量回归(Support Vector Regression, SVR)是支持向量机(SVM)在回归问题上的应用。以下是关于SVR的一些关键信息:

  1. 基本概念

    • SVR通过将输入空间映射到高维特征空间,并在高维空间中寻找最优超平面来进行回归。
    • SVR的目标是找到一个超平面,使得训练样本在该超平面上的映射值与目标值的差异最小化,并且同时保持误差在一定范围内。
  2. 核函数

    • SVR可以使用不同的核函数来处理非线性数据,常用的核函数包括线性核函数、多项式核函数、径向基函数(RBF)和Sigmoid核函数。
    • 核函数的选择使得SVR能够在高维空间中找到最优的回归平面,从而处理复杂的非线性关系。
  3. 适用数据集

    • SVR适用于对模型泛化性能要求较高的情况,能够处理高维数据,并且在样本数量较少的情况下表现良好。
    • 它被广泛应用于金融市场预测、工业过程控制、生物信息学和经济学等领域。
  4. 参数

    • C:错误项的惩罚因子,必须为正数。
    • epsilon:控制边界的松弛变量。
    • gamma:核函数的系数,在核函数为‘rbf’,‘poly’,‘sigmoid’时使用。
    • tol:残差收敛条件,默认是0.0001。
    • max_iter:最大迭代次数,默认值为1000。
  5. 优点

    • 能够处理高维数据,并且在样本数量较少的情况下表现良好。
    • 灵活的核函数使其能够处理非线性数据。
  6. 缺点

    • 对参数(如C和ε)的选择敏感,通常需要通过交叉验证来选择最佳参数。
    • 训练时间较长,特别是对于大规模数据集。
  7. 实现

    • 在Python中,可以使用scikit-learn库中的SVR类来实现SVR回归。

SVR是一种强大的回归分析工具,适用于各种复杂的回归任务,尤其是在高维和非线性数据的处理上表现突出。

我们知道,最简单的线性回归模型是要找出一条曲线使得残差最小。同样的,SVR也是要找出一个超平面,使得所有数据到这个超平面的距离最小。
在这里插入图片描述
前面说了,SVR是SVM的一种运用,基本的思路是一致,除了一些细微的区别。使用SVR作回归分析,与SVM一样,我们需要找到一个超平面,不同的是:在SVM中我们要找出一个间隔(gap)最大的超平面,而在SVR,我们定义一个ε,如上图所示,定义虚线内区域的数据点的残差为0,而虚线区域外的数据点(支持向量)到虚线的边界的距离为残差(ζ)。与线性模型类似,我们希望这些残差(ζ)最小。所以大致上来说,SVR就是要找出一个最佳的条状区域(2ε宽度),再对区域外的点进行回归
在这里插入图片描述
对于非线性的模型,与SVM一样使用核函数(kernel function)映射到特征空间,然后再进行回归。

2.1 SVR示例(时间序列曲线预测)

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt
from sklearn.metrics import mean_squared_error,mean_absolute_error
from sklearn.model_selection import GridSearchCV'''
生成数据集
'''
N = 50
#设置随机数种子,保证每次产生的随机数相同
np.random.seed(0)
#随机产生[0,6)中的均匀分布序列并排序
#np.random.uniform(x,y,n) 随机生成[x,y)之间的n个数
#np.random.randn(n,x,y)随机生成x行y维标准正态分布的array,n个
x = np.sort(np.random.uniform(0,6,N),axis = 0)
y = 2*np.sin(x)  + 0.1*np.random.randn(N)
#reshape(-1,1)中的-1代表无意义
#reshape(-1,1)代表将二维数组重整为一个一列的二维数组
x = x.reshape(-1,1)'''
运用不同核函数进行支持向量机回归
'''    #运用高斯核函数 C = 100,gamma = 0.4
svr_rbf = SVR(kernel = 'rbf', gamma = 0.4, C = 100)
svr_rbf.fit(x,y)#运用线性核函数
svr_lin = SVR(kernel = 'linear', C = 100)
svr_lin.fit(x,y)#运用多项式核函数
svr_poly = SVR(kernel = 'poly', degree = 3, C = 100)
svr_poly.fit(x,y)'''
生成测试集数据,使用使用相同的方式
'''
np.random.seed(0)
x_test = np.sort(np.random.uniform(0,9,N),axis = 0)
y_test = 2*np.sin(x_test)  + 0.1*np.random.randn(N)
x_test = x_test.reshape(-1,1)'''
预测并生成图表
'''
y_rbf = svr_rbf.predict(x_test)
y_lin = svr_lin.predict(x_test)
y_poly = svr_poly.predict(x_test)
#绘制图像
plt.figure(figsize = (9,8),facecolor = 'w')#figsize指定画布大小
#plt.scatter(x_test, y_test, s = 6,label = 'test data')
plt.plot(x,y,'ks',markersize = 5, label = 'train data')
plt.plot(x_test, y_test,'mo', markersize = 6,label = 'test data')
plt.plot(x_test, y_rbf,'r-', lw=2, label='RBF')
plt.plot(x_test, y_lin,'g-', lw=2, label='Linear')
plt.plot(x_test, y_poly,'b-', lw=2, label='Polynomial')
#获取支持向量,zorder整数越大,显示时越靠上
plt.scatter(x[svr_rbf.support_], y[svr_rbf.support_], s = 200, c = 'r',marker = '*',label = 'RBF Support Vectors',zorder = 10) plt.xlabel('x')
plt.ylabel('y')
plt.title('SVR')
plt.legend()  
plt.show()'''
获取预测误差
'''
print("高斯核函数支持向量机的平均绝对误差为:",mean_absolute_error(y_test,y_rbf))
print("高斯核函数支持向量机的均方误差为:",mean_squared_error(y_test,y_rbf))print("线性核函数支持向量机的平均绝对误差为:",mean_absolute_error(y_test,y_lin))
print("线性核函数支持向量机的均方误差为:",mean_squared_error(y_test,y_lin))print("多项式核函数支持向量机的平均绝对误差为:",mean_absolute_error(y_test,y_poly))
print("多项式核函数支持向量机的均方误差为:",mean_squared_error(y_test,y_poly))'''
进一步测试SVR算法技能
选取最优参数使用GridSearchCV()函数,它存在的意义就是自动调参,
只要把参数输进去,就能给出最优化的结果和参数。GridSearchCV(estimator, param_grid, cv=None)
estimator :选择使用的分类器,并且传入除需要确定最佳的参数之外的其他参数。
param_grid :需要最优化的参数的取值,值为字典或者列表。
cv :交叉验证参数,默认None,使用三折交叉验证。
'''
model = SVR(kernel = 'rbf')
c_can = np.linspace(105,107,10) #等间距提取数值
gamma_can = np.linspace(0.4,0.5,10)
print('c_can :',c_can)
print('gamma_can :',gamma_can)
svr_rbf_G = GridSearchCV(model,param_grid={'C' : c_can, 'gamma' : gamma_can},cv = 5)
svr_rbf_G.fit(x,y)
print('选取的最佳组合参数为:',svr_rbf_G.best_params_)'''
预测并生成图表
'''
y_predict = svr_rbf_G.predict(x_test)  #获取新的预测
sp = svr_rbf_G.best_estimator_.support_ #获取支持向量坐标
print('sp:',sp)
plt.figure(figsize = (9,8),facecolor = 'w')#figsize指定画布大小
plt.scatter(x[sp], y[sp], s = 200, c = 'r',marker = '*',label = 'Support Vectors',zorder = 10) 
plt.plot(x_test, y_predict,'r-', lw=2, label='RBF Predict')
plt.plot(x,y,'ks',markersize = 5, label='train data')
plt.plot(x_test, y_test,'mo', markersize = 5, label='test data')
plt.legend(loc = 'lower left')
plt.title('SVR',fontsize = 16)
plt.xlabel('X')
plt.ylabel('Y')
plt.grid(True) #绘制网格背景板
plt.show()#获取预测误差
print("选取最优参数的高斯核函数支持向量机的平均绝对误差为:",mean_absolute_error(y_test,y_predict))
print("选取最优参数的高斯核函数支持向量机的均方误差为:",mean_squared_error(y_test,y_predict))

输出结果:
在这里插入图片描述

2.2 SVR模型

import numpy as np
from sklearn.svm import SVR
import matplotlib.pyplot as plt'''
生成样本数据,使用随机生成函数
'''
#np.random.rand(n,m)生成n行m列的服从“0~1”均匀分布的随机样本值
X = np.sort(5*np.random.rand(40,1),axis=0)  #axis=0按列排序
#获取X的sin值,ravel表示转换成行(无论多少行都变为一行)
y = np.sin(X).ravel()  # ravel()消除了组内的[]'''
使用SVR()函数拟合回归模型
sklearn.svm.SVR(kernel ='rbf',degree = 3,gamma ='auto_deprecated',coef0 = 0.0,tol = 0.001,C = 1.0)
kernel :指定要在算法中使用的内核类型
degree :多项式核函数的次数('poly')。被所有其他内核忽略
gamma :'rbf','poly'和'sigmoid'的核系数。隐含地决定了数据映射到新的特征空间后的分布,gamma越大,支持向量越少,gamma值越小,支持向量越多。支持向量的个数影响训练与预测的速度。
coef0 :核函数中的独立项。它只在'poly'和'sigmoid'中很重要。
tol : 容忍停止标准。
C :错误术语的惩罚参数C,默认1。 '''#选用高斯核函数
svr_rbf = SVR(kernel = 'rbf',C = 1e3,gamma=0.1) #这里使用的1e3 = 1000.0
svr_rbf2 = SVR(kernel = 'rbf',C = 1e3,gamma=1.0)
svr_rbf3 = SVR(kernel = 'rbf',C = 1e3,gamma=10)
#选用线性核函数
svr_lin = SVR(kernel = 'linear',C = 1e3)
#选用多项式核函数
svr_poly = SVR(kernel = 'poly',C = 1e3,degree = 2)
#拟合回归模型
y_rbf = svr_rbf.fit(X,y).predict(X)y_rbf2 = svr_rbf2.fit(X,y).predict(X)
y_rbf3 = svr_rbf3.fit(X,y).predict(X)y_lin = svr_lin.fit(X,y).predict(X)
y_poly = svr_poly.fit(X,y).predict(X)#绘制图像对比
plt.scatter(X, y, color='darkorange') plt.plot(X, y_rbf, color='navy', lw=2, label='rbf 0.1')
plt.plot(X, y_rbf2, color='fuchsia', lw=2, label='rbf 1.0')
plt.plot(X, y_rbf3, color='red', lw=2, label='rbf 10')plt.plot(X, y_lin, color='c', lw=2, label='linear')
plt.plot(X, y_poly, color='cornflowerblue', lw=2, label='poly') 
plt.legend()  
plt.show()

输出结果:
在这里插入图片描述

3. SVR跟SVC的区别

支持向量回归(Support Vector Regression, SVR)和支持向量分类(Support Vector Classification, SVC)都是基于支持向量机(Support Vector Machine, SVM)的学习方法,但它们在目标和应用上有所不同。以下是SVR和SVC之间的主要区别:

  1. 目标差异

    • SVC:用于分类问题,目的是找到一个超平面(在高维空间中),将不同类别的数据点分隔开,使得同一类别的数据点尽可能地靠近超平面,而不同类别的数据点尽可能地远离超平面。
    • SVR:用于回归问题,目的是找到一个超平面,使得数据点到这个超平面的距离(即误差)最小化,同时保持这个距离在一个可接受的范围内(由ε确定)。
  2. 损失函数

    • SVC:通常使用合页损失(hinge loss)作为损失函数,这种损失函数对分类错误有较大的惩罚。
    • SVR:使用ε-不敏感损失函数(ε-insensitive loss),这种损失函数允许数据点在超平面周围ε距离内的误差不被惩罚,有助于减少对异常值的敏感性。
  3. 输出结果

    • SVC:输出的是离散的类别标签,例如在二分类问题中,输出可能是0或1。
    • SVR:输出的是连续的数值,即预测的连续变量的值。
  4. 参数

    • SVC:主要参数包括正则化参数C、核函数参数(如gamma)、以及特定核函数的参数(如多项式核的度数)。
    • SVR:除了SVC中的参数外,还有ε(控制预测值与真实值之间的不敏感区间)和可能的其他参数,如用于控制模型复杂度的核函数参数。
  5. 应用场景

    • SVC:适用于分类任务,如图像识别、文本分类、生物信息学中的蛋白质分类等。
    • SVR:适用于回归任务,如股票价格预测、天气预测、房价预测等。
  6. 模型评估

    • SVC:通常使用准确率、精确率、召回率、F1分数等分类指标来评估模型性能。
    • SVR:通常使用均方误差(MSE)、平均绝对误差(MAE)、R²等回归指标来评估模型性能。

尽管SVR和SVC在目标和实现上有所不同,但它们都是基于相同的理论基础——最大化数据点之间的间隔,并且都可以使用相同的核函数来处理线性不可分的数据。在实际应用中,选择SVC还是SVR主要取决于问题的性质,即问题是分类问题还是回归问题。

4. SVR和SVC的核函数有哪些区别

在支持向量机(SVM)框架下,SVR(Support Vector Regression)和SVC(Support Vector Classification)都可以使用相同的核函数,这些核函数用于将输入数据映射到更高维的特征空间中,以便找到合适的决策边界或回归平面。核函数的选择对于SVM的性能至关重要,因为它决定了算法如何处理非线性关系。以下是SVR和SVC可以使用的一些常见核函数,以及它们在两种模型中的使用区别:

  1. 线性核(Linear Kernel)

    • 公式:K(x, y) = x^T * y
    • 用途:适用于线性可分的数据。在线性和非线性SVM中都适用,因为它直接计算向量的点积。
  2. 多项式核(Polynomial Kernel)

    • 公式:K(x, y) = (gamma * x^T * y + coef0)^degree
    • 用途:可以处理非线性数据,通过将数据映射到更高维的空间来寻找非线性关系。在SVC和SVR中都可以使用,参数degreecoef0gamma需要根据具体问题调整。
  3. 径向基函数核(Radial Basis Function, RBF Kernel)

    • 公式:K(x, y) = exp(-gamma * ||x - y||^2)
    • 用途:非常灵活,能够处理非常复杂的非线性关系。在SVC和SVR中都非常常用,gamma参数控制单个训练样本的影响范围。
  4. Sigmoid核

    • 公式:K(x, y) = tanh(gamma * x^T * y + coef0)
    • 用途:类似于神经网络中的激活函数,可以用于SVC和SVR,但不如RBF和多项式核常用。

SVR和SVC核函数的区别

  • 参数调整:虽然SVR和SVC可以使用相同的核函数,但针对回归问题和分类问题,核函数的参数(如gammaCepsilon)可能需要不同的调整。例如,epsilon参数是SVR特有的,用于定义不敏感损失函数的宽度。

  • 目标函数:SVC的目标是最大化类别间隔,而SVR的目标是最小化实际值和预测值之间的误差,同时保持模型的复杂度在一定范围内。这导致即使使用相同的核函数,SVR和SVC在优化过程中的目标函数也有所不同。

  • 损失函数:SVC通常使用合页损失(hinge loss),而SVR使用ε-不敏感损失(ε-insensitive loss),这影响了模型训练过程中的优化策略。

  • 模型评估:在SVC中,核函数的选择和参数调整通常基于分类准确率、召回率等指标;而在SVR中,评估指标可能是均方误差(MSE)、平均绝对误差(MAE)等回归评估指标。

总的来说,虽然SVR和SVC可以共享相同的核函数,但它们在目标、损失函数和模型评估方面有所不同,这影响了核函数参数的选择和调整。在实际应用中,需要根据具体问题的性质和数据的特点来选择合适的核函数和参数。

5. SVR和SVC在参数调整上有什么不同?

SVR(Support Vector Regression)和SVC(Support Vector Classification)在参数调整上有一些共同点,但也存在一些差异。以下是它们在参数调整上的一些区别:

  1. ε(Epsilon)参数

    • SVR特有:SVR有一个特有的参数ε(epsilon),它定义了一个不敏感区域,即预测值在这个区域内的变化不会对损失函数产生影响。这个参数对于控制模型的容忍度非常重要,而在SVC中没有对应的参数。
  2. 核函数参数

    • 共同参数:两者都可以使用线性(linear)、多项式(poly)、径向基函数(RBF)和Sigmoid核函数。它们共享核函数相关的参数,如gammacoef0,这些参数影响核函数的形状和行为。
  3. C(惩罚参数)

    • 共同参数:SVC和SVR都有C参数,它控制着模型对误分类(或误差)的惩罚程度。C值的选择对模型的性能有显著影响,需要仔细调整。
  4. tol(容忍度)

    • 共同参数:两者都有tol参数,它决定了优化算法的容忍度,即算法停止迭代的条件。
  5. max_iter(最大迭代次数)

    • 共同参数:SVC和SVR都有max_iter参数,它限制了优化算法的最大迭代次数。
  6. shrinking(启发式缩减策略)

    • 共同参数:两者都有shrinking参数,它决定了是否使用启发式缩减策略来训练SVM。
  7. class_weight(类别权重)

    • SVC特有:SVC有一个class_weight参数,用于处理不平衡数据集,通过给不同类别的样本赋予不同的权重来调整模型。
  8. decision_function_shape

    • SVC特有:SVC有一个decision_function_shape参数,它决定了决策函数的形状,可以是’ovr’(一对多)或’ovo’(一对一)。
  9. probability(概率估计)

    • SVC特有:SVC有一个probability参数,当设置为True时,可以输出预测的概率估计。

在实际应用中,参数调整通常需要根据具体问题和数据集的特点来进行。对于SVR,ε参数的调整尤为重要,因为它直接影响模型对预测误差的容忍度。而对于SVC,类别权重和概率估计等参数可能在处理不平衡数据集或需要概率输出时更为重要。总的来说,SVR和SVC在参数调整上既有共同点也有各自特有的参数,需要根据具体任务的需求来进行调整。

6. 参考:

1、支持向量机通俗导论(理解SVM的三层境界):http://blog.csdn.net/v_july_v/article/details/7624837

2、Support Vector Machine - Regression (SVR):

http://www.saedsayad.com/support_vector_machine_reg.htm

3、Support Vector Machine Regression:

http://kernelsvm.tripod.com/

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

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

相关文章

SpringMVC-08-json

8. Json 8.1. 什么是Json JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式,目前使用特别广泛。采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。易于人阅读和编写&#xf…

APM32使用I2C驱动OLED

实验效果 本次实验主要讲APM32的I2C外设的初始化和APM32作为主机如何发送数据,OLED的驱动写起来较难本次实验不涉及。由于条件有限本次只能讲主机发送,接收也没有涉及。 硬件原理图 源代码 I2C初始化部分 #ifndef __BSP__IIC_H__ #define __BSP__IIC_…

QT布局详解

ui设计器设计界面很方便&#xff0c;为什么还要手写代码? (1)更好的控制布局 (2)更好的设置qss (3)代码复用 创建水平布局 包含头文件 #include<QHBoxLayout> 创建水平布局QHBoxLayout *pHLay new QHBoxLayout(父窗口指针);//一般填this QPushButton *pBtn1 n…

宏集eXware物联网网关在水务管理系统上的应用

一、前言 水务管理系统涵盖了对城市水网、供水、排水、污水处理等多个环节的监控与管理。随着物联网&#xff08;IoT&#xff09;技术的快速发展&#xff0c;物联网网关逐渐成为水务管理系统中的关键组成部分。 宏集物联网网关以其高效的数据采集、传输和管理功能&#xff0c…

不修改内核镜像的情况下,使用内核模块实现高效监控调度时延

一、背景 在之前的博客 调度时延的观测_csdn 调度时延的观测 杰克崔-CSDN博客 里&#xff0c;我们讲了多种监控调度时延的方法&#xff0c;有依靠系统现有节点来监控&#xff0c;但是依赖系统现有节点做不到每个单词调度时延的监控&#xff0c;也讲了通过修改内核代码&#xf…

在 ASP.NET C# Web API 中实现 Serilog 以增强请求和响应的日志记录

介绍 日志记录是任何 Web 应用程序的关键方面。它有助于调试、性能监控和了解用户交互。在 ASP.NET C# 中&#xff0c;集成 Serilog 作为记录请求和响应&#xff08;包括传入和传出的数据&#xff09;的中间件可以显著提高 Web API 的可观察性和故障排除能力。 在过去的几周里&…

【开源免费】基于Vue和SpringBoot的技术交流分享平台(附论文)

博主说明&#xff1a;本文项目编号 T 053 &#xff0c;文末自助获取源码 \color{red}{T053&#xff0c;文末自助获取源码} T053&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

JVM指令集概览:基础与应用

写在文章开头 在现代软件开发中,Java 语言凭借其“一次编写,到处运行”的理念成为了企业级应用的首选之一。这一理念的背后支撑技术正是 Java 虚拟机(JVM)。JVM 是一个抽象的计算机,它实现了 Java 编程语言的各种特性,并且能够执行编译后的字节码文件。了解 JVM 的工作原…

电子应用设计方案-33:智能AI投影仪系统方案设计

智能 AI 投影仪系统方案设计 一、引言 随着科技的不断进步&#xff0c;投影仪在家庭娱乐、商务办公和教育培训等领域的应用越来越广泛。智能 AI 投影仪作为一种创新的投影设备&#xff0c;结合了人工智能技术&#xff0c;为用户带来更便捷、智能和个性化的使用体验。 二、系统…

基于springboot 的体质测试数据分析及可视化设计LWPPT

技术可行性&#xff1a;技术背景 本企业网站在Windows操作系统中进行开发&#xff0c;并且目前PC机的性能已经可以胜任普通网站的web服务器。系统开发所使用的技术也都是自身所具有的&#xff0c;也是当下广泛应用的技术之一。 系统的开发环境和配置都是可以自行安装的&#x…

SQL进阶——C++与SQL进阶实践

在C开发中&#xff0c;SQL数据库的操作是开发者常见的任务之一。虽然前面我们已经介绍了如何在C中通过数据库连接执行基本的SQL查询&#xff0c;但在实际项目中&#xff0c;我们通常需要更加复杂和高效的数据库操作。存储过程与函数的调用、复杂SQL查询的编写、以及动态构造SQL…

Spring Boot日志总结

文章目录 1.我们的日志2.日志的作用3.使用日志对象打印日志4.日志框架介绍5.深入理解门面模式(外观模式)6.日志格式的说明7.日志级别7.1日志级别分类7.2配置文件添加日志级别 8.日志持久化9.日志文件的拆分9.1官方文档9.2IDEA演示文件分割 10.日志格式的配置11.更简单的日志输入…

CSDN设置成黑色背景(谷歌 Edge)

一.谷歌浏览器 浏览器地址输入&#xff1a;Chrome://flags搜索框输入&#xff1a;enable-force-dark将default 改成 enabled&#xff0c;点击重启浏览器 二.Edge浏览器 浏览器地址输入&#xff1a;edge://flags搜索里面输入Auto Dark Mode for Web Contents将default 改成 e…

实现PDF文档加密,访问需要密码

01. 背景 今天下午老板神秘兮兮的来问我&#xff0c;能不能做个文档加密功能&#xff0c;就是那种用户下载打开需要密码才能打开的那种效果。boss都发话了&#xff0c;那必须可以。 需求&#xff1a;将pdf文档经过加密处理&#xff0c;客户下载pdf文档&#xff0c;打开文档需要…

Android内容提供者

一、ContentProvider 实现跨程序共享数据 创建内容提供者&#xff1a;extends ContentProvider类 访问数据 Uri uri Uri.parse("uri路径") 查询数据 ContentResolver resolver context.getContentResolver(); Cursor cur resolver.query(Uri,projection,sel…

基于JSP+MySQL的网上招聘系统的设计与实现

摘要 在这样一个经济飞速发展的时代&#xff0c;人们的生存与生活问题已成为当代社会需要关注的一个焦点。对于一个刚刚 踏入社会的年轻人来说&#xff0c;他对就业市场和形势了解的不够详细&#xff0c;同时对自己的职业规划也很模糊&#xff0c;这就导致大量的 时间被花费在…

如何全面备份你的Mac电脑:邮件、联系人、桌面文件和Safari书签

在卖掉或更换电脑之前&#xff0c;备份所有重要数据是非常关键的步骤。本文将指导你如何备份MacBook Pro上的邮件、联系人、桌面文件以及Safari的书签。 1. 备份Safari书签 如果你使用Safari浏览器&#xff0c;可以按照以下步骤导出书签&#xff1a; 打开Safari。点击顶部菜…

三维渲染中顺序无关的半透明混合(OIT)(一Depth Peeling)

>本文收集关于透明对象渲染技术中关于OIT技术的资料&#xff0c;尝试用简单的逻辑对这些内容进行整理。 1、透明对象的特殊对待 不要小瞧png图片和jpg图片的差异&#xff01;在一般的三维平台&#xff0c;png代表的是带透明通道的纹理&#xff0c;而jpg代表的是不带透明的…

行业分析---2024年蔚来汽车三季度财报及科技日

1 前言 在之前的博客中&#xff0c;笔者撰写了多篇行业类分析的文章&#xff08;科技新能源&#xff09;&#xff1a; 《行业分析---我眼中的Apple Inc.》 《行业分析---马斯克的Tesla》 《行业分析---造车新势力之蔚来汽车》 《行业分析---造车新势力之小鹏汽车》 《行业分析-…

mac上的建议xftp 工具

mac上的建议xftp 工具 最近使用mac比较频繁了&#xff0c;但是第一次重度使用mac里面有很多的工具都是新的&#xff0c;有的window版本的工具无法使用。 xftp 的平替 Cyberduck 从它的官网上下载是免费的&#xff0c;但是如果使用 Apple store 要花费198呢。这不就剩下一大笔…