數據降維
阿新 • • 發佈:2018-11-17
cor size mea 不常用 大於 play 特征向量 分數 sum
數據降維
分類
- PCA(主成分分析降維)
- 相關系數降維
PCA 降維(不常用)
實現思路
- 對數據進行標準化
- 計算出數據的相關系數矩陣(是方陣, 維度是nxn, n是特征的數量)
- 計算出相關系數矩陣的特征值和特征向量(雖然這裏說的是向量, 但是是矩陣, 這個矩陣的每一列都是特征值或者特征向量, 是nxn), 特征值是每一個特征的特征值的集合, 但是在特征向量是每一個特征的特征向量的集合, 前者我們提到的特征值和特征向量是集合
- 多特征值進行降序排序
- 根據已經得到的特征值計算出貢獻率和累計貢獻率(主要看累計貢獻率, 單單一個貢獻率指的是一個主成分保存的原始特征的信息, 累計貢獻率是總共保存的原始特征信息)
- 設置信息閾值T, 一般設置為0.9, 如果大於T, 則記錄下來當前的位置k(k也就是我們選擇的主成分的個數, 主成分就是特征, 也就是一列)
- 根據k選擇主成分對應的特征向量
- 將標準化之後的數據(矩陣)右乘在上一步中選擇出來的特征向量(在這一步得到的矩陣就是m x new_n維度的了), 得到的就是主成分的分數, 也就是降維之後的數據集合
偽代碼
X = load(‘data.xlsx‘, ‘B1:I11‘); m = size(X, 1); % m 表示樣本的數量 n = size(X, 2); % n 表示特征的數量 % 數據標準化 for i = 1:m SX(:, i) = (X(:, i) - mean(X(:, i))) / std(X(:, i)); end % 計算相關系數 CM = corrcoef(SX); % V 是特征向量, D 是特征值 [V D] = eig(CM); % 對D特征值進行降序排序, 將結果保存到DS的第一列 for i = 1:n DS(:, 1) = D(n + 1 - i, n + 1 - i); end % 計算貢獻率和累計貢獻率 for i = 1:n % 第二列為當前單個, 每一個, 主成分的貢獻率 DS(:, 2) = D(i, 1) / sum(D(:, 1)); % 第三列為到當前主成分的累計貢獻率 DS(:, 3) = sum(D(1:i, 1)) / sum(D(:, 1)); end % 選擇主成分 T = 0.9; for i = 1:n if DS(:, i) > T k = i; break; end end % 獲取主成分對應的特征向量 for i = 1:n PV(:, i) = DS(:, n + 1 - i); end % 獲取新的特征樣本 X_new = SX * PV;
相關系數降維
- 公式: \[r=\sum_{j=1}^{m}{{(x_{j}-\overline{x_{j}})({y_{j}-\overline{y_{j}}})}\over{std(x_{j})std(y_{j})}}\]
- 如果|r|在[0.7, 1]時表示強線性關系, 說明x和y有很緊密的線性關系
- 如果|r|在[0.5, 0.7]時表示中線性關系
- 如果|r|在[0.2, 0.5]時表示低線性關系
- 如果|r|在[0, 0.2]時表示沒有關系
- r > 0表示正相關, r < 0表示負關系
數據降維