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

置信椭圆(误差椭圆)详解

文章目录

  • Part.I 预备知识
    • Chap.I 一些概念
    • Chap.II 主成分分析
    • Chap.III Matlab 函数 randn
    • Chap.IV Matlab 函数 pca
  • Part.II 置信椭圆的含义
    • Chap.I 一个 Matlab 实例
      • Sec.I 两个不相关变量的特征
      • Sec.II 两个相关变量的特征
    • Chap.II 变换阵 (解相关矩阵) 的求解
  • Reference

Part.I 预备知识

Chap.I 一些概念

首先要了解一下下面的概念:

  • 点估计:设总体X的分布函数的形式已知,但它的一个或多个参数未知,借助于总体X的一个样本来估计总体未知参数的值的问题称为参数的点估计问题。
  • 对于一个未知量,人们在测量或计算时,常不以得到近似值为满足,还需估计误差,即要求知道近似值的精确程度(亦即所求真值所在的范围)。类似地,对于未知参数 θ\thetaθ,除了求出它的点估计 θ^\hat \thetaθ^ 外,我们还希望估计出一个范围,并希望知道这个范围包含参数 θ\thetaθ 真值的可信程度。这样的范围通常以区间的形式给出,同时还给出此区间包含参数 θ\thetaθ 真值的可信程度。这种形式的估计称为区间估计,这样的区间即所谓置信区间。
  • 置信区间:Confidence interval 设总体 X 的分布函数 F(x;θ)F(x;\theta)F(x;θ) 含有一个未知参数 θ\thetaθθ∈Θ\theta\in\ThetaθΘΘ\ThetaΘθ\thetaθ 可能取值的范围),对于给定值 α\alphaα0<α<10<\alpha<10<α<1),若由来自 X 的样本 X1,X2,⋯,XnX_1,X_2,\cdots,X_nX1,X2,,Xn 确定的两个统计量 θ‾=θ‾(X1,X2,⋯,Xn)\underline \theta=\underline \theta(X_1,X_2,\cdots,X_n)θ=θ(X1,X2,,Xn)θ‾=θ‾(X1,X2,⋯,Xn)(θ‾<θ‾)\overline \theta=\overline \theta(X_1,X_2,\cdots,X_n)\ (\underline \theta<\overline \theta)θ=θ(X1,X2,,Xn) (θ<θ) ,对于任意 θ<Θ\theta<\Thetaθ<Θ 满足 P{θ‾(X1,X2,⋯,Xn)<θ<θ‾(X1,X2,⋯,Xn)}≥1−αP\{\underline \theta(X_1,X_2,\cdots,X_n)<\theta<\overline \theta(X_1,X_2,\cdots,X_n)\}\ge1-\alphaP{θ(X1,X2,,Xn)<θ<θ(X1,X2,,Xn)}1α,则称随机区间 (θ‾,θ‾)(\underline \theta,\overline \theta)(θ,θ)θ\thetaθ置信水平1−α1-\alpha1α 的置信区间,θ‾\underline \thetaθθ‾\overline \thetaθ 分别称为置信水平为 1−α1-\alpha1α 的双侧置信区间的置信下限和置信上限,1−α1-\alpha1α 称为置信水平
  • 上面给出了置信区间严格的数学定义,通俗的讲,置信区间展现的是这个参数的真实值有一定的带来落在测量结果的程度,其给出的是被量测参数的量测值的可信程度(置信水平),一般常用 95%95\%95% 置信水平。
  • 68−95−99.768-95-99.7689599.7 法则:或者叫做 3σ3\sigma3σ 原则。对于正态分布,68%68\%68% 的数据分布在距离均值1个方差的范围;95%95\%95% 的数据分布在距离均值2个方差的范围;99.7%99.7\%99.7% 的数据分布在距离均值3个方差的范围内。

Chap.II 主成分分析

