PCA演算法的原理以及c 實現

2021-10-03 19:35:07 字數 1438 閱讀 1129

pca主成分分析,是模式識別中常見的特徵降維的演算法,其大體步驟可以分為以下幾個部分:

(1)原始特徵矩陣歸一化處理(假設m和樣本,每個樣本n個特徵,則對m*n的x資料,進行零均值化,即減去這一列的均值)

(2)求取歸一化處理後特徵矩陣的協方差矩陣

(3)計算協方差矩陣的特徵值及其對應的特徵向量

(4)將特徵向量按對應特徵值大小從上到下按行排列成矩陣,取前k行組成矩陣p;

(5)y=px即為降維到k維後的資料;

資料型別:(儲存到文字裡面即可讀取)

10 2

2.5 2.4

0.5 0.7

2.2 2.9

1.9 2.2

3.1 3.0

2.3 2.7

2.0 1.6

1.0 1.1

1.5 1.6

1.1 0.9

#include#include#include#include#include "eigen/dense"

using namespace std;

using namespace eigen;

void featurenormalize(matrixxd &x)

void computecov(matrixxd &x, matrixxd &c)

void computeeig(matrixxd &c, matrixxd &vec, matrixxd &val)

int computedim(matrixxd &val)

return val.rows() - dim;

}int main()

//pca

//零均值化

featurenormalize(x);

//計算協方差

computecov(x, c);

std::cout << "cov: \n" << c << std::endl;

//計算特徵值和特徵向量

computeeig(c, vec, val);

//計算損失率,確定降低維數

int dim = computedim(val);

std::cout << val << std::endl;

std::cout << vec << std::endl;

//計算結果

matrixxd res = x * vec.rightcols(n);

//輸出結果

fout << "the result is " << res.rows() << "x" << res.cols() << " after pca algorithm." << endl;

fout << res;

fout.close();

system("pause");

return 0;

}

參考:

排序演算法原理以及實現

1.第乙個元素開始,假設第乙個元素已排序 2.取下乙個元素temp val,在已排序的區間從後往前掃瞄,如果大於temp val,則往後移 3.直到小於的時候,將其後一位置為temp val即可 4.重複n 1次2 3步驟 三個引數目的是為了,排序某個區間 void insertion sort v...

冒泡原理以及c實現

主要講下冒泡 選擇 插入排序的原理以及c的 實現 其實我是不想寫的,因為大夫放學不走 首先說下這個氣泡排序,這個冒泡分為兩種,單冒泡和雙冒泡並行排序 其實這個雙冒泡我也是今天才知道這個老師一天就講一些有的沒的,我都跟不上 廢話不多說,開始吧 你要是覺得我廢話多那就不要看,反正我寫的我也不會看,錯了我...

pca演算法實現人臉識別

用matlab實現的pca演算法,用於降維,適用於各種試驗,如人臉識別程式。使用方法 1 選擇訓練和測試的資料庫路徑 2 選擇測試影象的路徑 3 執行createdatabase 函式給訓練影象建立二維矩陣 4 執行 eigenfacecore 函式建立基本的空間 5 執行 recognition ...