【机器学习】支持向量机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, datasets


def make_meshgrid(x, y, h=.02):
#创建要在其中打印的点网格
    x_min, x_max = x.min() - 1, x.max() + 1
    y_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/

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大数据期末笔记

第一章、大数据概述 人类的行为及产生的事件的一种记录称之为数据。 1、大数据时代的特征,并结合生活实例谈谈带来的影响。 (一)特征 1、Volume 规模性:数据量大。 2、Velocity高速性:处理速度快。数据的生成和响…

贝锐自研智慧网关系统OrayOS升级,适配Banana PI开发板BPI-R3 Mini

为了满足多元化的应用场景,贝锐与Banana PI携手合作,贝锐自研新一代云智慧网关系统OrayOS不仅已成功适配BPI-R3,还进一步扩展至BPI-R3 Mini,提供了更丰富的选择。在全球工业物联网、视频监控管理以及企业级办公存储等领域&#xf…

Android Studio使用soundtouch实现变声,AudioRecord,AudioTrack录音和播放,转换pcm文件为wav文件

1.目标概要 分步骤实现为 1.0 集成使用soundtouch so文件 done 1.1 audiorecord和audiotrack 录音(pcm文件)并播放 done 1.2 把录音后文件转成wav文件 并播放 done 1.3 soundtouch变音后播放 done 2.实现 2.1 集成使用soundtouch so文件 编译和使用so…

SpringBoot 架构的新冠密接者跟踪系统:安全防护体系深度解读

第3章 系统分析 在进行系统分析之前,需要从网络上或者是图书馆的开发类书籍中收集大量的资料,因为这个环节也是帮助即将开发的程序软件制定一套最优的方案,一旦确定了程序软件需要具备的功能,就意味着接下来的工作和任务都是围绕着…

Opencv+ROS实现颜色识别应用

目录 一、工具 二、原理 概念 本质 三、实践 添加发布话题 主要代码 四、成果 五、总结 一、工具 opencvros ubuntu18.04 摄像头 二、原理 概念 彩色图像:RGB(红,绿,蓝) HSV图像:H&#xff0…

图解人工智能:从规则到深度学习的全景解析

🌟作者简介:热爱数据分析,学习Python、Stata、SPSS等统计语言的小高同学~🍊个人主页:小高要坚强的博客🍓当前专栏:Python之机器学习🍎本文内容:图解人工智能:…

【FPGA开发】Vivado自定义封装IP核,绑定总线

支持单个文件的封装、整个工程的封装,这里用单个文件举例。 在文件工程目录下,自建一个文件夹,里面放上需要封装的verilog文件。 选择第三个,指定路径封装,找到文件所在目录 取个名,选择封装IP的路径 会…

fiddler安卓雷电模拟器配置踩坑篇

一、fiddler端配置 和网页版fiddler一样,需要首先再本机安装证书,可以参考我之前的fiddler浏览器配置文章,前期操作一致: 此处需要注意的是connections里面需要勾选allow remote这个选项,这个主要是为了后来再安卓模拟…

六、文本搜索工具(grep)和正则表达式

一、grep工具的使用 1、概念 grep: 是 linux 系统中的一个强大的文本搜索工具,可以按照 正则表达式 搜索文本,并把匹配到的行打印出来(匹配到的内容标红)。 2、语法 grep [options]…… pattern [file]…… 工作方式…

时序论文28|CycleNet:通过对周期模式进行建模增强时间序列预测

论文标题:CycleNet: Enhancing Time Series Forecasting through Modeling Periodic Patterns 论文链接:https://arxiv.org/abs/2409.18479v1 代码链接:https://github.com/ACAT-SCUT/CycleNet 前言 这是今年NIPS的一篇时序论文&#xff…

LuaForWindows_v5.1.5-52.exe

Releases rjpcomputing/luaforwindows GitHub #lua C:\Users\Administrator\Desktop\test.lua print("Hello lua!") print("ZengWenFeng 13805029595")

Spring Boot教程之十一:获取Request 请求 和 Put请求

如何在 Spring Boot 中获取Request Body? Java 语言是所有编程语言中最流行的语言之一。使用 Java 编程语言有几个优点,无论是出于安全目的还是构建大型分发项目。使用 Java 的优点之一是 Java 试图借助类、继承、多态等概念将语言中的每个概念与现实世…

【力扣热题100】[Java版] 刷题笔记-3. 无重复字符的最长子串

题目:3. 无重复字符的最长子串 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 解题思路 根据题目,只需要返回无重复字符串的最长子串的长度,所以我们不需要知道知道字符串内容是什么,在整个字符串 s 中&…

如何监控Elasticsearch集群状态?

大家好,我是锋哥。今天分享关于【如何监控Elasticsearch集群状态?】面试题。希望对大家有帮助; 如何监控Elasticsearch集群状态? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 监控 Elasticsearch 集群的状态对于确保…

Y20030018基于Java+Springboot+mysql+jsp+layui的家政服务系统的设计与实现 源代码 文档

家政服务系统的设计与实现 1.摘要2.开发目的和意义3.系统功能设计4.系统界面截图5.源码获取 1.摘要 随着人们生活水平的提高,老龄化、少子化等多重因素影响,我国对家政服务人群的需求与日俱增。家政服务行业对我国的就业和社会效益贡献也与日俱增&#…

FreeRTOS——列表及列表项

目录 一、概念及其应用 1.1列表List_t 1.2列表项ListItem_t 1.3迷你列表项MiniListItem_t 二、相关API 三、实现原理 3.1列表初始化 3.2列表项初始化 3.3插入列表项 3.4尾插列表项 3.5列表项的删除 3.6列表的遍历 一、概念及其应用 作为多任务的核心,列…

搭建AD域服务器

搭建AD域服务器 使用深信服HCI搭建AD域服务器 1、新建虚拟机 2、填写参数 3、省略安装过程 4、进入服务器管理器 5、 6、 7、 8、 9、 10、 11、 12、 13、 14、 15、 16、 17、 18、 19、 20、 21、 22、 23、

【iOS】设计模式的六大原则

【iOS】设计模式的六大原则 文章目录 【iOS】设计模式的六大原则前言开闭原则——OCP单一职能原则——SRP里氏替换原则——LSP依赖倒置原则——DLP接口隔离原则——ISP迪米特法则——LoD小结 前言 笔者这段时间看了一下有关于设计模式的七大原则,下面代码示例均为OC…

一个实用的 Maven localRepository 工具

目录 1 现状2 当前解决3 更好的解决3.1 下载 Maven localRepository 工具包3.2 上传本地 localRepository 包3.3 清理 localRepository 中指定后缀的文件 1 现状 在使用 Maven 时,我们可能会经常与本地仓库和私服仓库打交道。 例如对于本地仓库,因为某…

【linux学习指南】详解Linux进程信号保存

文章目录 📝保存信号🌠 信号其他相关常⻅概念🌉在内核中的表⽰ 🌠 sigset_t🌠信号集操作函数🌉sigprocmask🌉sigpending 🚩总结 📝保存信号 🌠 信号其他相关常…