主成分分析Python代碼

對于主成分分析詳細的介紹:主成分分析(PCA)原理詳解icon-default.png?t=N6B9https://blog.csdn.net/zhongkelee/article/details/44064401

import numpy as np
import pandas as pd'''標準PCA算法'''
def standeredPCA(data,N):                                   #data:數據集DataFrame  N:降維后需要的維數n=data.shape[1]                                         #數據集data的列數,即維度m=data.shape[0]                                         #數據集data的行數colname=list(data.columns)                              #提取列名AVG=[]                                                  #原始各個維度的平均值for i in range(n):avg=0s=list(data[colname[i]])num=len(s)for j in s:avg+=javg=avg/numAVG.append(avg)'''將每一列數據都轉換成列表型'''df=[]                                                   #存儲每一列的數據for i in range(n):ls=list(data[colname[i]])df.append(ls)'''數據中心化'''for i in range(n):t=df[i]for j in range(len(t)):t[j]=t[j]-AVG[i]'''求特征協方差矩陣'''A=np.zeros((n,n))for i in range(n):for j in range(n):p=df[i]q=df[j]for k in range(m):A[i][j]+=p[k]*q[k]A[i][j]=A[i][j]/(m-1)'''求協方差的特征值和特征向量'''B=np.linalg.eig(A)P=B.eigenvalues                                         #特征值Q=B.eigenvectors                                        #特征向量U=[index for index, value in sorted(list(enumerate(P)), key=lambda x:x[1])]     #對特征值排序輸出索引值序列U=sorted(U,reverse=True)                                #特征值從大到小排序的索引值u=[]                                                    #輸出排在前N個的索引值for i in range(N):u.append(U[i])r=[]                                                     #需要的特征值t=[]                                                     #需要的特征向量for i in u:r.append(P[i])T=[]for j in Q:T.append(j[i])t.append(T)'''得到通過PCA后獲得的N個特征的數據'''W=[]                            #存儲通過PCA后得到的每一個特征的數據【列表】for i in range(N):a=[]                        #存儲通過PCA的特征數據b=t[i]for j in range(m):          #遍歷數據的行f=0for k in range(n):      #遍歷數據的列f=f+df[k][j]*b[k]a.append(f)W.append(a)'''輸出經過PCA降維處理后得到的N個特征數據'''fdata=pd.DataFrame(W)fdata=fdata.Tprint("經過PCA降維后得到的結果如下:")print(fdata)'''計算特征信息提取率'''sum=0for i in P:sum+=ifsum=0for i in u:fsum+=P[i]PCAprecent=fsum/sumprint("PCA數據特征的信息提取率是:{}".format(PCAprecent))if __name__=="__main__":df = {'x': [2.5, 0.5, 2.2, 1.9, 3.1, 2.3, 2, 1, 1.5, 1.1], 'y': [2.4, 0.7, 2.9, 2.2, 3.0, 2.7, 1.6, 1.1, 1.6, 0.9]}data = pd.DataFrame(df)standeredPCA(data, 1)

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/40426.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/40426.shtml
英文地址,請注明出處:http://en.pswp.cn/news/40426.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【golang】鏈表(List)

List實現了一個雙向鏈表,而Element則代表了鏈表中元素的結構。 可以把自己生成的Element類型值傳給鏈表嗎? 首先來看List的四種方法。 MoveBefore方法和MoveAfter方法,它們分別用于把給定的元素移動到另一個元素的前面和后面。 MoveToFro…

十種排序算法(附動圖)

排序算法 一、基本介紹 ? 排序算法比較基礎,但是設計到很多計算機科學的想法,如下: ? 1、比較和非比較的策略 ? 2、迭代和遞歸的實現 ? 3、分而治之思想 ? 4、最佳、最差、平均情況時間復雜度分析 ? 5、隨機算法 二、排序算法的分類 …

RabbitMq-1基礎概念

RabbitMq-----分布式中的一種通信手段 1. MQ的基本概念(message queue,消息隊列) mq:消息隊列,存儲消息的中間件 分布式系統通信的兩種方式:直接遠程調用,借助第三方完成間接通信 消息的發送方是生產者&#xff0c…

面試熱題(二叉樹的鋸齒形層次遍歷)

