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

第80步 时间序列建模实战:GRNN回归建模

基于WIN10的64位系统演示

一、写在前面

这一期,我们使用Matlab进行GRNN模型的构建。

使用的数据如下:

采用《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrome in Jiangsu Province, China》文章的公开数据做演示。数据为江苏省2004年1月至2012年12月肾综合症出血热月发病率。运用2004年1月至2011年12月的数据预测2012年12个月的发病率数据。

由于Matlab语言用的不多了。所以,直接上我封装好的Matlab小程序即可。

二、GRNN模型简单介绍

GRNN(广义回归神经网络,Generalized Regression Neural Network)是一种基于径向基函数(Radial Basis Function, RBF)的神经网络。GRNN 可以用于回归分析,它提供了一种简单但强大的方法来估计给定输入的连续输出。

1GRNN 的基本结构和工作流程如下:

输入层:与输入数据的特征数相同的神经元数量。

模式层:与训练数据的样本数相同的神经元数量。每个神经元与一个训练样本相关联。

径向基函数:在模式层中,每个神经元都使用一个RBF。RBF度量输入样本与相应的训练样本之间的距离,并根据这个距离生成一个激活值。常用的RBF包括高斯函数。

输出层:基于模式层神经元的激活值和相关权重计算的预测输出。在GRNN中,输出是所有模式层神经元输出的加权平均。

GRNN的一个关键参数是平滑因子(spread), 它决定了径向基函数的宽度。平滑因子对模型的性能有很大影响,需要通过交叉验证等技术来确定。

2GRNN的优势:

非参数性:GRNN不假定数据的分布,使其对各种数据分布都很鲁棒。

实时学习:由于GRNN的直观结构,新的样本可以在不重新训练整个模型的情况下轻松地加入。

只有一个主要超参数:与其他神经网络相比,GRNN仅有平滑因子作为主要超参数,使其调优相对简单。

三、GRNN模型简单介绍

1.模型方法

运用时间序列的前N个数值来预测第N+1个数值。首先将原始数据分为训练集和测试集,通过逐步测试N值和spread值的方法来获取最优模型,即模型的测试误差最小。然后用最优模型来预测所需要预测的数值。

2.界面介绍

如图一所示,界面分为寻找最优模型参数界面和最优模型预测界面。

2.1寻找最优模型参数

2.1.1输入窗口

训练集 输入训练集数据。

测试集 输入测试集数据。

N取值范围 输入N值的最大值以及最小值,步长默认为1。其中最小值大于等于1,最大值小于等于训练集数据个数。

光滑因子取值范围 输入光滑因子的最大最小值以及步长。该参数的取值范围越宽,步长越小,则程序运行的时间越长。为提升工作效率,应合理取值。

测试集数据个数 输入测试数据的数目。

2.2.2输出窗口

最优N值 输出最优模型的N值。

最优光滑因子 输出最优模型的spread值。

以上两组输出窗口由 寻找 按钮实现。

拟合误差 MAE 输入模型拟合的平均绝对误差;

         MAPE 输出模型拟合的平均相对误差;

         MSE 输出模型拟合的均方误差;

         RMSE 输出模型拟合的均方根误差。

拟合效果图(一)显示拟合值以及真实值曲线。

以上两组输出窗口由 拟合 按钮实现。

预测误差 MAE 输出模型预测的平均绝对误差;

         MAPE 输出模型预测的平均相对误差;

         MSE 输出模型预测的均方误差;

         RMSE 输出模型预测的均方根误差。

预测效果图(右一)显示预测值以及真实值曲线。

以上两组输出窗口由 预测 按钮实现。

2.2最优模型预测

2.2.1输入窗口

输入值 输入所有原始数据,包括上一个界面的训练集和测试集。

最优N值 输入最优模型的N值。

最优光滑因子 输入最优模型的spread值。

预测个数 输入需要预测的数据的数目。

2.2.2输出窗口

