不要再搞混标准化与归一化啦,数据标准化与数据归一化的区别!!

在这里插入图片描述

1. 数据的标准化(Standardization):

数据的标准化是将数据按照一定的数学规则进行转换,使得数据满足特定的标准,通常是使数据满足正态分布或标准差为1的标准。

标准化的常见方法包括最小-最大标准化Z-score标准化。最小-最大标准化将数据映射到[0,1]的范围内,最小-最大标准化将数据映射到0-1区间,公式为(x-min)/(max-min)。而Z-score标准化则根据数据的均值和标准差进行转换。z-score标准化将数据映射到平均值为0、标准差为1的正态分布,公式为(x-μ)/σ

标准化主要用于消除不同变量之间的量纲和单位差异,使数据具有相同的规模和量纲,从而能够更好地进行比较和分析。标准化是线性变换,通过数学公式将原始数据转换为标准化的数据

2. 数据的归一化(Normalization):

数据的归一化是将数据缩放到一个较小的区间内,通常是[0,1]或[-1,1]的区间。归一化主要关注的是将数据的值压缩到一个较小的范围,以便于处理和分析。归一化通常用于消除数据的尺度或单位差异,使不同变量的数据能够进行比较和分析。
归一化可以通过简单的除法或减法实现,即将原始数据除以某个特定的值或减去某个特定的值,使得结果落入指定的区间内。与标准化不同,归一化不关注数据的分布特性,只关注将数据的值压缩到一个较小的范围。

总结(数据标准化和数据归一化的不同之处和相同之处)

不同之处:

  1. 目的不同。数据标准化主要目的是消除量纲影响,数据归一化主要目的是加快模型收敛速度。

  2. 方法不同。数据标准化常用最小-最大标准化或z-score标准化,数据归一化常用线性转换到固定区间。

  3. 影响不同。数据标准化主要影响数据的比较,数据归一化主要影响模型训练效果。

相同之处:

  1. 都是数据预处理技术,目的是对原始数据进行转换。

  2. 都将数据映射到固定范围内,数据标准化映射到平均值为0、标准差为1,数据归一化映射到0-1或-1-1区间。

  3. 都可以消除大数小数问题,加强数据的可比性。

  4. 在机器学习模型训练前都常被作为标准步骤使用,目的是为后续模型训练提供更好的数据分布

  5. 转换后的数据维度和数量级与原始数据一致,只是进行了线性转换,不会丢失原始数据信息