主成分分析 (Principal Component Analysis, PCA) 是一种统计方法,通过正交变换将一组可能存在相关性的变量转换为一组线性不相关的变量,转换后的这组变量叫主成分。PCA 的主要应用有:降维、特征提取、去噪、故障检测。

  • PCA 的主要思想是将 nnn 维特征映射到 kkk 维上,这 kkk 维是全新的正交特征也被称为主成分,是在原有 nnn 维特征的基础上重新构造出来的 kkk 维特征。
  • PCA 的工作就是从原始的空间中顺序地找一组相互正交的坐标轴,新的坐标轴的选择与数据本身是密切相关的。其中,第一个新坐标轴选择是原始数据中方差最大的方向,第二个新坐标轴选取是与第一个坐标轴正交的平面中使得方差最大的,第三个轴是与第1,2个轴正交的平面中方差最大的。依次类推,可以得到 nnn 个这样的坐标轴。通过这种方式获得的新的坐标轴,我们发现,大部分方差都包含在前面 kkk 个坐标轴中,后面的坐标轴所含的方差几乎为0。于是,我们可以忽略余下的坐标轴,只保留前面 kkk 个含有绝大部分方差的坐标轴。事实上,这相当于只保留包含绝大部分方差的维度特征,而忽略包含方差几乎为0的特征维度,实现对数据特征的降维处理。

Chap.III Matlab 函数 randn

下面的实例中会用到 Matlab 中生成正态分布随机数的函数randn(),下面对其用法做简要的介绍。

  • randn:产生均值为0、方差为1的高斯白噪声,常用的用法有下面几种
  • randn(n):产生一个 n*n 的随机数方阵
  • randn(m,n):产生一个 m*n 的随机数矩阵

除此之外还有,Matlab 关于随机数的生成函数还有:

  • rand:产生均值为0.5、幅度在0~1之间的伪随机数。
  • randperm(n):产生1到n的均匀分布随机序列。
  • normrnd(a,b,c,d):产生均值为a、方差为b大小为c*d服从正态分布的随机矩阵。

下面对randn做一个简单的验证:产生两列数据,分别画出它们的概率分布,看看图形是否符合正态分布。代码和绘制结果如下,可以看出结果符合预期。

%% 检验 randn 函数
function rTest()
data=randn(600,2);
figure
hold on
subplot(121)
t=2;
p=capaplot(data(:,1),[-t,t]);
subplot(122)
p=capaplot(data(:,2),[-t,t]);
end

在这里插入图片描述

Chap.IV Matlab 函数 pca

function [coeff, score, latent, tsquared, explained, mu] = pca(x,varargin)

输入:x 是样本,N*P=N个样本量,P维


输出:

  • COEFF,返回N×P数据矩阵X的主成分系数。X的行对应于观测值,列对应于变量。每列系数包含一个主成分的系数。各列按主成分方差(latent)降序排列。默认情况下,PCA将数据居中并使用奇异值分解算法。对于非默认选项,请使用名称/值对参数。
  • SCORE,返回主成分得分,它是X在主成分空间中的表示。score的行对应观察值,列对应主成分。中心数据可以用SCORE*COEFF重建。
  • LATENT,返回每个主成分方差,即X的协方差矩阵的特征值,特征值从大到小进行排序。
  • TSQUARED,返回X中每个观测值的Hotelling T平方统计值。PCA使用所有主分量计算TSQUARED(在整个空间中计算),即使请求的组件较少(请参见下面的“NumComponents”选项)。对于缩小空间中的TSQUARED,使用MAHAL(SCORE,SCORE)。
  • EXPLAINED,返回一个向量,其中包含每个主成分方差占总方差的百分比。
  • MU,Centered设置为true时返回估计的平均值MU;设置为false时返回所有零。

Part.II 置信椭圆的含义

对于一维的情况,我们可以用置信区间来描述一个值落在某个区间(区域)的概率(置信水平),这个区间用几何表示是一个线段;对于二维的情况,几何意义上就从一条直线变成了一个平面,类似于置信区间,便有了置信椭圆(confidence ellipse)的概念。


下面是笔者的思考,一些自说自话罢了。

  • 置信椭圆的概念是从置信区间类比而来的,严格意义上讲它描述的仅仅是二维的情况,对于三维可以称之为置信椭球,对于更高维可以称之为置信超椭球(自己瞎起的~);但是很多情况下,对于二维或者更高维,很多学者也将其称为置信椭圆。
  • 为什么叫『椭圆』,不叫『圆』『长方形』呢?因为点的分布从图形上看,可以用一个椭圆将其包裹起来,所以叫椭圆。
  • 『误差椭圆』这个概念又是怎么来的?对于二维情况,我们进行多次量测的目的是为了确定一个二维参数的取值,但是我们又不能 100%100\%100% 确定我们给出的值就是这个二位参数的真值,但是我们一般可以说这个二维参数有多少概率会落在某个范围内。在给定概率的情况下,这个范围越小,说明我们对我们的量测越有信心,我们量测的精度越高,误差越小。这个范围可以说是我们给出参数的精度或误差,所以便有了『误差椭圆』这个概念,这么说『精度椭圆』这个名词是不是也顺利成章了?