预测值 输出预测值。点击 预测 按钮实现。

2.3重置 清空所有窗口,进行下一组数据操作。

图一 单因素GRNN模型图形用户界面(GUI)

3.实例演示

这里我们采用《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrome in Jiangsu Province, China》文章的公开数据做演示。数据为江苏省2004年1月至2012年12月肾综合症出血热月发病率。运用2004年1月至2011年12月的数据预测2012年12个月的发病率数据。

3.1构建最优模型

将数据拆分为训练集和测试集。其中将2004年1月至2011年10月的数据纳入训练集,2011年11月和12月的数据纳入测试集。测试数据个数为2。N值取值范围选取1到94。光滑因子取值范围选取0.1到3,步长为0.1。如图二所示,点击 寻找

弹出读条窗口说明程序开始运行,运行时间取决于需要测试的N值和光滑因子的数目。

如图四所示,程序运行完毕。显示最优N值和最优光滑因子,分别为60和0.1。如果需要进一步精确光滑因子,可以进行第二次程序寻优。例如将光滑因子范围选取0.01到0.2,步长选择0.01,N值范围选取60到60。进一步寻找更精确的最优光滑因子。这里不进行演示。

如图五所示,点击 拟合 和 预测 按钮,分别显示拟合效果以及测试效果的四种误差值和曲线图。

3.2最优模型预测

如图六所示,输入全部原始数据,即2004年1月至2011年12月的月发病率数据。最优N值输入60,最优spread值输入0.1,预测个数输入12。点击 预测,如图七所示,得出最终预测值。预测值以列的形式显示,方便复制到Excel进行一步操作。

3.3预测效果

如表1所示,模型预测效果精度较高。平均绝对误差为0.00767,稍优于文章中ARIMA-GRNN模型的0.0078,稍劣于文章中的ARIMA-NARNN模型的0.0074。

1 单因素GRNN模型预测数值

时间

实际值

预测值

绝对误差

2012年1月

0.02659

0.03447

0.00788

2012年2月

0.01519

0.01710

0.00191

2012年3月

0.01519

0.01344

0.00176

2012年4月

0.03038

0.01731

0.01307

2012年5月

0.01772

0.02476

0.00703

2012年6月

0.02659

0.02647

0.00011

2012年7月

0.01013

0.01681

0.00668

2012年8月

0.00253

0.01132

0.00879

2012年9月

0.00760

0.01476

0.00717

2012年10月

0.02912

0.04103

0.01191

2012年11月

0.06457

0.07078

0.00621

2012年12月

0.07469

0.05523

0.01947

图二 寻找最优模型参数

图三 程序正在寻找最优模型参数

图四 显示最优N值以及最优spread值

图五 显示拟合效果以及预测效果误差值和曲线图

图六 输入原始数据模型参数进行预测

 显示最终预测值(以列显示)

四、小软件安装在此处

1. 双击MCRInstaller.exe安装

2. 自动解压:

3. 无脑点击下一步

4.安装完成。

四、底层代码

可能有需要,我就贴上吧:

function varargout = GRNN3(varargin)
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @GRNN3_OpeningFcn, ...'gui_OutputFcn',  @GRNN3_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
end
if nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
function GRNN3_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
function varargout = GRNN3_OutputFcn(hObject, eventdata, handles) 
varargout{1} = handles.output;
function xunlianji_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
guidata(hObject,handles);
function xunlianji_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function ceshiji_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
if (isempty(input))set(hObject,'String','0')
end
guidata(hObject,handles);
function ceshiji_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function nmin_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
if (isempty(input))set(hObject,'String','0')
end
guidata(hObject,handles);
function nmin_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function nmax_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
if (isempty(input))set(hObject,'String','0')
end
guidata(hObject,handles);
function nmax_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function spreadmin_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
if (isempty(input))set(hObject,'String','0')
end
guidata(hObject,handles);
function spreadmin_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function spreadmax_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
if (isempty(input))set(hObject,'String','0')
end
guidata(hObject,handles);
function spreadmax_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
endfunction buchang_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
if (isempty(input))set(hObject,'String','0')
end
guidata(hObject,handles);
function buchang_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function zuiyounzhi_Callback(hObject, eventdata, handles)
function zuiyounzhi_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function ss_Callback(hObject, eventdata, handles)
function ss_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function edit10_Callback(hObject, eventdata, handles)
function edit10_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function xunzhao_Callback(hObject, eventdata, handles)
global A B C D E F G spread L n U 
A = str2num(get(handles.xunlianji,'String'));
B = str2num(get(handles.ceshiji,'String'));
C = str2num(get(handles.nmin,'String'));
D = str2num(get(handles.nmax,'String'));
E = str2num(get(handles.spreadmin,'String'));
F = str2num(get(handles.spreadmax,'String'));
G = str2num(get(handles.buchang,'String'));
U = str2num(get(handles.ceshixulie,'String'));
n=length(A);
A=A(:);
U=U(:);
test=[];
v = waitbar(0,'ÇëÉԵȡ¤¡¤¡¤')
for L= C:DA_n=zeros(L+1,n-L);for i=1:n-LA_n(:,i)=A(i:i+L);endtrainx=A_n(1:L,:);trainy=A_n(L+1,:);for spread= E:G:Fnet=newgrnn(trainx,trainy,spread);aa=A(end-L+1:end);yes=U;pre=sim(net,aa);while length(pre)<Baa=[aa(2:end);pre(end)];yy=sim(net,aa);pre=[pre;yy];          waitbar(spread/F)            endmse2 = mse(yes - pre);test=[test;L spread mse2];end
end
for k = 1:size(test,1)if test (k,3) == min (test(:,3))L = test(k,1);spread = test(k,2);end
end
set(handles.zuiyou,'String',num2str(spread));
set(handles.zuiyounzhi,'String',num2str(L));
guidata(hObject,handles);function mae_Callback(hObject, eventdata, handles)
function mae_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function mape_Callback(hObject, eventdata, handles)
function mape_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function rmse_Callback(hObject, eventdata, handles)
function rmse_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function mse_Callback(hObject, eventdata, handles)
function mse_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function mae2_Callback(hObject, eventdata, handles)
function mae2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function mape2_Callback(hObject, eventdata, handles)
function mape2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function rmse2_Callback(hObject, eventdata, handles)
function rmse2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function mse2_Callback(hObject, eventdata, handles)
function mse2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function shuruzhi_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
guidata(hObject,handles);
function shuruzhi_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function zuiyounzhi2_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
guidata(hObject,handles);
function zuiyounzhi2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function zuiyouguanghuayinzi2_Callback(hObject, eventdata, handles)
input = str2num(get(hObject,'String'));
guidata(hObject,handles);
function zuiyouguanghuayinzi2_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function yucezhi_Callback(hObject, eventdata, handles)
function yucezhi_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function yuce_Callback(hObject, eventdata, handles)
global A H I B L
A = str2num(get(handles.shuruzhi,'String'));
H = str2num(get(handles.zuiyounzhi2,'String'));
I = str2num(get(handles.zuiyouguanghuayinzi2,'String'));
B = str2num(get(handles.number,'String'));
n=length(A);
A=A(:);
L = H;A_n=zeros(L+1,n-L);for i=1:n-LA_n(:,i)=A(i:i+L);endtrainx=A_n(1:L,:);trainy=A_n(L+1,:);spread = I;net=newgrnn(trainx,trainy,spread);aa=A(end-L+1:end);pre=sim(net,aa);while length(pre)<Baa=[aa(2:end);pre(end)];yy=sim(net,aa);pre=[pre;yy];end
set (handles.yucezhi,'String',num2str(pre),'Max',2);
guidata(hObject,handles);
function edit23_Callback(hObject, eventdata, handles)
function edit23_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function zuiyou_Callback(hObject, eventdata, handles)
function zuiyou_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function ceshi_Callback(hObject, eventdata, handles)
global A H I U B L
A = str2num(get(handles.xunlianji,'String'));
H = str2num(get(handles.zuiyounzhi,'String'));
I = str2num(get(handles.zuiyou,'String'));
U = str2num(get(handles.ceshixulie,'String'));
B = str2num(get(handles.ceshiji,'String'));
n=length(A);
A=A(:);
U=U(:);
L = H;A_n=zeros(L+1,n-L);for i=1:n-LA_n(:,i)=A(i:i+L);endtrainx=A_n(1:L,:);trainy=A_n(L+1,:);spread = I;net=newgrnn(trainx,trainy,spread);aa=A(end-L+1:end);yes=U;pre=sim(net,aa);while length(pre)<Baa=[aa(2:end);pre(end)];yy=sim(net,aa);pre=[pre;yy];end
MAE = mean(abs(yes - pre));
MAPE = mean(abs(yes - pre)./yes);
MSE = mse(yes - pre);
RMSE = sqrt(MSE);
set (handles.mae2,'String',num2str(round(MAE*1e4)/1e4));
set (handles.mape2,'String',num2str(round(MAPE*1e4)/1e4));
set (handles.mse2,'String',num2str(round(MSE*1e4)/1e4));
set (handles.rmse2,'String',num2str(round(RMSE*1e4)/1e4));
axes(handles.axes2)
plot(yes,'r','LineWidth',2);
hold on
plot(pre,'k--','LineWidth',1.5);
xlim([1,B])
title('Ô¤²âЧ¹ûÄâºÏÇúÏß')
legend('ʵ¼ÊÖµ','Ô¤²âÖµ','Location','NorthWest')
hold off
guidata(hObject,handles);
function ceshixulie_Callback(hObject, eventdata, handles)
function ceshixulie_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function number_Callback(hObject, eventdata, handles)
function number_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))set(hObject,'BackgroundColor','white');
end
function pushbutton4_Callback(hObject, eventdata, handles)
global A H I U B L
A = str2num(get(handles.xunlianji,'String'));
H = str2num(get(handles.zuiyounzhi,'String'));
I = str2num(get(handles.zuiyou,'String'));
U = str2num(get(handles.ceshixulie,'String'));
B = str2num(get(handles.ceshiji,'String'));
n=length(A);
A=A(:);
L = H;A_n=zeros(L+1,n-L);for i=1:n-LA_n(:,i)=A(i:i+L);endtrainx=A_n(1:L,:);trainy=A_n(L+1,:);spread = I;net=newgrnn(trainx,trainy,spread);yy=sim(net,trainx);            mse3 = yy - trainy;
MAE = mean(abs(mse3));
MAPE = mean(abs(yy - trainy)./trainy);
MSE = mse (mse3);
RMSE = sqrt(mse(mse3));
set (handles.mae,'String',num2str(round(MAE*1e4)/1e4));
set (handles.mape,'String',num2str(round(MAPE*1e4)/1e4));
set (handles.mse,'String',num2str(round(MSE*1e4)/1e4));
set (handles.rmse,'String',num2str(round(RMSE*1e4)/1e4));
axes(handles.axes1)
plot(trainy,'r','LineWidth',2);
hold on
plot(yy,'k--','LineWidth',1.5);
xlim([1,n-L])
title('ÄâºÏЧ¹ûÄâºÏÇúÏß')
legend('ʵ¼ÊÖµ','Ô¤²âÖµ','Location','NorthWest')
hold off
guidata(hObject,handles);
function pushbutton5_Callback(hObject, eventdata, handles)
set(handles.zuiyou,'String',[]);
set(handles.zuiyounzhi,'String',[]);
set(handles.xunlianji,'String',[]);
set(handles.ceshiji,'String',[]);
set(handles.nmin,'String',[]);
set(handles.nmax,'String',[]);
set(handles.spreadmin,'String',[]);
set(handles.spreadmax,'String',[]);
set(handles.buchang,'String',[]);
set(handles.ceshixulie,'String',[]);
set(handles.mae2,'String',[]);
set(handles.mape2,'String',[]);
set(handles.mse2,'String',[]);
set(handles.rmse2,'String',[]);
cla(handles.axes2);
set(handles.mae,'String',[]);
set(handles.mape,'String',[]);
set(handles.mse,'String',[]);
set(handles.rmse,'String',[]);
cla(handles.axes1);
set(handles.shuruzhi,'String',[]);
set(handles.zuiyounzhi2,'String',[]);
set(handles.zuiyouguanghuayinzi2,'String',[]);
set(handles.number,'String',[]);
set(handles.yucezhi,'String',[]);
function pushbutton6_Callback(hObject, eventdata, handles)
close GRNN3
main

