【机器学习】支持向量机SVR、SVC分析简明教程
关于使用SVM进行回归分析的介绍很少,在这里,我们讨论一下SVR的理论知识,并对该方法有一个简明的理解。
1. SVC简单介绍
SVR全称是support vector regression,是SVM(支持向量机support vector machine)对回归问题的一种运用。所以在介绍SVR之前,我们先简单的来了解一下什么是SVM。
SVM
SVM与logistic分类器类似,也是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。
对于下面一个数据集,有两类分别使用×和○来表示。那么我们想要找到一条曲线来区分这两类。可想而知,这样的曲线存在无数条,如何找到那一条最优的曲线呢?那就是要找到间隔(Gap)最大的那一条曲线,然后我们就可以根据这条曲线来分类了。而这条曲线,我们称为超平面。图中加粗的×与○,我们则称这些向量为支持向量。
而实际上,我们很少会遇到上面的情况,能直接使用一条直线将数据分类,更多的时候,数据无法通过直线来分类。比如下面这种情况:
当然了,这都不是事,既然在二维上该数据无法使用线性分类,那我们就将数据映射到更高维上,在高维上构造超平面,从而完成分类。
这就是为什么将上面的直线称为超平面。
所以对于非线性的模型,我们需要:
- 使用非线性映射将数据投影至特征空间;
- 在特征空间使用线性分类器;看似很简单,但是我们在映射时,就会发现当变量增多时,映射到高维空间的维度是呈指数增长的,计算起来十分困难,这时候就需要核函数(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的一些关键信息:
-
基本概念:
- SVR通过将输入空间映射到高维特征空间,并在高维空间中寻找最优超平面来进行回归。
- SVR的目标是找到一个超平面,使得训练样本在该超平面上的映射值与目标值的差异最小化,并且同时保持误差在一定范围内。
-
核函数:
- SVR可以使用不同的核函数来处理非线性数据,常用的核函数包括线性核函数、多项式核函数、径向基函数(RBF)和Sigmoid核函数。
- 核函数的选择使得SVR能够在高维空间中找到最优的回归平面,从而处理复杂的非线性关系。
-
适用数据集:
- SVR适用于对模型泛化性能要求较高的情况,能够处理高维数据,并且在样本数量较少的情况下表现良好。
- 它被广泛应用于金融市场预测、工业过程控制、生物信息学和经济学等领域。
-
参数:
C
:错误项的惩罚因子,必须为正数。epsilon
:控制边界的松弛变量。gamma
:核函数的系数,在核函数为‘rbf’,‘poly’,‘sigmoid’时使用。tol
:残差收敛条件,默认是0.0001。max_iter
:最大迭代次数,默认值为1000。
-
优点:
- 能够处理高维数据,并且在样本数量较少的情况下表现良好。
- 灵活的核函数使其能够处理非线性数据。
-
缺点:
- 对参数(如C和ε)的选择敏感,通常需要通过交叉验证来选择最佳参数。
- 训练时间较长,特别是对于大规模数据集。
-
实现:
- 在Python中,可以使用
scikit-learn
库中的SVR
类来实现SVR回归。
- 在Python中,可以使用
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之间的主要区别:
-
目标差异:
- SVC:用于分类问题,目的是找到一个超平面(在高维空间中),将不同类别的数据点分隔开,使得同一类别的数据点尽可能地靠近超平面,而不同类别的数据点尽可能地远离超平面。
- SVR:用于回归问题,目的是找到一个超平面,使得数据点到这个超平面的距离(即误差)最小化,同时保持这个距离在一个可接受的范围内(由ε确定)。
-
损失函数:
- SVC:通常使用合页损失(hinge loss)作为损失函数,这种损失函数对分类错误有较大的惩罚。
- SVR:使用ε-不敏感损失函数(ε-insensitive loss),这种损失函数允许数据点在超平面周围ε距离内的误差不被惩罚,有助于减少对异常值的敏感性。
-
输出结果:
- SVC:输出的是离散的类别标签,例如在二分类问题中,输出可能是0或1。
- SVR:输出的是连续的数值,即预测的连续变量的值。
-
参数:
- SVC:主要参数包括正则化参数C、核函数参数(如gamma)、以及特定核函数的参数(如多项式核的度数)。
- SVR:除了SVC中的参数外,还有ε(控制预测值与真实值之间的不敏感区间)和可能的其他参数,如用于控制模型复杂度的核函数参数。
-
应用场景:
- SVC:适用于分类任务,如图像识别、文本分类、生物信息学中的蛋白质分类等。
- SVR:适用于回归任务,如股票价格预测、天气预测、房价预测等。
-
模型评估:
- 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可以使用的一些常见核函数,以及它们在两种模型中的使用区别:
-
线性核(Linear Kernel):
- 公式:
K(x, y) = x^T * y
- 用途:适用于线性可分的数据。在线性和非线性SVM中都适用,因为它直接计算向量的点积。
- 公式:
-
多项式核(Polynomial Kernel):
- 公式:
K(x, y) = (gamma * x^T * y + coef0)^degree
- 用途:可以处理非线性数据,通过将数据映射到更高维的空间来寻找非线性关系。在SVC和SVR中都可以使用,参数
degree
、coef0
和gamma
需要根据具体问题调整。
- 公式:
-
径向基函数核(Radial Basis Function, RBF Kernel):
- 公式:
K(x, y) = exp(-gamma * ||x - y||^2)
- 用途:非常灵活,能够处理非常复杂的非线性关系。在SVC和SVR中都非常常用,
gamma
参数控制单个训练样本的影响范围。
- 公式:
-
Sigmoid核:
- 公式:
K(x, y) = tanh(gamma * x^T * y + coef0)
- 用途:类似于神经网络中的激活函数,可以用于SVC和SVR,但不如RBF和多项式核常用。
- 公式:
SVR和SVC核函数的区别:
-
参数调整:虽然SVR和SVC可以使用相同的核函数,但针对回归问题和分类问题,核函数的参数(如
gamma
、C
、epsilon
)可能需要不同的调整。例如,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)在参数调整上有一些共同点,但也存在一些差异。以下是它们在参数调整上的一些区别:
-
ε(Epsilon)参数:
- SVR特有:SVR有一个特有的参数ε(epsilon),它定义了一个不敏感区域,即预测值在这个区域内的变化不会对损失函数产生影响。这个参数对于控制模型的容忍度非常重要,而在SVC中没有对应的参数。
-
核函数参数:
- 共同参数:两者都可以使用线性(linear)、多项式(poly)、径向基函数(RBF)和Sigmoid核函数。它们共享核函数相关的参数,如
gamma
和coef0
,这些参数影响核函数的形状和行为。
- 共同参数:两者都可以使用线性(linear)、多项式(poly)、径向基函数(RBF)和Sigmoid核函数。它们共享核函数相关的参数,如
-
C(惩罚参数):
- 共同参数:SVC和SVR都有C参数,它控制着模型对误分类(或误差)的惩罚程度。C值的选择对模型的性能有显著影响,需要仔细调整。
-
tol(容忍度):
- 共同参数:两者都有tol参数,它决定了优化算法的容忍度,即算法停止迭代的条件。
-
max_iter(最大迭代次数):
- 共同参数:SVC和SVR都有max_iter参数,它限制了优化算法的最大迭代次数。
-
shrinking(启发式缩减策略):
- 共同参数:两者都有shrinking参数,它决定了是否使用启发式缩减策略来训练SVM。
-
class_weight(类别权重):
- SVC特有:SVC有一个class_weight参数,用于处理不平衡数据集,通过给不同类别的样本赋予不同的权重来调整模型。
-
decision_function_shape:
- SVC特有:SVC有一个decision_function_shape参数,它决定了决策函数的形状,可以是’ovr’(一对多)或’ovo’(一对一)。
-
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/
相关文章:
【机器学习】支持向量机SVR、SVC分析简明教程
关于使用SVM进行回归分析的介绍很少,在这里,我们讨论一下SVR的理论知识,并对该方法有一个简明的理解。 1. SVC简单介绍 SVR全称是support vector regression,是SVM(支持向量机support vector machine)对回…...
EasyDSS视频推拉流技术的应用与安防摄像机视频采集参数
安防摄像机的视频采集参数对于确保监控系统的有效性和图像质量至关重要。这些参数不仅影响视频的清晰度和流畅度,还直接影响存储和网络传输的需求。 安防摄像机图像效果的好坏,由DSP处理器和图像传感器sensor决定,如何利用好已有的硬件资源&…...
【详细介绍及演示】Flink之checkpoint检查点的使用
目录 一、介绍 二、 设置checkpoint检查点演示 1、 代码演示 2、测试代码效果 3、查看快照情况 编辑 三、在集群上运行 1、第一次运行 2、第二次运行 四、自定义检查点savePoint 1、提交一个flink job 打成jar包 2、输入一些数据,观察单词对应的数字的…...
使用uni-app进行开发前准备
使用uni-app进行开发,需要遵循一定的步骤和流程。以下是一个详细的指南,帮助你开始使用uni-app进行开发: 一、开发环境搭建 安装Node.js: 首先,从Node.js的官方网站(https://nodejs.org/)下载并…...
deepin 安装 chrome 浏览器
deepin 安装 chrome 浏览器 最近好多小伙伴儿和我说 deepin 无法安装最新的谷歌浏览器 其实是因为最新的 谷歌浏览器 其中的一个依赖需要提前安装 提前安装依赖然后再安装谷歌浏览器就可以了 安装 fonts-liberationsudo apt -y install fonts-liberation安装 chrome 浏览器sudo…...
Vue-01
Vue框架 Vue官网: Vue.js 框架 数据模型和view的通信就是依靠viewmodel的关键。 目前主流版本仍然是vue2版本。 Vue快速入门 1.新建一个HTML文件,引入Vue.js文件。Vue.js文件是官方引入的一个文件,我们如果要使用Vue就必须引入这个文件。…...
【Oracle】个人收集整理的Oracle常用SQL及命令
【建表】 create table emp( id number(12), name nvarchar2(20), primary key(id) ); 【充值一】 insert into emp select rownum,dbms_random.string(*,dbms_random.value(6,20)) from dual connect by level<101; 【充值二】 begin for i in 1..100 loop inser…...
11.28.2024刷华为OD
文章目录 C-100-5键键盘(extend来加入list后尾)题目2语法知识记录 C-100-5键键盘(extend来加入list后尾) 考虑所有情况extend来加入clip数组内容到screen 【】 题目2 链接 代码 语法知识记录...
【S500无人机】--地面端下载
之前国庆的时候导师批了无人机,我们几个也一起研究了几次,基本把无人机组装方面弄的差不多了,还差个相机搭载,今天我们讲无人机的调试 硬件配置如下 首先是地面端下载,大家可以选择下载: Mission Planne地…...
Redis2——协议与异步方式
文章目录 Redis2——协议与异步方式1. Redis Pipeline2. Redis事务2.1 无锁事务控制(乐观事务控制)2.2 事务语句与lua脚本2.3 事务特性ACID 3. 通信方式3.1 hiredis库3.2 同步连接3.3 异步连接3.3.1 hiredis管理监听事件接口3.3.2 hiredis libevent3.3.…...
面向下一代技术,遨游通讯如何助力北斗规模化应用提速?
近日,纪念北斗卫星导航系统工程建设三十周年座谈会在北京隆重召开,据悉,我国计划在2035年完成下一代北斗系统的建设。“北斗牵手,守护永久”北斗三号短报文公众应用商用试验启动仪式也于本月在雄安新区举行,会上透露&a…...
vue实现echarts饼图自动轮播
echarts官网:Examples - Apache ECharts echartsFn.ts 把echarts函数封装成一个文件 import * as echarts from "echarts";const seriesData [{"value": 12,"name": "过流报警"},{"value": 102,"name&qu…...
数据分析的尽头是web APP?
数据分析的尽头是web APP? 在做了一些数据分析的项目,也制作了一些数据分析相关的web APP之后,总结自己的一些想法和大家分享。 1.web APP是呈现数据分析结果的另外一种形式。 数据分析常见的结果是数据分析报告,可以是PPT或者…...
windows电脑上安装树莓派操作系统
在Windows电脑上安装树莓派通常涉及以下几个步骤:准备安装工具、下载树莓派系统镜像、烧录系统到SD卡、配置树莓派以及远程连接(如果需要无显示器操作)。以下是详细的步骤说明: 一、准备安装工具 安装树莓派官方烧录工具: 下载并安装Raspberry Pi Imager。这是一个官方的…...
openssl编译安装升级为新版本
文章目录 1、下载版本2、上传并解压3、编译安装4、验证 1、下载版本 https://www.openssl.org/source/old/1.1.1/ 2、上传并解压 tar zxvf openssl-1.1.1s.tar.gz 3、编译安装 注意:要提前安装好 gcc perl cd openssl-1.1.1s ./config --prefix/usr/local/open…...
监控视频汇聚平台:Liveweb视频监控管理平台方案详细介绍
Liveweb国标视频综合管理平台是一款以视频为核心的智慧物联应用平台。它基于分布式、负载均衡等流媒体技术进行开发,提供广泛兼容、安全可靠、开放共享的视频综合服务。该平台具备多种功能,包括视频直播、录像、回放、检索、云存储、告警上报、语音对讲、…...
【论文复现】基于BERT的语义分析实现
📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ WRN: 宽度残差网络 概述语义分类文本分类情感分类 实现原理 核心逻辑pre_deal.pytrain.pytest_demo.py 实现方式&演示效果训练阶段测试阶…...
SMOTE | 使用SMOTE算法来处理不平衡数据的问题
需求 在学习机器学习识别信用卡欺诈交易这个项目的时候,样本数据集非常不平衡: data_df_new[Class].value_counts()0: 正常 1:欺诈 在这里了解到了SMOTE算法: 过采样(Oversampling) 过采样是…...
week 9 - Entity-Relationship Modelling
一、数据库设计的重要性 • 设计数据库可使查询更高效、简洁。 • 减少数据冗余(data redundancy),提升表的整洁性。 二、Key Components of ER Modelling 实体-关系建模的基本构成 1. 实体(Entity):表…...
彻底理解如何保证ElasticSearch和数据库数据一致性问题
一.业务场景举例 需求: 一个卖房业务,双十一前一天,维护楼盘的运营人员突然接到合作开发商的通知,需要上线一批热门的楼盘列表,上传完成后,C端小程序支持按楼盘的名称、户型、面积等产品属性全模糊搜索热门…...
JS基础知识05-对象、Ajax、JSON
目录 一、对象 1.1.对象(Object) 1.创建对象 对象的常用方法 1.2.Math对象 1.数学常数 2.数学函数 3.随机数生成 4.对数方法 1.3.Date对象 创建Date对象 获取日期和时间的方法 设置日期和时间的方法 日期的格式化方法 二、Ajax 1.创建XM…...
pandas 读写excel
在Python中,使用Pandas库读写Excel文件是一个常见的操作。Pandas提供了read_excel和to_excel方法来分别实现读取和写入Excel文件的功能。以下是一些基本的示例: ### 读取Excel文件 python import pandas as pd # 读取Excel文件 df pd.read_excel(pat…...
Windows加固脚本
echo off REM 清屏 cls title 安全策略设置批处理 color f0 echo **************************************** echo write by afei echo https://www.jianshu.com/u/ea4c85fbe8c7 echo **************************************** pause cls color 3f echo ********************…...
28.100ASK_T113-PRO Linux+QT 显示一张照片
1.添加资源文件 2. 主要代码 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QImage> #include <QPixmap>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow) {ui->setupUi(this);QIm…...
Vue中的计算属性和监听属性
在Vue中,计算属性和监听属性是两种非常有用的功能,它们可以帮助我们更好地管理数据和响应数据的变化。 计算属性 计算属性是基于它们的依赖进行缓存的。只有当依赖发生变化时,计算属性才会重新计算。这使得计算属性非常适合用于执行昂贵的计…...
基于vite创建的react18项目的单元测试
题外话 最近一个小伙伴进了字节外包,第一个活就是让他写一个单元测试。 嗯,说实话,在今天之前我只知道一些理论,但是并没有实操过,于是我就试验了一下。 通过查询资料,大拿们基本都说基于vite的项目&…...
网络——HTTP与HTTPS三次握手和四次挥手
HTTP协议本身并不直接处理TCP连接的建立和关闭,这些是由底层的TCP协议来完成的。但是,由于HTTP通常运行在TCP之上,因此理解TCP的三次握手(用于建立连接)和四次挥手(用于关闭连接)对于理解HTTP通…...
自然语言处理:第六十六章 17 种 prompt engineering 方法大集合
本人项目地址大全:Victor94-king/NLP__ManVictor: CSDN of ManVictor 原文地址:17 种 prompt engineering 方法大集合 写在前面: 笔者更新不易,希望走过路过点个关注和赞,笔芯!!! 写在前面: 笔者更新不易,希望走过路…...
MySQL —— MySQL 程序
目录 前言 一、MySQL 程序简介 二、mysqld -- MySQL 服务器 三、mysql -- MySQL 客户端 1. mysql 客户端简介 2. mysql 客户端选项 (1)指定选项的方式 (2)mysql 客户端命令常用选项 (3)在命令行中使…...
AI蛋白质设计与人工智能药物设计
AI蛋白质设计与人工智能药物设计 AI蛋白质设计 一、蛋白质相关的深度学习简介 1.基础概念 1.1.机器学习简介:从手写数字识别到大语言模型 1.2.蛋白质结构预测与设计回顾 1.3.Linux简介 1.4.代码环境:VS code和Jupyter notebook* 1.5.Python关键概…...
Java基础之控制语句:开启编程逻辑之门
一、Java控制语句概述 Java 中的控制语句主要分为选择结构、循环结构和跳转语句三大类,它们在程序中起着至关重要的作用,能够决定程序的执行流程。 选择结构用于根据不同的条件执行不同的代码路径,主要包括 if 语句和 switch 语句。if 语句有…...
安装Fcitx5输入框架和输入法自动部署脚本(来自Mark24)-Ubuntu通用
在Ubuntu22.04上安装rime中文输入法的基本教程 上述文章接近废弃。 使用新逻辑配置基本的Fcitx5的输入法。 安装 第一步,下载相关组件 sudo nala install vim sudo nala install ruby sudo nala install fcitx5-rime第二步,设置语言为Fcitx5 而非 默认…...
软件无线电(SDR)的架构及相关术语
今天简要介绍实现无线电系统调制和解调的主要方法,这在软件定义无线电(SDR)的背景下很重要。 外差和超外差 无线电发射机有两种主要架构——一种是从基带频率直接调制到射频频率(称为外差),而第二种超外差是通过两个调制阶段来实…...
刷题分享11_30
刷题分享 1.(力扣216)这是一道回溯算法的经典题目。对于回溯算法,一般backtracking是没有返回值的,参数也比较不固定,需要根据每个题的特点来具体分析。这道题因为不能取到重复元素,所以需要额外加一个参数startindex,…...
Java技术复习提升 17反射
本章涉及到框架开发中必用的反射以及常用方法 很重要 注重理解并实践 第17章 反射 17.1 一个需求引出反射 package com.fsl; public class Cat {private String name "招财猫";public int age 10; //public的public Cat() {} //无参构造器public Cat(String name)…...
Python中的字符串
Python中的字符串 在Python中,字符串是用于表示文本数据的基本数据类型。字符串可以包含字母、数字、符号和空格等字符。Python提供了多种方式来定义和操作字符串。 字符串的定义 在Python中,字符串可以用单引号 或双引号 "" 括起来。例如…...
B站狂神说Mybatis+Spring+SpringMVC整合理解(ssm框架整合)
文章目录 0.写在前面(对mybatis,spring的理解)(不看可跳过)0.1 为什么需要mybatis0.2 为什么需要spring0.3为什么需要springmvc 1.新建ssmbuild数据库2.新建Maven项目3.初始化步骤3.1 配置下载maven依赖,构建资源导出3.2 连接数据库3.3建包&a…...
python:文件操作
一、文件路径 在Windows系统中,每个磁盘都有自己的根目录,用分区名加反斜杠来表示。我们定位文件的位置有两种方法,一种是绝对路径,另一种是相对路径。绝对路径是从根目录出发的路径,路径中的每个路径之间用反斜杠来分…...
ECharts柱状图-极坐标系下的堆叠柱状图,附视频讲解与代码下载
引言: 在数据可视化的世界里,ECharts凭借其丰富的图表类型和强大的配置能力,成为了众多开发者的首选。今天,我将带大家一起实现一个柱状图图表,通过该图表我们可以直观地展示和分析数据。此外,我还将提供…...
HDMI协议
HDMI设计3--HDMI 1.4/2.0 Transmitter Subsystem IP - 皮皮祥 - 博客园 HDMI设计4--HDMI 1.4/2.0 Receiver Subsystem IP - 皮皮祥 - 博客园 HDMI协议 - 标签 - 皮皮祥 - 博客园...
SpringBoot集成Flowable
一、工作流介绍 1、概念 通过计算机对业务流程的自动化管理。工作流是建立在业务流程的基础上,一个软件的系统核心根本上还是系统的业务流程,工作流只是协助进行业务流程管理。 解决的是:在多个参与者之间按照某种预定义的规则自动进行传递文…...
五,[GXYCTF2019]Ping Ping Ping1
进入靶场,有提示 我们在url试着输入本地IP,返回了ping命令 既然要在url处传参,那就用postman,再输入ip127.0.0.1 & ls,试着列出目录内容 ok,好像是个脏话,它过滤了空格 试着穿越又看到了脏话࿰…...
Linux -初识 与基础指令1
博客主页:【夜泉_ly】 本文专栏:【Linux】 欢迎点赞👍收藏⭐关注❤️ 文章目录 📚 前言🖥️ 初识🔐 登录 root用户👥 两种用户➕ 添加用户🧑💻 登录 普通用户⚙️ 常见…...
单片机学习笔记 12. 定时/计数器_定时
更多单片机学习笔记:单片机学习笔记 1. 点亮一个LED灯单片机学习笔记 2. LED灯闪烁单片机学习笔记 3. LED灯流水灯单片机学习笔记 4. 蜂鸣器滴~滴~滴~单片机学习笔记 5. 数码管静态显示单片机学习笔记 6. 数码管动态显示单片机学习笔记 7. 独立键盘单片机学习笔记 8…...
采用片上光学相控阵的激光雷达
激光雷达基础知识 LIDAR 基于众所周知的 RADAR 原理雷达是20世纪初就存在的著名技术激光雷达使用光频率而不是无线电波 激光雷达和雷达 使用相控阵的激光雷达通过干涉来提高方向性 激光雷达的输出剖面是阵列因子和单天线远场的乘积。 N :天线数量 k :…...
LeetCode Hot100 11~20
目录 子串11. 滑动窗口最大值12. 最小覆盖子串 数组13. 最大子数组和14. 合并区间15. 翻转数组16. 除数字自身以外的乘积17. 缺失的第一个正数 矩阵18. 矩阵置零19. 螺旋矩阵20 旋转图像90度 子串 11. 滑动窗口最大值 本题使用deque来维护一个单调队列 注意删除元素和添加元素…...
泰州榉之乡全托机构探讨:自闭症孩子精细动作训练之法
当发现自闭症孩子精细动作落后时,家长们往往会感到担忧和困惑。那么,自闭症孩子精细动作落后该如何训练呢?今天,泰州榉之乡全托机构就来为大家详细解答。 榉之乡大龄自闭症托养机构在江苏、广东、江西等地都有分校,一直…...
Mybatis:CRUD数据操作之修改数据update
Mybatis基础环境准备请看:Mybatis基础环境准备 本篇讲解Mybati数据CRUD数据操作之修改数据 用户在该页面书写需要修改的数据,点击 提交 按钮,就会将数据库中对应的数据进行修改。注意一点,如果哪儿个输入框没有输入内容ÿ…...
模拟器快速上手,助力HarmonyOS应用/服务高效开发
文章目录 1 创建模拟器1)打开设备管理界面2)设置本地模拟器实例存储路径3)创建一个模拟器(1)选择模拟器设备(2)创建模拟器(3)启动模拟器(4)关闭模…...
ERROR in [eslint] Invalid Options ‘extensions‘ has been removed.
看着这个报错 感觉是版本不对引起的 ERROR in [eslint] Invalid Options: - Unknown options: extensions - extensions has been removed. ERROR in Error: Child compilation failed: [eslint] Invalid Options: - Unknown options: extensions - extensions has b…...