Chap.I 一个 Matlab 实例

其实,写这篇博文的初衷是为了搞清楚『为什么两个随机变量不相关,其误差椭圆的长轴平行于坐标轴』。还是看个例子,用数据说话吧。在看下面的内容之前首先要明确下面几点:

  • 我们通过 randn 函数来生成了两列均值为 0 方差为 1 的随机数;我们对这列随机数的理解为:每一列数据都表示对一个『代求量』的多次量测,显然我们已经假设我们的量测存在一个服从高斯分布的噪声,并且我们的『代求量』真值是0。我们也可以将每一列数据理解为对一个『随机变量』的多次抽样或观测。
  • randn 函数虽然一次生成了两列数据,但是这两列数据是毫无关联的(当然也可以一次生成一列数据,分两次生成);换言之,这两列数据代表的两个『随机变量』是不相关的。

Sec.I 两个不相关变量的特征

首先用randn生成了两列均值为0、方差为1的随机数据,数据量是300*n;为了探究不同数据量的区别,因此画了6幅图如下,数据量分别是300*nn=1,2,3,4,5,6。图中,len表示数据量的大小,a,b 分别表示椭圆长轴和短轴长度;红色和蓝色箭头(好吧,红色可能看不到箭头)分别表示长轴和短轴方向。可以看到,画出来的图形几近与圆,数据量越多,它越接近于圆。但是它的轴并不平行于坐标轴,可以这样解释:因为这两列数据的方差都是1,所以长短轴理论上应该相等,所以画出来的图形理论上应该是个圆(实际情况也是,数据量越多,它越接近于圆),所以其指向就无所谓了。

在这里插入图片描述
为了让两列数据的方差不同,我们将第一列数据乘上了2,不同数据量的绘图结果如下。可以看到,它确实是长短轴平行于坐标轴的椭圆!!

在这里插入图片描述
涉及的绘图代码如下:

