基本统计量是描述数据分布、集中趋势和离散程度的指标,通常用于对张量(或矩阵、向量等)中的元素进行整体性描述。
一、基本统计量
一、均值
.mean()
方法用于计算张量中所有元素的均值。它有两种形式一种是torch.mean(tensor,其他参数)
,另一种是tensor.mean(其他参数)
下面是一些详细解释:
-
计算方法:
- 对于给定的张量,
.mean()
方法将所有元素相加,然后除以张量中元素的总数量,从而得到均值。 - 公式表示为:均值 = 总和 / 元素数量。
- 对于给定的张量,
-
参数:
dim
:指定沿着哪个维度计算均值。**默认情况下,计算整个张量的均值。**需要注意理解这里沿着的含义,即沿着这个维度加起来,比如二维,沿着行的维度,则可以算每一列的均值。dtype
:指定输出的数据类型,指定的类型必须与默认类型兼容。默认情况下,输出数据类型与输入的数据类型相同。
-
数据类型要求:
- 输入张量的数据类型必须是浮点型(floating point)或复数型(complex),否则会引发错误。
-
返回值:
- 返回一个包含均值的张量。
-
示例:
import torch
# 创建一个张量
x = torch.tensor([1, 2, 3, 4, 5, 6])
# 计算张量中所有元素的均值
mean_value = torch.mean(x.float()) # 将张量转换为浮点型,然后计算均值
#等价于mean_value=x.float().mean()
print(mean_value) # 输出均值
x=torch.tensor([[1,2,2],[4,5,6]])
mean_value = torch.mean(x.float())
print(mean_value) # 输出均值
mean_value = torch.mean(x.float(),dim=1)
print(mean_value) # 输出均值
- 输出:
tensor(3.5000) tensor(3.3333) tensor([1.6667, 5.0000])
二、方差
.var()
方法用于计算张量中所有元素的方差。与均值一样,有两种形式。下面是一些详细解释:
-
计算方法:
- 对于给定的张量,
.var()
方法首先计算所有元素的均值,然后计算每个元素与均值之差的平方,并求这些平方值的平均值,从而得到方差。 - 公式表示为:方差 = 平方差的平均值。
- 对于给定的张量,
-
参数:
dim
:指定沿着哪个维度计算方差。默认情况下,计算整个张量的方差。unbiased
:一个布尔值,指定是否使用无偏估计计算方差。默认为False
,表示使用有偏估计(即除以元素数量);如果设置为True
,则使用无偏估计(即除以元素数量减一)。
-
数据类型要求:
- 输入张量的数据类型必须是浮点型(floating point)或复数型(complex),否则会引发错误。
-
返回值:
- 返回一个包含方差的张量。
下面是一个示例,演示了如何使用 .var()
方法计算张量中所有元素的方差:
import torch
# 创建一个张量
x = torch.tensor([1, 2, 3, 4, 5, 6])
# 计算张量中所有元素的方差
variance_value = torch.var(x.float()) # 将张量转换为浮点型,然后计算方差
print(variance_value) # 输出方差
- 输出:
tensor(3.5000)
三、标准差
.std()
方法用于计算张量中所有元素的标准差。类似的,有两种形式。下面是一些详细解释:
-
计算方法:
- 对于给定的张量,
.std()
方法首先计算所有元素的方差,然后取方差的平方根,从而得到标准差。 - 公式表示为:标准差 = 方差的平方根。
- 对于给定的张量,
-
参数:
dim
:指定沿着哪个维度计算标准差。默认情况下,计算整个张量的标准差。unbiased
:一个布尔值,指定是否使用无偏估计计算标准差。默认为False
,表示使用有偏估计(即除以元素数量);如果设置为True
,则使用无偏估计(即除以元素数量减一)。
-
数据类型要求:
- 输入张量的数据类型必须是浮点型(floating point)或复数型(complex),否则会引发错误。
-
返回值:
- 返回一个包含标准差的张量。
下面是一个示例,演示了如何使用 .std()
方法计算张量中所有元素的标准差:
import torch
# 创建一个张量
x = torch.tensor([1, 2, 3, 4, 5, 6])
# 计算张量中所有元素的标准差
std_value = torch.std(x.float()) # 将张量转换为浮点型,然后计算标准差
print(std_value) # 输出标准差
- 输出:
tensor(1.8708)
四、最大值
.max()
方法用于找到张量中的最大值,并返回该最大值,如果包含dim
参数并将返回对应的索引。类似的,有两种形式。下面是一些详细解释:
-
返回值:
- 如果没有指定任何参数,
.max()
方法将返回张量中的最大值。 - 如果指定了
dim
参数,则返回沿着指定维度的最大值及其索引。返回的结果是一个元组,包含两个张量:- 第一个张量是沿着指定维度的最大值。
- 第二个张量是沿着指定维度的最大值对应的索引。
- 如果没有指定任何参数,
-
参数:
dim
:指定沿着哪个维度查找最大值。默认情况下,查找整个张量中的最大值。keepdim
:一个布尔值,与dim
一同使用,指定是否保持返回的张量具有与输入张量相同的维度数。默认为False
。
-
返回值的数据类型:
- 返回的最大值和索引张量的数据类型与输入张量相同。
4.示例:
import torch
# 创建一个张量
x = torch.tensor([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 查找整个张量中的最大值及其索引
max_value= x.max()
print("整个张量中的最大值:", max_value)
# 沿着指定维度查找最大值及其索引
max_value_dim0, max_index_dim0 = x.max(dim=0)
print("沿着维度0的最大值:", max_value_dim0)
print("沿着维度0的最大值索引:", max_index_dim0)
- 输出:
整个张量中的最大值: tensor(9) 沿着维度0的最大值: tensor([7, 8, 9]) 沿着维度0的最大值索引: tensor([2, 2, 2])
五、最小值
.min()
方法用于找到张量中的最小值,并返回该最小值及其对应的索引。类似的,有两种形式。它与.max
的使用类似,因此不再赘述。
二、相关性统计量
相关性统计量在数据分析和机器学习中非常重要,它们帮助我们理解不同维度之间的关系。以下是常见的相关性统计量:
-
相关系数(Correlation Coefficient):
- 相关系数用于衡量两个变量之间的线性相关程度。
- 常见的相关系数包括:
- Pearson 相关系数:衡量两个变量之间的线性关系强度和方向。取值范围在 -1 到 1 之间,其中 1 表示完全正相关,-1 表示完全负相关,0 表示无相关性。
- Spearman 相关系数:衡量两个变量之间的单调关系的强度和方向。与 Pearson 相关系数不同,它不要求变量之间的关系是线性的。
- Kendall 相关系数:衡量两个变量之间的等级关系的强度和方向。它衡量的是变量之间的秩次关系,而不是原始值的关系。
-
协方差(Covariance):
- 协方差用于衡量两个随机变量的总体相关性。
- 当协方差为正时,表示两个变量的变化趋势是一致的;当协方差为负时,表示两个变量的变化趋势是相反的;当协方差接近于零时,表示两个变量之间没有线性关系。
- 协方差的值大小与变量的单位相关,因此不易直观比较不同数据集之间的相关性。
一、皮尔逊相关系数
PyTorch 中的 torch.corrcoef()
函数计算的是皮尔逊相关系数矩阵。
import torch
X = torch.tensor([[1, 2, 3], [4, 5, 6]])
Y = torch.tensor([[2, 4, 6], [1, 3, 5]])
corr_XY = torch.corrcoef(X, Y)
print(corr_XY)
import torch
# 创建一个二维张量
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
# 计算皮尔逊相关系数矩阵
corr_matrix = torch.corrcoef(x)
print(corr_matrix)
二、协方差
import torch
X = torch.tensor([[1, 2, 3], [4, 5, 6]])
Y = torch.tensor([[2, 4, 6], [1, 3, 5]])
cov_XY = torch.cov(X, Y)
print(cov_XY)
三、累计统计量
一、张量的和
import torch
tensor = torch.tensor([1, 2, 3, 4, 5])
sum_value = torch.sum(tensor)
print(sum_value)
- 输出:
tensor(15)
二、张量的累积和
import torch
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
cumsum_value = torch.cumsum(x, dim=0)#貌似一定得指定
print(cumsum_value)
# import torch
#
# x = torch.tensor([1, 2, 3])
# cumsum_value = torch.cumsum(x, dim=0)
# print(cumsum_value)
- 输出:
tensor([[1, 2, 3], [5, 7, 9]])
三、张量的乘积
import torch
tensor = torch.tensor([1, 2, 3, 4, 5])
prod_value = torch.prod(tensor)
print(prod_value)
- 输出:
tensor(120)
四、张量的累积乘积
import torch
x = torch.tensor([[1, 2, 3],
[4, 5, 6]])
cumprod_value = torch.cumprod(x, dim=0)#貌似一定得指定
print(cumprod_value)
- 输出:
tensor([[ 1, 2, 3], [ 4, 10, 18]])