PCA-python实现综合评价求解-续

PCA-python实现综合评价求解-续

这个是接着前面写的一篇,链接在下面,数据集也有:
上一篇博客点击此处跳转

k是我们选择的主成分数量,我们最终会根据该主成分数量,得到我们的评价指标,我加入了写入功能可以将评价指标数据写入excel文件,完整代码如下:

import numpy as np



def pca_tre(Mat, k):
      p,n = np.shape(Mat) # shape of Mat
      t = np.mean(Mat, 0) # mean of each column
  
      # substract the mean of each column
      for i in range(p):
        for j in range(n):
          Mat[i,j] = float(Mat[i,j]-t[j])
      
      # covariance Matrix
      cov_Mat = np.dot(Mat.T, Mat)/(p-1)
  
      # PCA by original algorithm
      # eigvalues and eigenvectors of covariance Matrix with eigvalues descending
      U,V = np.linalg.eigh(cov_Mat) #U 是特征值
      index = np.argsort(-U) 
      if k > n:
            print("k must lower than feature number")
            return
      else:
            selectVec = np.matrix(V.T[index[:k]]) 
            finalData = Mat * selectVec.T 
      return finalData,U#主成分

import pandas as pd
data=pd.read_excel(r"C:\Users\gaoxi\Desktop\data.xlsx")
#print(data.iloc[:, 1:].values)
data=data.iloc[:, 1:].values
k=2
finalData,u=pca_tre(data,k)
sum=0
u.sort()
u=u[::-1]
u_sum=np.sum(u)
for i in range(2):
        sum=sum+u[i]/u_sum
print("sum : ",sum)

def score_get(finalData,u,k):
    u.sort()
    u=u[::-1]
   
    u_sum=np.sum(u)
  #  print(u_sum) 
    score=[]
    for i in range(len(u)):
        u[i]=u[i]/u_sum
    #print(u)
    
    for  i in range(len(finalData)):
      #  print(finalData[i])

        c = []
        for x in finalData[i].flat:
            c.append(x)
       
      #  print("score:",np.dot(u[:k],c))
        score.append(np.dot(u[:k],c))
    return score

score=score_get(finalData,u,k)

data=score

path="C:/Users/gaoxi/Desktop/"

#Excel数据
import xlwt
#生成xls工作薄
wb = xlwt.Workbook()


wb.add_sheet('first_sheet', cell_overwrite_ok=True)
wb.get_active_sheet()

ws_1 = wb.get_sheet(0)
print(data)


for c in range(len(data)):
         ws_1.write(c, 0, data[c])

wb.save(path + 'workbook.xls')
print(score)

如下是上述代码得到的评价指标数据:
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值