給你二叉樹的根節點 root ,返回其節點值的 鋸齒形層序遍歷 。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行) 輸入:root [3,9,20,null,null,15,7] 輸出:[[3…

MySQL數據庫-字符串函數詳解

前言 MySQL數據庫提供了多種不同類型的函數,用于處理字符串、日期、數值等數據類型,以及實現條件、聚合等操作,下面我們主要介紹字符串函數 CONCAT() 函數 CONCAT() 可用于將多個字符串連接在一起。 示例: SELECT CONCAT(Hell…

C++ STL stack queue

目錄 一.stack 介紹 二.stack 使用 三.stack 模擬實現 普通版本: 適配器版本: 四.queue的介紹 五. queue使用 六.queue模擬實現 七.deque介紹 1.容器適配器 2.deque的簡單介紹 3.deque的缺陷 4.為什么選擇deque作為stack和queue的底層默認容…

System.Text.Encoding不同字符編碼之間進行轉換

System.Text.Encoding 是 C# 中用于處理字符編碼和字符串與字節之間轉換的類。它提供了各種靜態方法和屬性,用于在不同字符編碼之間進行轉換,以及將字符串轉換為字節數組或反之。 在處理多語言文本、文件、網絡通信以及其他字符數據的場景中&#xff0c…

Spring Boot 獲取前端參數

Spring Boot 獲取前端參數 在開發 Web 應用程序時,前端參數是非常重要的。Spring Boot 提供了多種方法來獲取前端參數,本文將介紹其中的一些常用方法。 1. 使用 RequestParam 注解 RequestParam 注解是 Spring MVC 提供的一種常用方式,用于…

C++ 函數

函數是一組一起執行一個任務的語句。每個 C 程序都至少有一個函數,即主函數 main() ,所有簡單的程序都可以定義其他額外的函數。 您可以把代碼劃分到不同的函數中。如何劃分代碼到不同的函數中是由您來決定的,但在邏輯上,劃分通常…

pycharm調整最大堆發揮最大

python程序運行時,怎么提高效率,設置pycharm最大堆過程如下; 一、進入設置pycharm最大堆; 二、進入設置pycharm最大堆; 如果8g設置為6g左右,占75%左右最佳

5個實用的 Vue 技巧

在這篇文章中,我們將探討五個實用的 Vue 技巧,這些技巧可以使你日常使用 Vue 編程更高效、更富有成效。無論你是Vue的初學者還是經驗豐富的開發者,這些技巧都能幫助你編寫更清晰、更簡潔、更有效的代碼。那么,讓我們開始吧。 1. …

9.1 C++ STL 排序、算數與集合

C STL(Standard Template Library)是C標準庫中的一個重要組成部分,提供了豐富的模板函數和容器,用于處理各種數據結構和算法。在STL中,排序、算數和集合算法是常用的功能,可以幫助我們對數據進行排序、統計…

【JVM】JVM中的分代回收

文章目錄 分代收集算法什么是分代分代收集算法-工作機制MinorGC、 Mixed GC 、 FullGC的區別是什么 分代收集算法 什么是分代 在java8時,堆被分為了兩份: 新生代和老年代【1:2】 其中: 對于新生代,內部又被分為了三…

eclipse常用設置

1、調整編輯頁面字體大小 窗口 (Window)- 首選項(Preferences)- 常規(General)- 外觀 (Appearence)- 顏色與字體 (Colors And Fonts),在右邊的對話框里選擇 Java - Java Editor Text Font,點擊出現的修改&…

【ARM 嵌入式 編譯系列 3.3 -- gcc 動態庫與靜態庫的鏈接方法介紹】

文章目錄 1.1 GCC 鏈接器 LD 介紹1.1.1 GCC 鏈接器 LD 常用參數介紹1.2 動態庫和靜態庫介紹1.2.1 動態庫和靜態庫優缺點1.2.2 庫文件鏈接方式1.2.3 ldd 工具介紹1.2.4 靜態庫鏈接時搜索路徑順序1.2.5 動態庫鏈接時、執行時搜索路徑順序1.2.6 頭文件搜索路徑1.2.7 有關環境變量上…

Neo4j之Aggregation基礎

在 Neo4j 中,聚合(Aggregation)是對數據進行計算、匯總和統計的過程。以下是一些使用聚合函數的常見例子,以及它們的解釋: 計算節點數量: MATCH (p:Person) RETURN count(p) AS totalPersons;這個查詢會計…

Socks5代理在多線程爬蟲中的應用

在進行爬蟲開發過程中,我們常常需要處理大量的數據,并執行多任務并發操作。然而,頻繁的請求可能會引起目標網站的反爬機制,導致IP封禁或限制訪問。為了規避這些限制,我們可以借助Socks5代理的強大功能,通過…

Nginx反向代理技巧

跨域 作為一個前端開發者來說不可避免的問題就是跨域,那什么是跨域呢? 跨域:指的是瀏覽器不能執行其他網站的腳本。它是由瀏覽器的同源策略造成的,是瀏覽器對javascript施加的安全限制。瀏覽器的同源策略是指協議,域名…

2011-2021年數字普惠金融指數Bartik工具變量法(含原始數據和Bartik工具變量法代碼)

2011-2021年數字普惠金融指數Bartik工具變量法(含原始數據和Bartik工具變量法代碼) 1、時間:2011-2020(省級、城市),2014-2020(區縣) 2、原始數據來源:北大金融研究中心…

npm的鏡像源和代理的查看和修改

一、鏡像源 查詢當前鏡像源 npm get registry 設置為淘寶鏡像 npm config set registry http://registry.npm.taobao.org/ 設置回默認的官方鏡像 npm config set registry https://registry.npmjs.org/ 設置electron為淘寶鏡像 npm config set ELECTRON_MIRROR "h…