五、软件和数据

链接:https://pan.baidu.com/s/16hcDdFTtxfBsQ-9S53LiDw?pwd=jfj6

提取码:jfj6

相关文章:

第80步 时间序列建模实战:GRNN回归建模

基于WIN10的64位系统演示 一、写在前面 这一期&#xff0c;我们使用Matlab进行GRNN模型的构建。 使用的数据如下&#xff1a; 采用《PLoS One》2015年一篇题目为《Comparison of Two Hybrid Models for Forecasting the Incidence of Hemorrhagic Fever with Renal Syndrom…...

《C和指针》笔记33:指针数组

除了创建整型数组一样&#xff0c;也可以声明指针数组。 int *api[10];为了弄清这个复杂的声明&#xff0c;我们假定它是一个表达式&#xff0c;并对它进行求值。下标引用的优先级高于间接访问&#xff0c;所以在这个表达式中&#xff0c;首先执行下标引用。因此&#xff0c;a…...

C/C++字符函数和字符串函数详解————内存函数详解与模拟

个人主页&#xff1a;点我进入主页 专栏分类&#xff1a;C语言初阶 C语言程序设计————KTV C语言小游戏 C语言进阶 C语言刷题 欢迎大家点赞&#xff0c;评论&#xff0c;收藏。 一起努力&#xff0c;一起奔赴大厂。 目录 1.前言 2 .memcpy函数 3.memmove函…...