%% 两个不相关变量的特性
function Test1(wid,hei,a,b)
figure
pmag=50;  %the size of margin pix
marx(1:b+1,1)=3;marx(1)=8; 
mary(1:a+1,1)=3;mary(1)=8;
sumx=sum(marx);sumy=sum(mary);
marx=marx./sumx;mary=mary./sumy;
lefy=pmag/hei/mary(1);
lefx=pmag/wid/marx(1);
marx=marx.*lefx;
mary=mary.*lefy;
wid1=(1-lefx)/b;
hei1=(1-lefy)/a;xt=-4:2:4;xtl1=sprintfc('%g',xt);xtl2=kcell(size(xtl1));xl=[-5 5];
yt1=-4:2:4;ytl1=sprintfc('%g',yt1);ytl2=kcell(size(ytl1));yl=[-5 5];set(gcf,'position',[0 0 wid hei])
for i=1:amagy=(a-i)*hei1+sum(mary(1:end-i));for j=1:bmagx=(j-1)*wid1+sum(marx(1:j));n=(i-1)*b+j;subplot(a,b,n);set(gca,'position',[magx magy wid1 hei1],'box','on');% plot here!len=300;data=randn(n*len, 2);       % get the data PCA(data);set(gca,'XLim',xl,'XTick',xt,'XTicklabel',xtl2);set(gca,'YLim',yl,'YTick',yt1,'YTicklabel',ytl2);if j==1ylabel('Ylab');set(gca,'YTick',yt1,'YTicklabel',ytl1);endif i==axlabel('Xlab');set(gca,'XTick',xt,'XTicklabel',xtl1);endend
end
end% get a null cell which is a*b dims
function data=kcell(m)
a=m(1);b=m(2);
data=cell(a,b);
for i=1:afor j=1:bdata(i,j)=cellstr(num2str(data{i,j}));end
end
end%% PCA
function PCA(data)
len=size(data,1);
data(:,1)=2*data(:,1);
center = mean(data);
[coeff, ~, latent, ~, ~] = pca(data);% r1 r2 为自定义的向量大小参数()
r1 = 6;
r2 = 3;
% p1 p2 为第一主轴和第二主轴上的点
p1 = r1*coeff(:, 1)'+center;
p2 = r2*coeff(:, 2)'+center;% 主轴方向与X轴之间的夹角
angle = cart2pol(coeff(1, :), coeff(2, :))*180/pi;
beta = angle(1, 1);
% 置信椭圆坐标(以 95% 为例)
semimajor = sqrt(latent(1, 1)); % 长轴长度(一半)
semiminor = sqrt(latent(2, 1)); % 短轴长度(一半)
alpha = linspace(0, 360, 2000)';
% 卡方分布表
% https://people.richland.edu/james/lecture/m170/tbl-chi.html
% level = 4.605;  % 90%
level = 5.991;  % 95%
% level = 9.210;  % 99%
% 椭圆坐标点
ellipse_X = center(1, 1)+sqrt(level)*(semimajor*cosd(alpha)*cosd(beta)-...semiminor*sind(alpha)*sind(beta));
ellipse_Y = center(1, 2)+sqrt(level)*(semimajor*cosd(alpha)*sind(beta)+...semiminor*sind(alpha)*cosd(beta));%% 可视化
% figure
hold on
box on
grid on
% 原始数据
scatter(data(:, 1), data(:, 2), 15, 'LineWidth', 1.2,...'MarkerEdgeColor', [151, 138, 189]/255,...'MarkerFaceColor', [151, 138, 189]/255);
xlim([-5, 5]); 
ylim([-5, 5]);
set(gca, 'linewidth', 1.5)% 置信椭圆
plot(ellipse_X, ellipse_Y, 'Color', [0, 102, 255]/255,...'LineStyle', '-', 'LineWidth', 3),% 第一主轴方向
arrow_1 = annotation('arrow', 'Color', [162, 20, 47]/255,...'HeadStyle', 'cback2', 'LineWidth', 3, 'HeadWidth', 20, 'HeadLength', 20);
arrow_1.Parent = gca;
arrow_1.X = [center(1, 1), p1(1, 1)];
arrow_1.Y = [center(1, 2), p1(1, 2)];  % 第二主轴方向
arrow_2 = annotation('arrow', 'Color', [0, 114, 189]/255,...'HeadStyle', 'cback2', 'LineWidth', 3, 'HeadWidth', 20, 'HeadLength', 20);
arrow_2.Parent = gca; 
arrow_2.X = [center(1, 1), p2(1, 1)]; 
arrow_2.Y = [center(1, 2), p2(1, 2)];  % 中心点
plot(center(1, 1), center(1, 2),...'Marker', 'o',...'MarkerSize', 8,...'MarkerEdgeColor', [162, 20, 47]/255,...'MarkerFaceColor', [162, 20, 47]/255);% title('主轴方向和置信椭圆', 'FontSize', 16, 'FontWeight', 'bold')
str=sprintf('len=%d\na=%.2f\nb=%.2f',len,semimajor,semiminor);
text(2, -3, str, 'FontSize', 16, 'FontWeight', 'bold')
axis equal
end

Sec.II 两个相关变量的特征

为了让两个随机变量相关,我们记randn生成的两列数据为 X=[a,b]X=[a,b]X=[a,b](其中 aaa 的均值为0,方差为2;bbb 的均值为0,方差为1),将其乘上一个矩阵得到新的数据 YYY
Y=[a′,b′]=[a,b]⋅[11−12]=X⋅ZY=[a',b']=[a,b]\cdot \left[ \begin{array}{ccc} 1 & 1 \\ -1 & 2 \\ \end{array} \right]=X\cdot ZY=[a,b]=[a,b][1112]=XZ
也就是说,a′=a−b,b′=a+2ba'=a-b,\ b'=a+2ba=ab, b=a+2b,然后我们绘制其置信椭圆如下图所示:

在这里插入图片描述
其代码如下:

%% 两个相关变量的特征
function Test2()
len=300;
data=randn(5*len, 2);       % get the data 
data(:,1)=2*data(:,1);      % 第一列方差变为2
data1=zeros(size(data));
Z=[1 1;-1 2];
data1=data*Z;
% data1(:,1)=data(:,1)-data(:,2);
% data1(:,2)=data(:,1)+2*data(:,2);
PCA(data1);
end

我们能让两个不相关的随机变量通过乘以一个矩阵变成相关的;同样的我们也可以通过乘一个矩阵使它们『解相关』。对于这组数据,我们已经知道了使它俩变成相关的矩阵 ZZZ,那么再乘 Z−1Z^{-1}Z1 显然可以解相关;但是对于一个我们不知道变换矩阵(对应此例也就是上文的 Z−1Z^{-1}Z1 ) 的数据,我们一般用下面的方法来求『变换阵』。

