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 ...