CAcUiDockControlBar初始位置 2023/8/19 下午3:51:18

2023/8/19 下午3:51:18 CAcUiDockControlBar初始位置 2023/8/19 下午3:52:00 CAcUiDockControlBar的初始位置是根据其在程序代码中的设置而确定的。通常情况下,它的初始位置可以通过以下几种方式进行设置: 使用Create函数:在创建CAcUiDockControlBar对象时,可以调用Cre…...

CDH6.3.2 的pyspark读取excel表格数据写入hive中的问题汇总

需求&#xff1a;内网通过Excel文件将数据同步到外网的CDH服务器中&#xff0c;将CDH中的文件数据写入hive中。 CDH版本为&#xff1a;6.3.2 spark版本为&#xff1a;2.4 python版本&#xff1a;2.7.5 操作系统&#xff1a;CentOS Linux 7 集群方式&#xff1a;yarn-cluster …...

2120 -- 预警系统题解

Description OiersOiers 国的预警系统是一棵树&#xff0c;树中有 &#xfffd;n 个结点&#xff0c;编号 1∼&#xfffd;1∼n&#xff0c;树中每条边的长度均为 11。预警系统中只有一个预警信号发射站&#xff0c;就是树的根结点 11 号结点&#xff0c;其它 &#xfffd;−1…...

C++入门-day01

一、认识C C融合了三种不同的编程方式 C代表的过程性语言在C基础上添加的类、结构体puls代表的面向对象语言C模板支持泛型编程 C完全兼容C的特性 Tips&#xff1a;侯捷老师提倡的Modren C是指C11、C14、C17和C20这些新标准所引入的一系列新特性和改进。在我们练习的时候也应当去…...