PS:之前的我还以为用 LU 分解来求变换阵,并且认为求解变换阵的方法是『高斯变换』,变换阵被称为『高斯变换阵』。但是并不是,是通过特征值和特征向量来求的。

Chap.II 变换阵 (解相关矩阵) 的求解

现在的问题是:已知两个随机变量的许多量测(两列数据),而且这两个随机变量是相关的;怎么找到一个矩阵,使得这两列数据乘上这个矩阵之后,这两列数据就不相关了。笔者觉得有两种方法:一种是几何意义上的:将置信椭圆旋转一下,使得其长短轴平行于坐标轴(旋转在代数意义上乘以一个矩阵);另一种是纯代数:通过矩阵变换找到这样的旋转矩阵。

实际上,上述问题用主成分分析找主元、降相关就可以解决。


基于特征值分解协方差矩阵实现 PCA 算法步骤

  • 输入数据集 X={x1,x2,⋯,xn}X=\{x_1,x_2,\cdots,x_n\}X={x1,x2,,xn},需要将其降到 kkk
  • 去中心化:每一维特征减去各自的均值
  • 计算方差-协方差矩阵 A=1nXTXA=\frac{1}{n}X^TXA=n1XTX (这里分母是 nnnn−1n-1n1 对求出的特征向量没有影响)
  • 求出 AAA 的特征值和特征向量
  • 对特征值从大到小排序,选择其中最大的 kkk 个。然后将其对应的 kkk 个特征向量分别作为行向量组成特征向量矩阵 PPP
  • 将数据转换到 kkk 个特征向量构建的新空间中,即 Y=PXY=PXY=PX

下面对此种方法求『解相关矩阵』进行一个简单的证明。

  • 首先要明确,我们的目的是将 XXX 的协方差矩阵 AAA 转换为一个对角阵,即 XTX=A=VTΛVX^TX=A=V^T\Lambda VXTX=A=VTΛV,也就是令 (XV−1)T(XV−1)=Λ(XV^{-1})^T(XV^{-1})=\Lambda(XV1)T(XV1)=Λ,即寻求一个转换阵 Z=V−1Z=V^{-1}Z=V1,使得 BTB=Λ(B=XZ)B^TB=\Lambda\ (B=XZ)BTB=Λ (B=XZ)
  • 关于矩阵分解的方法中,哪种分解方法可以使得矩阵的分解结果中含有一个对角阵呢?奇异值SVD和特征分解分解可以!用这两种分解中的哪种都可以!
  • 特征分解:A=VΛV−1A=V\Lambda V^{-1}A=VΛV1 并且协方差阵是一个实对称阵,对于实对称阵,其不同特征值对应的特征向量正交。又因为特征向量伸缩(乘一个常数)之后还是特征向量,所以我们很容易构造出来一个特征向量矩阵 VVV,使得 VT=V−1V^T=V^{-1}VT=V1.
  • 基于上述,有 XTX=VΛV−1X^TX=V\Lambda V^{-1}XTX=VΛV1. 所以我们取转换阵 Z=VZ=VZ=VY=XZY=XZY=XZYTY=VTXTXV=VTVΛV−1V=V−1VΛV−1V=ΛY^TY=V^TX^TXV=V^TV\Lambda V^{-1}V=V^{-1}V\Lambda V^{-1}V=\LambdaYTY=VTXTXV=VTVΛV1V=V1VΛV1V=Λ。这样利用转换阵 VVV 便将协方差矩阵变成了对角阵,即实现了『解相关』。

基于上述步骤,对于相关变量得到了其变换阵 X1X1X1,绘图结果如下,左上是原始数据,左下和右上对应中可行的转换矩阵,右下啥也不是。我们发现得到的变换阵 X1X1X1 并不是 Z−1Z^{-1}Z1DataY=DataX⋅ZData_Y=Data_X\cdot ZDataY=DataXZ),这说明变换阵不唯一?

在这里插入图片描述
代码如下:

