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 我发现 103.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)

来修复它