Android开源 Skeleton 骨架屏 V1.3.0

目录 一、简介 二、效果图 三、引用 Skeleton 添加jitpack 仓库 添加依赖: 四、新增 “块”骨架屏 1、bind方法更改和变化&#xff1a; 2、load方法更改和变化&#xff1a; 五、关于上一个版本 一、简介 骨架屏的作用是在网络请求较慢时&#xff0c;提供基础占位&…...

网络资料搬运(2)

(1) Ubuntu 22.04&#xff1a; 为 Ubuntu22.04 系统添加中文输入法 linux解压gz文件的命令 Ubuntu20.04出现Unit ssh.service could not be found 详解使用SSH远程连接Ubuntu服务器系统 Configuring networks&#xff08;配置网络&#xff09; (2) Python && OpenCV: …...

SEO搜索引擎

利用搜索引擎的规则提高网站在有关搜索引擎内的自然排名&#xff0c;吸引更多的用户访问网站&#xff0c;提高网站的访问量&#xff0c;提高网站的销售能力和宣传能力&#xff0c;从而提升网站的品牌效应 搜索引擎优化的技术手段 黑帽SEO 通过欺骗技术和滥用搜索算法来推销毫不…...

动态规划-状态机(188. 买卖股票的最佳时机 IV)

状态分类&#xff1a; f[i,j,0]考虑前i只股票&#xff0c;进行了j笔交易&#xff0c;目前未持有股票 所能获得最大利润 f[i,j,1]考虑前i只股票&#xff0c;进行了j笔交易&#xff0c;目前持有股票 所能获得最大利润 状态转移&#xff1a; f[i][j][0] Math.max(f[i-1][j][0],f[…...

银行业务队列简单模拟(队列应用)

设某银行有A、B两个业务窗口&#xff0c;且处理业务的速度不一样&#xff0c;其中A窗口处理速度是B窗口的2倍 —— 即当A窗口每处理完2个顾客时&#xff0c;B窗口处理完1个顾客。给定到达银行的顾客序列&#xff0c;请按业务完成的顺序输出顾客序列。假定不考虑顾客先后到达的时…...

2023/8/8 下午10:42:04 objectarx

2023/8/8 下午10:42:04 objectarx 2023/8/8 下午10:42:16 ObjectARX(AutoCAD Runtime Extension)是用于开发和自定义AutoCAD软件的编程接口。ObjectARX允许开发者使用C++、.NET等编程语言来创建插件、扩展功能和定制化AutoCAD的行为。 通过ObjectARX,开发者可以访问Auto…...

Day-06 基于 Docker安装 Nginx 镜像

1.去官方公有仓库查询nginx镜像 docker search nginx 2.拉取该镜像 docker pull nginx 3. 启动镜像&#xff0c;使用nginx服务&#xff0c;代理本机8080端口(测试是不是好使) docker run -d -p 8080:80 --name nginx-8080 nginx docker ps curl 127.0.0.1:8080...

linux入门---信号的保存和捕捉

目录标题 信号的一些概念信号的保存pending表block表handler表 信号的捕捉内核态和用户态信号的捕捉 信号的一些概念 1.进程会收到各种各样的信号&#xff0c;那么程序对该信号进行实际处理的动作叫做信号的递达。 2.我们之前说过当进程收到信号的时候可能并不会立即处理这个信…...

5.外部中断

中断初始化配置步骤&#xff1a; IO口初始化配置 开启中断总允许EA 打开某个IO口的中断允许 打开IO口的某一位的中断允许 配置该位的中断触发方式 中断函数&#xff1a; #pragma vector PxINT_VECTOR __interrupt void 函数名(void){}#pragma vector PxINT_VECTOR __int…...

Mydb数据库问题

1、请简要介绍一下这个基于 Java 的简易数据库管理系统。它的主要功能是什么&#xff1f; TM&#xff08;Transaction Manager&#xff09;&#xff1a;事务管理器&#xff0c;用于维护事务的状态&#xff0c;并提供接口供其他模块查询某个事务的状态。DM&#xff08;Data Man…...