%% PCA 求 变换矩阵 并绘图
function Test3()
len=300;
data=randn(5*len, 2);       % get the data 
data(:,1)=2*data(:,1);      % 第一列方差变为2
Z=[1 1;-1 3];
data1=data*Z;
A=data1'*data1/(5*len);
[X,D]=eig(A);               % 求特征值 D 和特征向量 X; X 各列是相应的特征向量
% A*X(:,1)-D(1,1)*X(:,1)
data2=data1*X;
X1=[X(:,2),X(:,1)];         % 因为第一个特征值比较大,所以优先将第一个特征向量放在前面
data3=data1*X1;
data4=data1*X1';            
% Plot
subplot(2,2,1);
PCA(data1);                 % 原始数据
subplot(2,2,2);
PCA(data2);                 % 去相关之后的 y 轴长
subplot(2,2,3);
PCA(data3);                 % 去相关之后的 x 轴长
subplot(2,2,4);
PCA(data4);                 % 啥也不是
end

PS:实际上,笔者使用的 PCA 函数中已经做了主成分分析(求出了样本的方差-协方差矩阵),里面用的是Matlab自带的pca函数,为了更详细地了解 PCA 的过程,笔者又做了点额外工作,PCA 函数在本博文中仅仅发挥一个画图的功能。

Reference

  • 主成分分析 (PCA) 的主轴和置信椭圆可视化
  • 主成分分析(PCA)原理详解
  • PCA的数学原理
  • 置信椭圆与R画法
  • Matlab 让多图排版更美观
  • 矩阵的各种分解汇总
  • 注:上面的代码已经很全了,笔者也提供了测试时所使用的.m文件,戳我下载。

相关文章:

置信椭圆(误差椭圆)详解

文章目录Part.I 预备知识Chap.I 一些概念Chap.II 主成分分析Chap.III Matlab 函数 randnChap.IV Matlab 函数 pcaPart.II 置信椭圆的含义Chap.I 一个 Matlab 实例Sec.I 两个不相关变量的特征Sec.II 两个相关变量的特征Chap.II 变换阵 (解相关矩阵) 的求解ReferencePart.I 预备知…...

FreeSWITCH 智能呼叫流程设计

文章目录1. 智能呼叫流程2. 细节处理1. 呼叫字符串指定拨号计划2. 外呼的拨号计划3. 语音打断的支持1. 智能呼叫流程 用户与机器人对话通常都是以文本的形式进行&#xff0c;但是借助 ASR 和 TTS 技术&#xff0c;以语音电话为载体的智能呼叫系统成为可能。智能呼叫系统涉及到…...

什么是Restful风格

什么是RestFul风格&#xff1f; Restful就是一个资源定位及资源操作的风格。不是标准也不是协议&#xff0c;只是一种风格。基于这个风格设计的软件可以更简洁&#xff0c;更有层次&#xff0c;更易于实现缓存等机制。 REST即Representational State Transfer的缩写&#xff0…...

sumifs的交叉 表的例子

比如这样&#xff0c;那么冰箱绿山店的栏位中&#xff0c;SUMIFS($D$3:$D$10,$B$3:$B$10,$F3,$C$3:$C$10,G$2)就是把求和范围&#xff0c;条件1设置为固定列的复合引用&#xff0c;条件2设置为固定行的复合引用即可。...

React :一、简单概念

目录 1.什么是React&#xff1f; 2.谁开发的 3.为什么要学React&#xff1f; 4.React的特点&#xff1f; 5.React依赖包 6.第一个React程序 7.虚拟DOM的两种创建方法 8.虚拟DOM和真实DOM 1.什么是React&#xff1f; 用于构建用户界面的JavaScript库&#xff0c;是一个将…...

Actipro WinForms Studio Crack

Actipro WinForms Studio Crack 已验证Microsoft.NET 7兼容性。 添加了MetroDark配色方案。 添加了支持MetroLight和MetroDark颜色方案的MetroScrollBarRenderer。 添加了IWindowsColorScheme接口&#xff0c;该接口将替换对WindowsColorScheme的大多数引用。 添加了IWindowsCo…...

英伦四地到底是什么关系?

英格兰、苏格兰、威尔士和北爱尔兰四地到底是什么关系&#xff0c;为何苏格兰非要独立&#xff1f;故事还要从中世纪说起。大不列颠岛位于欧洲西部&#xff0c;和欧洲大陆隔海相望。在古代&#xff0c;大不列颠岛和爱尔兰属于凯尔特人的领地。凯尔特人是欧洲西部一个庞大的族群…...

Google三大论文之GFS

Google三大论文之GFS Google GFS&#xff08;Google File System&#xff09; 文件系统&#xff0c;一个面向大规模数据密集型应用的、可伸缩的分布式文件系统。GFS 虽然运行在廉价的普遍硬件设备上&#xff0c;但是它依然了提供灾难冗余的能力&#xff0c;为大量客户机提供了…...