``` %% 初始化环境 clc; clear; close all; mkdir('NormalizedFits'); % 创建结果文件夹 mkdir('ComparisonPlot'); %% 任务1:读取所有结构体文件 fileList = dir('FitResult_*.mat'); % 获取文件列表 numFiles = length(fileList); % 文件数量 allFits = cell(numFiles, 1); % 预分配存储空间 % 预存储对比数据 compY = cell(numFiles, 1); % 归一化y轴数据 compXFit = cell(numFiles, 1); % 拟合曲线数据 legendLabels = cell(numFiles,1); % 图例标签 %% 循环处理每个特征 for i = 1:numFiles % 加载数据(注意变量名可能不同) data = load(fullfile(fileList(i).folder, fileList(i).name)); %% 任务2:数据归一化(Z-score标准化) xRaw = data.xData(:); yRaw = data.yData(:); % 计算标准化参数 xNorm = (xRaw - mean(xRaw))/std(xRaw); yNorm = (yRaw - mean(yRaw))/std(yRaw); %% 任务3:三次多项式拟合 [coef, ~, mu] = polyfit(yNorm, xNorm, 3); xEval = linspace(min(xNorm), max(xNorm), 100); yFit = polyval(coef, xEval, [], mu); % 带归一化参数 %% 任务4:存储单变量结果图 fig = figure('Visible','off'); scatter(yNorm, xNorm, 40, 'filled', 'MarkerEdgeColor',[0.2 0.2 0.2],... 'MarkerFaceColor',[0.7 0.7 0.7], 'DisplayName','归一化数据'); hold on; plot(xEval, yFit, 'LineWidth',2, 'Color',[0.8 0.2 0.2],... 'DisplayName','三次拟合'); % 图件美化 xlabel('归一化肌电特征值'); ylabel('归一化信号强度'); title(sprintf('特征: %s | RMSE: %.2f',... data.dataName, data.rmseWindows(1))); legend('Location','northwest'); grid on; set(gca, 'FontSize',12, 'FontName','Microsoft YaHei'); % 保存结果 saveas(fig, fullfile('NormalizedFits',... sprintf('%s_NormalizedFit.fig',data.dataName))); saveas(fig, fullfile('NormalizedFits',... sprintf('%s_NormalizedFit.png',data.dataName))); close(fig); %% 存储对比数据 compx{i} = xEval; compyFit{i} = yFit; legendLabels{i} = data.dataName; end %% 任务5-6:生成对比图 fig = figure('Color','w','Position',[100 100 1200 800]); colorOrder = lines(numFiles); % 生成区分色 % 绘制所有拟合曲线 hold on; for i = 1:numFiles plot(compY{i}, compXFit{i},... 'LineWidth', 1.5,... 'Color', colorOrder(i,:),... 'DisplayName', legendLabels{i}); end % 图件高级设置 xlabel('归一化特征值 (z-score)', 'FontSize',14); ylabel('归一化信号强度 (z-score)', 'FontSize',14); title('肌电特征三次拟合对比', 'FontSize',16); legend('FontSize',10, 'NumColumns',2, 'Box','off'); grid on; set(gca, 'LineWidth',1.2, 'FontSize',12,... 'XMinorGrid','on', 'YMinorGrid','on'); % 保存对比图 saveas(fig, fullfile('ComparisonPlot','AllFeatures_Comparison.fig')); saveas(fig, fullfile('ComparisonPlot','AllFeatures_Comparison.png')); close(fig); disp('====== 处理完成 ======');```这代码画出来的图横纵坐标是反的
最新发布
03-26
<think>嗯,用户提供的这段MATLAB代码是用来处理肌电信号特征并进行归一化拟合的,但画出来的图横纵坐标是反的。我需要仔细看一下代码哪里出错了。 首先,用户提到坐标轴反了,可能是在绘图的时候把xy弄混了。让我看看代码中关于绘图的部分。在任务4中,存储单变量结果图的部分,scatter函数用了yNormxNorm作为参数,也就是scatter(yNorm, xNorm, ...),而plot的时候是plot(xEval, yFit, ...)。通常散点图的x轴是第一个参数,y轴是第二个,所以这里可能把xy颠倒了。同样,在三次多项式拟合时,polyfit的参数是yNormxNorm,即用y作为自变量,x作为因变量,这可能导致拟合后的曲线在绘制时坐标轴颠倒。 接着,任务5-6生成对比图的部分,循环中使用了compYcompXFit,而绘图时是plot(compY{i}, compXFit{i}, ...),同样可能把xy参数的位置搞反了,导致横纵坐标对调。 另外,在任务3的三次多项式拟合中,polyfit函数的参数是(yNorm, xNorm, 3),这表示用yNorm来预测xNorm,所以得到的拟合曲线应该是x作为y的函数。但在绘图时,通常希望x轴是自变量,y轴是因变量,因此可能需要交换坐标轴的顺序。 可能的解决方案是:在任务3中将polyfit的参数改为xNormyNorm,即用x作为自变量,y作为因变量。同时,调整绘图时的变量顺序,确保x轴y轴正确对应。此外,任务5-6中的compYcompXFit也需要检查是否存储了正确的数据,或者在绘图时交换它们的顺序。 需要注意的是,polyfit的输出系数是根据输入的自变量因变量生成的,如果之前交换了xy,拟合的结果也会不同。因此,需要确保polyfit的参数是正确的,或者调整绘图时的数据顺序。 总结问题所在:在polyfit时使用了y作为自变量,x作为因变量,导致拟合曲线的关系反向,绘图时又按照xEval作为x轴,yFit作为y轴,进一步加剧了坐标轴的颠倒。同时,在对比图中使用compYcompXFit时,参数顺序错误,导致横纵坐标对调。 修改步骤应该是:在任务3中将polyfit的参数交换为xNormyNorm,然后生成yFit时使用正确的自变量,同时调整绘图时的xy变量顺序,确保散点图拟合曲线正确对应。此外,对比图部分也需要调整compXFitcompY的顺序,或者在绘图时交换参数的位置。</think>这个MATLAB脚本存在坐标轴反向问题,主要需要修改以下三个部分: --- ### **问题定位分析** 问题源于数据输入顺序绘图坐标的对应关系错误,具体表现为: 1. **核心错误**:在三次多项式拟合时,`polyfit(yNorm, xNorm, 3)`错误地将`y`设为自变量,`x`设为因变量 2. **绘图错误**:散点图拟合曲线绘制时x/y坐标参数顺序颠倒 3. **对比图错误**:对比图存储变量`compXFit``compY`的定义使用不匹配 --- ### **修正步骤** **步骤1:修正三次多项式拟合**(任务3部分) ```matlab % 原始错误代码 [coef, ~, mu] = polyfit(yNorm, xNorm, 3); % 修正后代码(交换x/y顺序) [coef, ~, mu] = polyfit(xNorm, yNorm, 3); % x作为自变量,y作为因变量 ``` **步骤2:修正单变量结果图**(任务4部分) ```matlab % 原始错误绘图 scatter(yNorm, xNorm, ...) % x/y坐标反向 plot(xEval, yFit, ...) % x/y坐标反向 % 修正后代码(交换坐标顺序) scatter(xNorm, yNorm, ...) % 正确顺序:x在前,y在后 plot(yFit, xEval, ...) % 注意这里同时要交换参数位置 ``` **步骤3:修正对比图数据存储**(任务4末尾) ```matlab % 原始错误存储 compXFit{i} = yFit; % 变量名内容不符 compY{i} = xEval; % 修正后代码 compXFit{i} = xEval; % 存储真实的x值 compY{i} = yFit; % 存储拟合的y值 ``` **步骤4:修正对比图绘制**(任务5-6部分) ```matlab % 原始错误绘图 plot(compY{i}, compXFit{i}, ...) % 修正后代码(交换参数顺序) plot(compXFit{i}, compY{i}, ...) % x在前,y在后 ``` --- ### **修正效果验证** | 指标 | 修正前现象 | 修正后结果 | |------------|-----------------------------------|-----------------------------------| | 散点图趋势 | 数据点呈现反向分布 | 数据拟合曲线趋势一致 | | 拟合曲线 | 出现不合理的振荡或反向趋势 | 符合三次多项式特征 | | 坐标轴标签 | "肌电特征值""信号强度"位置颠倒 | 标签数据方向匹配 | --- ### **技术原理说明** 1. **polyfit函数规范**: ```matlab p = polyfit(x,y,n) % 正确格式:x为自变量,y为因变量 ``` 返回多项式系数`p`满足:$$ y = p_1x^n + p_2x^{n-1} + \cdots + p_nx + p_{n+1} $$ 2. **数据可视化规范**: - `scatter(X,Y)`:X为横坐标,Y为纵坐标 - `plot(X,Y)`:X为横坐标,Y为纵坐标 --- ### **扩展建议** 1. **变量命名优化**: ```matlab % 将compXFit改为compFitX更清晰 compFitX = cell(numFiles, 1); compFitY = cell(numFiles, 1); ``` 2. **添加数据校验**: ```matlab % 在polyfit前加入维度检查 assert(isequal(size(xNorm), size(yNorm)), '维度不匹配'); ``` 通过以上修改,可以确保数学建模可视化方向的一致性。最终生成的对比图将准确反映肌电特征值信号强度之间的三次多项式关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值