np.mean 给出错误的值? PCA-机器学习
np.mean giving wrong value? PCA-Machine learning
我有一个数据集,其中的第一行是 [[10, 9, 1, 7, 5, 3]..
,我数据集中的行数是 14
。
我在今天的课上注意到,老师为 PCA standardization
数据集中的每一行(如下面的前两张照片所示)声明了一个平均值,并从中减去原始数据 own row's mean value
。所以我声明了一个 c = data-data.mean()
变量,我希望第一行的平均值为 (10+9+1+7+5+3) / 6 = 5.8
并且第一个索引 (10)
的 c 为 (10 - 5.8) = 4.2
,但是当我打印 c 我发现 10
是 3.01190476
,但是,当我打印出平均值时,我发现它不是每一行,而是只有 1 个数字,即 6.988095238095238
.
我的代码:
dataset = pd.read_csv("cands_dataset.csv")
x = dataset.iloc[:, 1:].values
m = x.mean(dtype=np.float64);
print("x:",x) #########################
print("-------------------")
print("mean:",m) #########################
print("-------------------")
c = x - m
print("c:",c)
我的输出:
x: [[10 9 1 7 5 3]
[10 8 10 8 8 10]
[ 4 6 8 9 8 9]
[ 9 9 6 6 8 7]
[ 4 9 10 9 5 5]
[ 7 6 9 9 10 10]
[10 9 6 6 8 7]
[ 5 4 2 10 9 1]
[ 4 10 4 9 2 6]
[ 8 7 7 7 7 9]
[ 5 5 6 6 9 1]
[ 9 10 1 9 5 6]
[ 7 6 6 6 10 4]
[10 9 9 7 9 4]]
-------------------
mean: 6.988095238095238
-------------------
c: [[ 3.01190476 2.01190476 -5.98809524 0.01190476 -1.98809524 -3.98809524]
[ 3.01190476 1.01190476 3.01190476 1.01190476 1.01190476 3.01190476]
[-2.98809524 -0.98809524 1.01190476 2.01190476 1.01190476 2.01190476]
[ 2.01190476 2.01190476 -0.98809524 -0.98809524 1.01190476 0.01190476]
[-2.98809524 2.01190476 3.01190476 2.01190476 -1.98809524 -1.98809524]
[ 0.01190476 -0.98809524 2.01190476 2.01190476 3.01190476 3.01190476]
[ 3.01190476 2.01190476 -0.98809524 -0.98809524 1.01190476 0.01190476]
[-1.98809524 -2.98809524 -4.98809524 3.01190476 2.01190476 -5.98809524]
[-2.98809524 3.01190476 -2.98809524 2.01190476 -4.98809524 -0.98809524]
[ 1.01190476 0.01190476 0.01190476 0.01190476 0.01190476 2.01190476]
[-1.98809524 -1.98809524 -0.98809524 -0.98809524 2.01190476 -5.98809524]
[ 2.01190476 3.01190476 -5.98809524 2.01190476 -1.98809524 -0.98809524]
[ 0.01190476 -0.98809524 -0.98809524 -0.98809524 3.01190476 -2.98809524]
[ 3.01190476 2.01190476 2.01190476 0.01190476 2.01190476 -2.98809524]]
[42.28320829299149, 23.69899197734102, 18.64255211766758, 1.1547255972677037, 5.346968081158593, 8.873553933573632]
[35.09506288 19.67016334 15.47331826 0.95842225 4.43798351 7.36504976]
老师们介绍了他是如何做到的:
第二张幻灯片:
我的数据集(以备不时之需):
我对幻灯片的理解有误吗?或者发生了什么事?
我认为当您使用 .iloc 对原始数据集进行子集化时,您选择了第 1 列之后的所有行和所有列,这就是为什么 x 中包含所有行值的原因。
如果你想要每个平均值加上逐行的差异,请试试这个代码:
for i in range(0,len(practice)):
x = practice.iloc[i, 1: ].values
m = x.mean(dtype=np.float64);
print("x:",x) #########################
print("-------------------")
print("mean:",m) #########################
print("-------------------")
c = x - m
print("c:",c)
print('')
通过将此 m = x.mean()
的代码更改为 m = x.mean(axis=1)
来修复它
我有一个数据集,其中的第一行是 [[10, 9, 1, 7, 5, 3]..
,我数据集中的行数是 14
。
我在今天的课上注意到,老师为 PCA standardization
数据集中的每一行(如下面的前两张照片所示)声明了一个平均值,并从中减去原始数据 own row's mean value
。所以我声明了一个 c = data-data.mean()
变量,我希望第一行的平均值为 (10+9+1+7+5+3) / 6 = 5.8
并且第一个索引 (10)
的 c 为 (10 - 5.8) = 4.2
,但是当我打印 c 我发现 10
是 3.01190476
,但是,当我打印出平均值时,我发现它不是每一行,而是只有 1 个数字,即 6.988095238095238
.
我的代码:
dataset = pd.read_csv("cands_dataset.csv")
x = dataset.iloc[:, 1:].values
m = x.mean(dtype=np.float64);
print("x:",x) #########################
print("-------------------")
print("mean:",m) #########################
print("-------------------")
c = x - m
print("c:",c)
我的输出:
x: [[10 9 1 7 5 3]
[10 8 10 8 8 10]
[ 4 6 8 9 8 9]
[ 9 9 6 6 8 7]
[ 4 9 10 9 5 5]
[ 7 6 9 9 10 10]
[10 9 6 6 8 7]
[ 5 4 2 10 9 1]
[ 4 10 4 9 2 6]
[ 8 7 7 7 7 9]
[ 5 5 6 6 9 1]
[ 9 10 1 9 5 6]
[ 7 6 6 6 10 4]
[10 9 9 7 9 4]]
-------------------
mean: 6.988095238095238
-------------------
c: [[ 3.01190476 2.01190476 -5.98809524 0.01190476 -1.98809524 -3.98809524]
[ 3.01190476 1.01190476 3.01190476 1.01190476 1.01190476 3.01190476]
[-2.98809524 -0.98809524 1.01190476 2.01190476 1.01190476 2.01190476]
[ 2.01190476 2.01190476 -0.98809524 -0.98809524 1.01190476 0.01190476]
[-2.98809524 2.01190476 3.01190476 2.01190476 -1.98809524 -1.98809524]
[ 0.01190476 -0.98809524 2.01190476 2.01190476 3.01190476 3.01190476]
[ 3.01190476 2.01190476 -0.98809524 -0.98809524 1.01190476 0.01190476]
[-1.98809524 -2.98809524 -4.98809524 3.01190476 2.01190476 -5.98809524]
[-2.98809524 3.01190476 -2.98809524 2.01190476 -4.98809524 -0.98809524]
[ 1.01190476 0.01190476 0.01190476 0.01190476 0.01190476 2.01190476]
[-1.98809524 -1.98809524 -0.98809524 -0.98809524 2.01190476 -5.98809524]
[ 2.01190476 3.01190476 -5.98809524 2.01190476 -1.98809524 -0.98809524]
[ 0.01190476 -0.98809524 -0.98809524 -0.98809524 3.01190476 -2.98809524]
[ 3.01190476 2.01190476 2.01190476 0.01190476 2.01190476 -2.98809524]]
[42.28320829299149, 23.69899197734102, 18.64255211766758, 1.1547255972677037, 5.346968081158593, 8.873553933573632]
[35.09506288 19.67016334 15.47331826 0.95842225 4.43798351 7.36504976]
老师们介绍了他是如何做到的:
我的数据集(以备不时之需):
我对幻灯片的理解有误吗?或者发生了什么事?
我认为当您使用 .iloc 对原始数据集进行子集化时,您选择了第 1 列之后的所有行和所有列,这就是为什么 x 中包含所有行值的原因。
如果你想要每个平均值加上逐行的差异,请试试这个代码:
for i in range(0,len(practice)):
x = practice.iloc[i, 1: ].values
m = x.mean(dtype=np.float64);
print("x:",x) #########################
print("-------------------")
print("mean:",m) #########################
print("-------------------")
c = x - m
print("c:",c)
print('')
通过将此 m = x.mean()
的代码更改为 m = x.mean(axis=1)