python 實現PCA變換

2021-09-25 03:07:32 字數 1751 閱讀 5661

在機器學習中,指標不全面會無法保證模型的準確性,但指標太多又容易造成指標維度災難。主成分分析的主要思想

1) 進行特徵降維變換,不能完全地表示原有的物件,能量總會有損失。

2) 希望找到一種能量最為集中的變換方法使得損失最小

主成分分析就是試圖在力保資料資訊丟失最小的原則下,對這種多變數的資料進行最佳綜合簡化,也就是,對高維變數空間進行降維。

python **如下:

## original_data: 輸入待降維的資料(全部為數值型變數),返回該資料應該保留下來的成分維度數n

def cal_n(original_data):

mean_vals = original_data.mean()

# 計算每列的均值

mid = original_data - mean_vals

### step01 計算協方差矩陣

cov_mat = mid.cov()

### step02: 計算協方差矩陣的特徵值和特徵向量

eig_vals, eig_vectors = np.linalg.eig(cov_mat)

eig_vals = sorted(eig_vals, reverse = true)

## 把主成份含量總和 > 95%的成分留下來

sum_prop = sum(eig_vals)

n = 1

x_prop = 0

for i in range(len(eig_vals)):

x_prop += eig_vals[i]

prop = x_prop / sum_prop

if prop <= 0.95:

n += 1

else:

break

return n

該方法可以找到乙個n,使得降維後變換後留下原來95%的資訊量。接下來進行pca變換,**如下:

# 對資料進行pca變換處理

## data: 要進行處理的資料 ; n_compotents: 要留下的成分個數

## 定義pca變換

def chensqpca(data , n_compotents):

mean_vals = data.mean()

mid = data - mean_vals

### step01 計算協方差矩陣

cov_mat = mid.cov()

### step02: 計算協方差矩陣的特徵值和特徵向量

eig_vals, eig_vectors = np.linalg.eig(cov_mat)

#print(type(eig_vals))

### step03把特徵值按照從小到大的順序排列,並選取排在前面的n_components個特徵值所對應的特徵向量

eig_val_index = np.argsort(eig_vals)

#print(eig_val_index)

#n_compotents = 1

eig_val_index = eig_val_index[:-(n_compotents + 1): -1]

#print(eig_val_index)

eig_vectors = eig_vectors[:, eig_val_index]

# step04 將樣本投影到選取的特徵向量上

low_dim_mat = np.dot(mid, eig_vectors)

return low_dim_mat

python實現傅利葉變換和反變換

首先理解下傅利葉變換 如果還看不懂傅利葉變換,請掐死我吧!import numpy as np from math import x 1,2 3,4 5 傅利葉變換 deffft x x np.asarray x,dtype float n x.shape 0 n np.arange n k n.r...

使用python的numpy庫實現PCA演算法

usr bin env python coding utf 8 from numpy import 引數1 特徵值向量,引數2 比率 返回值 k 符合指定比率的topk k值 def setk eigvals,rate 0.9 eigvalind argsort eigvals 對特徵值進行排序 f...

python實現主成分分析(PCA)

前言 主成分分析主要是用於降維,減少樣本的特徵量,其核心思想是將樣本資料對映到最重要的方向,而最重要的方向就是方差最大的方向。關於主成分分析詳細的理論知識,請至我的這篇博文中檢視 一 pca的簡單實現示例 import numpy as np import matplotlib.pyplot as ...