部署并应用ByteTrack实现目标跟踪

尽管YOLOv8已经集成了ByteTrack算法&#xff0c;但在这里我还是想利用ByteTrack官网的代码&#xff0c;自己实现目标跟踪。 要想应用ByteTrack算法&#xff0c;首先就要从ByteTrack官网上下载并安装。虽然官网上介绍得很简单&#xff0c;只需要区区6行代码&#xff0c;但对于国…...

MacOS怎么配置JDK环境变量

1 输入命令看是否配置了JDk 的环境变量&#xff1a;echo $JAVA_HOME 要是什么也没输出 证明是没配置 2 输入命令编辑 sudo vim ~/.bash_profile 然后按 i &#xff0c;进入编辑模式&#xff0c;粘贴下面的代码&#xff0c;注意&#xff1a;JAVA_HOME后面路径需要改成自己的版…...

Spring Boot 开发16个实用的技巧

当涉及到使用Spring Boot开发应用程序时&#xff0c;以下是16个实用的技巧&#xff1a; 1. **使用Spring Initializr**&#xff1a;Spring Initializr是一个快速创建Spring Boot项目的工具&#xff0c;可以帮助您选择项目依赖和生成项目骨架。 2. **自动配置**&#xff1a;Sp…...

《机器学习实战》学习记录-ch2

PS: 个人笔记&#xff0c;建议不看 原书资料&#xff1a;https://github.com/ageron/handson-ml2 2.1数据获取 import pandas as pd data pd.read_csv(r"C:\Users\cyan\Desktop\AI\ML\handson-ml2\datasets\housing\housing.csv")data.head() data.info()<clas…...

lv7 嵌入式开发-网络编程开发 07 TCP服务器实现

目录 1 函数介绍 1.1 socket函数 与 通信域 1.2 bind函数 与 通信结构体 1.3 listen函数 与 accept函数 2 TCP服务端代码实现 3 TCP客户端代码实现 4 代码优化 5 练习 1 函数介绍 其中read、write、close在IO中已经介绍过&#xff0c;只需了解socket、bind、listen、acc…...

mysql技术文档--阿里巴巴java准则《Mysql数据库建表规约》--结合阿丹理解尝试解读--国庆开卷

阿丹&#xff1a; 国庆快乐呀大家&#xff01; 在项目开始前一个好的设计、一个健康的表关系&#xff0c;不仅会让开发变的有趣舒服&#xff0c;也会在后期的维护和升级迭代中让系统不断的成长。那么今天就认识和解读一下阿里的准则&#xff01;&#xff01; 建表规约 表达是…...

Qt+openCV学习笔记(十六)Qt6.6.0rc+openCV4.8.1+emsdk3.1.37编译静态库

前言&#xff1a; 有段时间没来写文章了&#xff0c;趁编译库的空闲&#xff0c;再写一篇记录文档 WebAssembly的发展逐渐成熟&#xff0c;即便不了解相关技术&#xff0c;web前端也在不经意中使用了相关技术的库&#xff0c;本篇文档记录下如何编译WebAssembly版本的openCV&…...

JUC第十四讲:JUC锁: ReentrantReadWriteLock详解

JUC第十四讲&#xff1a;JUC锁: ReentrantReadWriteLock详解 本文是JUC第十四讲&#xff1a;JUC锁 - ReentrantReadWriteLock详解。ReentrantReadWriteLock表示可重入读写锁&#xff0c;ReentrantReadWriteLock中包含了两种锁&#xff0c;读锁ReadLock和写锁WriteLock&#xff…...

在vue3中使用vite-svg-loader插件

vite-svg-loader插件可以让我们像使用vue组件那样使用svg图&#xff0c;使用起来超级方便。 安装 npm install vite-svg-loader --save-dev使用 import svgLoader from vite-svg-loaderexport default defineConfig({plugins: [vue(), svgLoader()] })组件里使用 在路径后加…...

