這是我在網上找到的代碼d0 = pd.read_csv('./mnist_train.csv')labels = d0.label.head(15000)data = d0.drop('label').head(15000)from sklearn.preprocessing import StandardScalerstandardized_data = StandardScaler().fit_transform(data)#find the co-variance matrix which is : (A^T * A)/nsample_data = standardized_data# matrix multiplication using numpycovar_matrix = np.matmul(sample_data.T , sample_data) / len(sample_data)相同數據相乘如何得到np.matmul(sample_data.T, sample_data)協方差矩陣?根據我在網上找到的本教程,協方差矩陣是什么?最后一步是我不明白的。
2 回答

揚帆大魚
TA貢獻1799條經驗 獲得超9個贊
對于數學或統計堆棧交換來說,這可能是一個更好的問題,但我現在會在這里回答。
這來自協方差的定義。維基百科頁面(鏈接)提供了很多細節,但協方差被定義為(在偽代碼中)
cov = E[dot((x - E[x]), (x - E[x]).T)]
對于列向量,但在您的情況下,您可能有行向量,這就是為什么點積中的第一個元素被轉置,而不是第二個元素的原因。所述E[...]
裝置預期值,這對于高斯分布的數據的平均值。當您執行 時StandardScaler().fit_transform(data)
,您基本上是在減去數據的平均值,所以這就是為什么您沒有在點積中明確這樣做的原因。
請注意,這StandardScaler()
也除以方差,因此它將所有內容歸一化為單位方差。這會影響你的協方差!因此,如果您需要未經歸一化的數據的實際協方差,只需使用類似np.cov()
numpy 模塊的東西來計算它。

慕勒3428872
TA貢獻1848條經驗 獲得超6個贊
讓我們一步一步地構建協方差矩陣,首先讓我們定義方差。
一些隨機變量 X 的方差衡量分布中的值相對于均值的平均變化程度。
現在我們必須定義協方差。協方差是兩個隨機變量聯合概率的度量。它描述了兩個變量如何一起變化。
所以現在你可以理解協方差矩陣是一個矩陣,它顯示了每個特征如何隨著其他特征的變化而變化。這可以計算為?
在那里你可以看到你對底部形成的等式感到困惑。如果您有任何進一步的疑問,請發表評論。
添加回答
舉報
0/150
提交
取消