求数据的前 n 个主成分

主成分分析在这里插入图片描述

在这里插入图片描述
第二主成分就是在新的数据上求第一主成分。

代码实现

首先,根据上节求出数据的第一主成分
下面求第二主成分

#%% 第二主成分

#X2 = np.empty(X.shape)
#for i in range(len(X)):
#    X2[i] = X[i] - X[i].dot(w) * w
X2 = X - X.dot(w).reshape(-1,1) * w   #此行可代替上面三行

plt.scatter(X2[:,0],X2[:,1])
plt.show()

在这里插入图片描述
图像与第一主成分垂直,得

w2 = first_component(X2,initial_w,eta)
array([-0.61256369,  0.79042124])

通过验证, 两个 w 点乘结果近似为 0 .

w.dot(w2)
4.839838137316033e-06

将求前 n 个主成分封装成函数:

def first_n_component(n,X,eta=0.01,n_iters=1e4,epsilon=1e-8):
    
    X_pca = X.copy()
    X_pca = demean(X_pca)
    res = []
    for i in range(n):
        initial_w = np.random.random(X_pca.shape[1])
        w = first_component(X_pca,initial_w,eta)
        res.append(w)
        
        X_pca = X_pca - X_pca.dot(w).reshape(-1,1) * w
    
    return res

例如,求前 2 个主成分

first_n_component(2,X)

结果:

first_n_component(2,X)
[array([0.78718057, 0.61672258]), array([-0.61672013,  0.7871825 ])]
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值