国庆10.4

QT实现TCP服务器客户端 服务器 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> //服务器头文件 #include <QTcpSocket> //客户端头文件 #include <QList> //链表容器 #include <QMe…...

2023/8/12 下午8:41:46 树状控件guilite

2023/8/12 下午8:41:46 树状控件guilite 2023/8/12 下午8:42:08 树状控件(Tree View)是一种常见的图形用户界面(GUI)元素,它通常用于显示层次结构数据或文件系统的目录结构。Guilite 是一个轻量级的跨平台 GUI 库,支持多种控件,包括树状控件。 在 Guilite 中使用树状…...

BL808学习日志-2-LVGL for M0 and D0

一、lvgl测试环境 对拿到的M1S_DOCK开发板进行开发板测试&#xff0c;博流的官方SDK是支持M0和D0两个内核都进行测试的&#xff1b;但是目前只实现了M0的LVGLBenchmark&#xff0c;测试D0内核中发现很多莫名其妙的问题。一会详细记录。 使用的是开发板自带的SPI显示屏&#xff…...

treectrl类封装 2023/8/13 下午4:07:35

2023/8/13 下午4:07:35 treectrl类封装 2023/8/13 下午4:07:53 TreeCtrl 类是一个常用的图形用户界面控件,用于实现树形结构的展示和交互。以下是一个简单的 TreeCtrl 类的封装示例: python import wxclass MyTreeCtrl(wx.TreeCtrl):def __init__(self, parent):super()…...

贵州省兴义市建设局网站/网络推广的工作好做吗

前言 当代码中出现多重if-else语句或者switch语句时。弊端之一&#xff1a;如果这样的代码出现在多处&#xff0c;那么一旦出现需求变更&#xff0c;就需要把所有地方的if-else或者switch代码进行更改&#xff0c;要是遗漏了某一处&#xff0c;那么程序就会出错。弊端之二&…...

什么网站做微信公众账号/网络营销课程个人总结3000字

原因&#xff1a;音频编码原来为AMR&#xff0c;ios那边貌似不支持这种音频编码 VideoAbsActivity.java 加了 mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 将音频录制格式从默认…...

织梦网站后台设置好smtp邮箱/网站如何做关键词优化

Idea搭建springmvcmaven, 好几次搭建都是想要借助工具一步到位&#xff0c;直接生成springmvcmaven模版 实验证实暂时没办法。要么只能一步生成spring模版&#xff0c;要么一步生成mave的webapp模版&#xff0c;两个结合暂时做不到。 曲线救国方式如下&#xff1a; 1、 …...

网站空间数据库需要多大/厦门网站搜索引擎优化

Trie 定义&#xff1a; Trie (字典树)是一种用于实现字符串快速检索的多叉树结构。Trie的每个节点都拥有若于个字符指针&#xff0c;若在插入或检索字符串时扫描到一个字符c, 就沿着当前节点的C字符指针&#xff0c;走向该指针指向的节点。 初始化 一棵空Trie仅包含一个根节点…...

兰州新增疫情最新消息/厦门seo网站管理

例如:Linux查询结果如下 第一个字母,表示该文件的类型 “-”表示普通文件; “d”表示目录; “l”表示链接文件; “p”表示管理文件; “b”表示块设备文件; “c”表示字符设备文件; “s”表示套接字文件; 此处有四个普通文件和一个目录,其中wqtmp目录下有一个文本文…...

网站设计前景/国外免费建站网站搭建

window下用rmdir命令来删除文件夹的时候&#xff0c;发现如果文件夹非空是会报错的。尝试了/f, /r等选项后发现bat根本就不识别这些标识&#xff0c;晕。 后来找到在windows下是用/s来强制删除非空目录&#xff0c;如果把提示也省掉&#xff0c;需要用/q选项。 如下... FOR /d …...