จะฉายจุดใหม่เป็นพื้นฐานใหม่โดยใช้แอตทริบิวต์ 'components_' ของ PCA จากแพ็คเกจ sklearn.decomposition ได้อย่างไร

ฉันมีจุดข้อมูลบางจุดที่มี 3 พิกัดและใช้ฟังก์ชัน PCA ฉันแปลงเป็นจุดที่มี 2 พิกัดโดยทำสิ่งนี้

import numpy as np
from sklearn.decomposition import PCA
X = np.array([[-1, -1, -3], [-2, -1, -1], [-3, -2, -2], [1, 1, 1], [2, 1, 5], [3, 2, 6]]) #data
pca = PCA(n_components=2)
pca.fit(X)
PCA(copy=True, n_components=2, whiten=False)
XT = pca.fit_transform(X)
print XT
#output obtained
#[[-4.04510516 -1.24556106]
#[-2.92607624  0.61239898]
#[-4.55000611  1.13825234]
#[ 0.81687144 -1.11632484]
#[ 4.5401931   0.56854397]
#[ 6.16412297  0.04269061]]

ฉันได้แกนหลักในพื้นที่คุณลักษณะ ซึ่งแสดงถึงทิศทางของความแปรปรวนสูงสุดในข้อมูลโดยใช้แอตทริบิวต์ 'components_'

W = (pca.components_)
print W
# output obtained
#[[ 0.49508794  0.3217835   0.80705843]
# [-0.67701709 -0.43930775  0.59047148]]

ตอนนี้ฉันต้องการฉายจุดแรก [-1, -1, -3] (ซึ่งเป็นจุดแรกใน X) ไปยังพื้นที่ย่อย 2D โดยใช้แอตทริบิวต์ 'components_' โดยทำสิ่งนี้

projectedXT_0 = np.dot(W,X[0])
print projectedXT_0
#output obtained
#[-3.23804673 -0.65508959]

#expected output
#[-4.04510516 -1.24556106] 

ฉันไม่ได้รับสิ่งที่คาดหวัง แน่นอนว่าฉันกำลังทำอะไรผิดขณะคำนวณ projectedPoint โดยใช้แอตทริบิวต์ 'components_' กรุณาสาธิตการใช้แอตทริบิวต์ 'components_' เพื่อรับการฉายภาพจุด

หมายเหตุ: ฉันรู้ว่าฟังก์ชัน 'เปลี่ยน' ทำเช่นนี้ แต่ฉันต้องการใช้แอตทริบิวต์ 'components_'


person Ashwin D V    schedule 30.12.2015    source แหล่งที่มา


คำตอบ (1)


คุณลืมลบค่าเฉลี่ย

ดูแหล่งที่มาของ การแปลง pca:

if self.mean_ is not None:
    X = X - self.mean_
X_transformed = fast_dot(X, self.components_.T)
if self.whiten:
    X_transformed /= np.sqrt(self.explained_variance_)
return X_transformed
person lejlot    schedule 30.12.2015