上一篇文章分析了信号的处理相关内容,参见:
5.信号处理(1) --常用信号平滑去噪的方法
在针对非物理信号分析的时候,例如用户数、用户经常出入的地点、疾病感染人数等,这部分涉及到数据分析知识,本文分享一下Matlab常用的描述性统计量函数和线性回归的基本应用。
1、Matlab常用描述性统计量
函数 | 说明 |
---|---|
max | 最大值 |
mean | 平均值或均值 |
median | 中位数值 |
min | 最小值 |
mode | 出现次数最多的值,也就是常说的众数 |
std | 标准差 |
var | 方差,用于度量值的分散程度 |
1.1、计算最大值、均值和标准差
使用 MATLAB 函数计算一个 24×3 矩阵(称为 count)的描述性统计量。MATLAB 为矩阵中的每列独立计算这些统计信息。
代码语言:javascript复制a = rand(24,3)
max_a = max(a)
miu_a = mean(a)
middle_a = median(a)
sigma_a = std(a)
min_a = min(a)
mod_a = mode(a)
var_a = var(a)
max_a =
0.978680649641159 0.984063724379154 0.999080394761361
miu_a =
0.492415490012177 0.428215549166278 0.528270961924493
middle_a =
0.509533283332691 0.395097786468656 0.554535346962252
sigma_a =
0.304479616155163 0.293605537051363 0.307838082022735
min_a =
0.0286741524641061 0.015487125636019 0.032600820530528
mod_a =
0.0286741524641061 0.015487125636019 0.032600820530528
var_a =
0.0927078366539956 0.0862042113872195 0.094764284743436
要获取每个数据列中最大数据值所在的行号,请指定另一个输出参数 index 以返回行索引。例如:
代码语言:javascript复制[mx,index] = max(a)
这些结果是
代码语言:javascript复制mx =
0.978680649641159 0.984063724379154 0.999080394761361
index =
4 17 18
此处,变量 mx 是行向量,它包含三个数据列中每个列中的最大值。变量 index 包含每列中对应于最大值的行索引。
要找到整个 a 矩阵中的最小值,请使用语法 a(:) 将 24×3 矩阵转换为 72×1 列向量。然后,要找到该单一列中的最小值,请使用以下语法:
min(count(:))
代码语言:javascript复制>> min(a(:))
ans =
0.015487125636019
%% 第二种方法:多次求最小值
>> min(min(a))
ans =
0.015487125636019
1.2、减去均值
在信号处理的时候,由于系统的随机误差,一般都会进行进行均值操作,从数据中减去均值也称为去除线性趋势。
代码语言:javascript复制% 获取矩阵的行数和列数
[n,p] = size(a)
% 计算每列的均值
mu = mean(a)
% 生成一个列均值的矩阵,维度同a矩阵
MeanMat = repmat(mu,n,1)
% 减去均值
x = a - MeanMat
2、不一致的数据处理
数据分析的时候,数据难免有异常值需要提出,比如NULL、NaN等,还有些点显著偏离了其他数据。在某些情况下,可合理地将这些点视为离群值,即与其余数据不一致的数据值。
以下示例说明如何从 24×3 矩阵 a 中的三个数据集中移除离群值。这儿离群值定义为偏离均值超过三倍标准差的值。
注:除非你确信数据类型,否则请谨慎对待数据更改。去除离群值对标准差的影响大于对数据均值的影响。删除一个离群值点会导致新标准差变小,从而可能导致其余一些点似乎又成为离群值!
代码语言:javascript复制a = rand(24,3)
a(2,3) = 4.5;a(20,2) = -2.5; % 人为添加离群值
miu_a = mean(a)
sigma_a = std(a)
命令行窗口显示
代码语言:javascript复制miu_a =
0.45491979740325 0.401454279964542 0.64909778183130
sigma_a =
0.256407192970791 0.702637696845351 0.872813153493999
将偏离均值三倍标准差以上的值视为离群值时,请使用以下语法确定 count 矩阵的每列中的离群值数量:
代码语言:javascript复制[n,p] = size(a);
MeanMat = repmat(miu_a,n,1);
SigmaMat = repmat(sigma_a,n,1);
outliers = abs(a - MeanMat) > 3*SigmaMat;
nout = sum(outliers)
该过程返回每列中的离群值数量,如下:
代码语言:javascript复制nout = 0 1 1
在 a 的第二和第三个数据列中各有一个离群值,其他的列中都没有。
要删除包含该离群值的整行数据,请键入
代码语言:javascript复制a(any(outliers,2),:) = [];
此处,当 outliers 向量中有任何非零元素时,any(outliers,2) 返回 1。参数 2 指定 any 继续处理 count 矩阵的第二个维度 - 列。
线性回归下次写吧,今天先到这儿