嵌入式安防监控项目——exynos4412主框架搭建

目录 一、模块化编程思维 二、安防监控项目主框架搭建 一、模块化编程思维 其实我们以前学习32使用keil的时候就是再用模块化的思维。每个硬件都单独有一个实现功能的C文件和声明函数&#xff0c;进行宏定义以及引用需要使用头文件的h文件。 比如简单的加减乘除取余操作我们…...

YOLOv5s网络模型讲解(一看就会)

文章目录前言1、YOLOv5s-6.0组成2、YOLOv5s网络介绍2.1、参数解析2.2、YOLOv5s.yaml2.3、YOLOv5s网络结构图3、附件3.1、yolov5s.yaml 解析表3.2、 yolov5l.yaml 解析表总结前言 最近在重构YOLOv5代码&#xff0c;本章主要介绍YOLOv5s的网络结构 1、YOLOv5s-6.0组成 我们熟知YO…...

kkfileView linux 离线安装

文章目录前言一、安装 LiberOffice二、安装kkfileView1.下载安装包2.启动总结前言 一、安装 LiberOffice 下载https://kkfileview.keking.cn/LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz 安装 tar -zxvf LibreOffice_7.1.4_Linux_x86-64_rpm.tar.gz cd LibreOffice_7.1.4.2_L…...

如何编写BI项目之ETL文档

XXXXBI项目之ETL文档 xxx项目组 ------------------------------------------------1---------------------------------------------------------------------- 目录 一 、ETL之概述 1、ETL是数据仓库建构/应用中的核心…...

【LeetCode】剑指 Offer 24. 反转链表 p142 -- Java Version

题目链接&#xff1a;https://leetcode.cn/problems/fan-zhuan-lian-biao-lcof/submissions/ 1. 题目介绍&#xff08;24. 反转链表&#xff09; 定义一个函数&#xff0c;输入一个链表的头节点&#xff0c;反转该链表并输出反转后链表的头节点。 【测试用例】&#xff1a; 示…...

LAY-EXCEL导出excel并实现单元格合并

通过lay-excel插件实现Excel导出&#xff0c;并实现单元格合并&#xff0c;样式设置等功能。更详细描述&#xff0c;请去lay-excel插件文档查看&#xff0c;地址&#xff1a;http://excel.wj2015.com/_book/docs/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B.html一、安装这里使用Vue…...

配置VM虚拟机Centos7网络

配置VM虚拟机Centos7网络 第一步&#xff0c;进入虚拟机设置选中【网络适配器】选择【NAT模式】 第二步&#xff0c;进入windows【控制面板\网络和 Internet\网络连接】设置网络状态。 我们选择【VMnet8】 点击【属性】查看它的网络配置 2 .我们找到【Internet 协议版本 4(TCP…...

Kafka 位移主题

