主成分分析簡單例子 - 程式前沿

文章推薦指數: 80 %
投票人數:10人

... 例如函式,即由原來的二維轉換成了一維。

處理降維的技術有很多種,如前面的SVD奇異值分解,主成分分析(PCA),因子分析(FA),獨立成分分析( 程式語言前端開發IOS開發Android開發雲端運算人工智慧伺服器搜尋資料庫軟體開發工具主成分分析簡單例子2018.07.29程式語言HOME程式語言主成分分析簡單例子Advertisement目錄1.一、資料降維2.二、PCA的概念3.三、PCA的操作過程3.1.  1、PCA的操作流程大致如下:3.2.  2、具體的例子4.四、實驗的模擬一、資料降維  對於現在維數比較多的資料,我們首先需要做的就是對其進行降維操作。

降維,簡單來說就是說在儘量保證資料本質的前提下將資料中的維數降低。

降維的操作可以理解為一種對映關係,例如函式,即由原來的二維轉換成了一維。

處理降維的技術有很多種,如前面的SVD奇異值分解,主成分分析(PCA),因子分析(FA),獨立成分分析(ICA)等等。

二、PCA的概念  PCA是一種較為常用的降維技術,PCA的思想是將維特徵對映到維上,這維是全新的正交特徵。

這維特徵稱為主元,是重新構造出來的維特徵。

在PCA中,資料從原來的座標系轉換到新的座標系下,新的座標系的選擇與資料本身是密切相關的。

其中,第一個新座標軸選擇的是原始資料中方差最大的方向,第二個新座標軸選取的是與第一個座標軸正交且具有最大方差的方向,依次類推,我們可以取到這樣的個座標軸。

三、PCA的操作過程  1、PCA的操作流程大致如下:去平均值,即每一位特徵減去各自的平均值計算協方差矩陣計算協方差矩陣的特徵值與特徵向量對特徵值從大到小排序保留最大的個特徵向量將資料轉換到個特徵向量構建的新空間中  2、具體的例子    假設二維資料為取平均值    我們計算每一維特徵的平均值,並去除平均值,我們計算出均值為去除均值後的矩陣為計算的協方差矩陣計算的特徵值與特徵向量其中,特徵值為特徵向量為對特徵值進行排序,顯然就兩個特徵值選擇最大的那個特徵值對應的特徵向量轉換到新的空間四、實驗的模擬我們隊一個資料集進行了測試:MATLAB實驗程式碼如下:主程式[plain] viewplain copy%% pca    dataSet = load(‘testSet.txt’);%匯入資料    % pca  [FinalData, reconData] = PCA(dataSet, 1);    %% 作圖  hold on  plot(dataSet(:,1), dataSet(:,2), ‘.’);  plot(reconData(:,1), reconData(:,2), ‘.r’);  hold off              PCA函式段[plain] viewplain copyfunction [ FinalData,reconData ] = PCA( dataSet, k )      [m,n] = size(dataSet);       %% 去除平均值      %取平均值      dataSetMean = mean(dataSet);      %減去平均值      dataSetAdjust = zeros(m,n);      for i = 1 : m          dataSetAdjust(i , 🙂 = dataSet(i , 🙂 – dataSetMean;      end        %% 計算協方差矩陣      dataCov = cov(dataSetAdjust);        %% 計算協方差矩陣的特徵值與特徵向量      [V, D] = eig(dataCov);            % 將特徵值矩陣轉換成向量      d = zeros(1, n);      for i = 1:n          d(1,i) = D(i,i);      end            %% 對特徵值排序      [maxD, index] = sort(d);            %% 選取前k個最大的特徵值      % maxD_k = maxD(1, (n-k1):n);      index_k = index(1, (n-k1):n);      % 對應的特徵向量      V_k = zeros(n,k);      for i = 1:k          V_k(:,i) = V(:,index_k(1,i));      end            %% 轉換到新的空間      FinalData = dataSetAdjust*V_k;            % 在原圖中找到這些點      reconData = FinalData * V_k’;      for i = 1 : m          reconData(i , 🙂 = reconData(i , 🙂  dataSetMean;      end  end AdvertisementAdvertisement写评论取消回覆很抱歉,必須登入網站才能發佈留言。

近期文章Sizzle源碼分析(四):Sizzle是如何選擇元素的2020.01.09基於Charles,如何利用代理技術進行接口mock測試2020.01.09Spring中FactoryBean的作用和實現原理2020.01.09SpringMVC加載流程2020.01.09HashMap原理技術知識整理2020.01.09淺談MySQL的事務與ACID2020.01.09FishRedux完成一個玩安卓客戶端2020.01.09Elasticsearch調優篇慢查詢分析筆記2020.01.09Hadoop完全分佈式安裝與部署2020.01.09Scala教程之:可變和不變集合2020.01.09AdvertisementAdvertisement



請為這篇文章評分?