前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >6.数据分析(1) --描述性统计量和线性回归(1)

6.数据分析(1) --描述性统计量和线性回归(1)

作者头像
用户9925864
发布2022-07-27 08:11:30
6410
发布2022-07-27 08:11:30
举报
文章被收录于专栏:算法工程师的学习日志

上一篇文章分析了信号的处理相关内容,参见:

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 矩阵的第二个维度 - 列。

线性回归下次写吧,今天先到这儿

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法工程师的学习日志 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档