Kafka 位移主题位移格式创建位移提交位移删除位移Kafka 的内部主题 (Internal Topic) : __consumer_offsets (位移主题&#xff0c;Offsets Topic) 老 Consumer 会将位移消息提交到 ZK 中保存 当 Consumer 重启后&#xff0c;能自动从 ZK 中读取位移数据&#xff0c;继续消费…...

详细讲解零拷贝机制的进化过程

一、传统拷贝方式&#xff08;一&#xff09;操作系统经过4次拷贝CPU 负责将数据从磁盘搬运到内核空间的 Page Cache 中&#xff1b;CPU 负责将数据从内核空间的 Page Cache 搬运到用户空间的缓冲区&#xff1b;CPU 负责将数据从用户空间的缓冲区搬运到内核空间的 Socket 缓冲区…...

2023年场外个股期权研究报告

第一章 概况 场外个股期权&#xff08;Over-the-Counter Equity Option&#xff09;&#xff0c;是指由交易双方根据自己的需求和意愿&#xff0c;通过协商确定行权价格、行权日期等条款的股票期权。与交易所交易的标准化期权不同&#xff0c;场外个股期权的合同内容可以根据交…...

k8s pod,ns,pvc 强制删除

一、强制删除pod$ kubectl delete pod <your-pod-name> -n <name-space> --force --grace-period0解决方法&#xff1a;加参数 --force --grace-period0&#xff0c;grace-period表示过渡存活期&#xff0c;默认30s&#xff0c;在删除POD之前允许POD慢慢终止其上的…...

力扣第99场双周赛题目记录(复盘)

第一题 2578.最小和分割 给你一个正整数 num &#xff0c;请你将它分割成两个非负整数 num1 和 num2 &#xff0c;满足&#xff1a; num1 和 num2 直接连起来&#xff0c;得到 num 各数位的一个排列。 换句话说&#xff0c;num1 和 num2 中所有数字出现的次数之和等于 num 中所…...

spring事务失效原因

一.抛出事务不支持的异常 原理&#xff1a; Spring事务默认支持RuntimeException异常&#xff0c;抛出的异常为RuntimeException异常及其子类异常事务均可生效&#xff0c;而我们日常常见的异常基本都继承自RuntimeException&#xff0c;所以无需指定异常类型事务也能生效。 但…...

pikachu靶场CSRF之TOKEN绕过

简介 Pikachu靶场中的CSRF漏洞环节里面有一关CSRF TOKEN&#xff0c;这个关卡和其余关卡稍微有点不一样&#xff0c;因为表单里面存在一个刷新就会变化的token&#xff0c;那么这个token是否能绕过呢&#xff1f;接下来我们来仔细分析分析 实战过程 简单尝试 先利用任意一个…...

Windows中配置docker没有hyper-v功能解决方案

&#x1f468; 作者简介&#xff1a;大家好&#xff0c;我是Taro&#xff0c;前端领域创作者 ✒️ 个人主页&#xff1a;唐璜Taro &#x1f680; 支持我&#xff1a;点赞&#x1f44d;&#x1f4dd; 评论 ⭐️收藏 文章目录前言解决步骤&#xff1a;1.新建文档2. 另存为3. 功能…...

电子台账:模板制作之五——二级过滤与多条件组合

1 前言工作中&#xff0c;经常会遇到很复杂的数据&#xff0c;比如内销产品和出口产品、正常产品和报废产品都混在一块儿。电子台账中&#xff0c;需要把这些数据都区分开&#xff0c;分别汇总。这种情况&#xff0c;可以用台账软件的二级过滤功能来处理&#xff0c;实际上就是…...

Kaldi Data preparation

链接&#xff1a;GitHub - nessessence/Kaldi_ASR_Tutorial: speech recognition using Kaldi framework Lets start with formatting data. We will randomly split wave files into test and train dataset(set the ratio as you want). Create a directory data and,then t…...

libevent 学习笔记

一、参考 libevent Libevent深入浅出 - 《Libevent 深入浅出》 - 书栈网 BookStack libevent 之 event config的相关函数介绍_event_config_new_yldfree的博客-CSDN博客 Libevent之evbuffer详解_有时需要偏执狂的博客-CSDN博客 二、libevent概述 libevent 就是将网络、I…...

jupyter的使用

1.安装 安装过程看这篇记录。 安装 2.如何启动 环境搭建好后&#xff0c;本机输⼊jupyter notebook命令&#xff0c;会⾃动弹出浏览器窗⼝打开 Jupyter Notebook # 进⼊虚拟环境 workon ai(这个是虚拟环境的名称) # 输⼊命令 jupyter notebook本地notebook的默认URL为&…...

中级数据开发工程师养成计

目标 工作之后就很少时间用来沉淀知识了&#xff0c;难得用空闲时间沉淀一下自己。 成为一名中级数据开发工程师。偏向于数据仓库&#xff0c;数据治理方向。 整体排期 1 hive 2 hadoop 3 flink 4 spark 5 闲杂工具 kafka maxwell cancal 6 数据建模&#xff08;偏向于kimbo…...

fastjson 返回 $ref 数据

文章目录问题描述&#xff1a;1、重复引用&#xff1a;2、循环引用&#xff1a;原因分析&#xff1a;1、重复引用&#xff1a;2、循环引用&#xff1a;反序列化&#xff1a;1、开启引用检测&#xff1a;2、关闭引用检测&#xff1a;小结&#xff1a;问题描述&#xff1a; 问题…...

Zookeeper特性和节点数据类型详解

什么是ZK&#xff1f; zk,分布式应用协调框架&#xff0c;Apache Hadoop的一个子项目&#xff0c;解决分布式应用中遇到的数据管理问题。 可以理解为存储少量数据基于内存的数据库。两大核心&#xff1a;文件系统存储结构 和 监听通知机制。 文件系统存储结构 文件目录以 / …...