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