机器学习-主成分分析PCA-Python代码

知识点

机器学习-【7】降维PCA算法【手抄笔记】

运行效果

程序代码+数据集下载

主成分分析PCA+测试数据

程序

def pca(npArr, k, show = False):

    '''
    :param npArr: shape=(n_examples, n_features)
    :param k: to keep k components
    :param show: True to show figure about origData and reconData
    :return: LowNpArr, loss
    '''
    # Preprocessing
    
    n_examples = npArr.shape[0]
    n_features = npArr.shape[1]

    mean = np.zeros(n_features)
    std = np.zeros(n_features)

    StdMeanNpArr = np.zeros((n_examples, n_features))

    mean = np.average(npArr, axis=0).reshape(1,n_features)
    std = np.std(npArr, axis=0).reshape(1,n_features)
    StdMeanNpArr = (npArr - mean) / std

    # pca
    sigma = np.cov(StdMeanNpArr, rowvar=0)
    eigValue, eigVects = np.linalg.eig(sigma) # 获得协方差矩阵的特征值,特征向量
    eigValInd = np.argsort(eigValue) # 返回特征值从小到大排序的索引
    eigValInd = eigValInd[:-(k+1):-1] # 从后向前一共取k个值的索引
    redEigVects = eigVects[:,eigValInd] # 取出指定索引的特征向量
    LowNpArr = np.dot(StdMeanNpArr, redEigVects) # 原数据与选定的特征向量内积,得到降维数据
    reconNpArr = np.dot(LowNpArr, redEigVects.T) # 重构数据

    redEigValue = eigValue[eigValInd]
    loss = 1 - np.sum(redEigValue)/np.sum(eigValue) # 重构数据的损失程度

    if show:
        fig = plt.figure()
        ax = fig.add_subplot(111)
        ax.scatter(StdMeanNpArr[:, 0], StdMeanNpArr[:, 1], marker = '^', c='red')
        ax.scatter(reconNpArr[:,0],reconNpArr[:,1], marker='o', c='blue')
        plt.show()

    return LowNpArr, loss

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值