是以,我目前正在從事一個涉及使用主成分分析(PCA)的項目,并且我試圖随時進行學習。幸運的是,Python有一個來自scikitlearn.decomposition的非常友善的子產品,該子產品似乎可以為您完成大部分工作。在我真正開始使用它之前,我正在嘗試弄清楚它在做什麼。
我一直在測試的資料框如下所示:
0 1
0 1 2
1 3 1
2 4 6
3 5 3
當我調用PCA.fit()然後檢視元件時,我得到:
array([[ 0.5172843 , 0.85581362],
[ 0.85581362, -0.5172843 ]])
根據我對PCA的有限了解,我有點了解如何進行計算,但是我迷失的地方是當我調用PCA.transform時。這是它給我的輸出:
array([[-2.0197033 , -1.40829634],
[-1.84094831, 0.8206152 ],
[ 2.95540408, -0.9099927 ],
[ 0.90524753, 1.49767383]])
有人可能會引導我了解如何将原始資料幀群組件轉換為新數組嗎?我希望能夠了解它所做的确切計算,以便在擴充時可以更好地了解正在發生的事情。謝謝!
參考方案
當您進行拟合時,PCA将計算一些向量,您可以将向量投影到這些向量上,以減小資料的維數。由于資料的每一行都是二維的,是以最多可以将2個向量投影到資料上,并且每個向量都是二維的。 PCA.components_的每一行都是一個向量,可以将事物投影到該向量上,并且其大小與訓練資料中的列數相同。由于您執行了完整的PCA,是以您将獲得2個這樣的向量,是以您将獲得2x2矩陣。這些向量中的第一個向量将最大化投影資料的方差。第二個将最大化第一個投影後剩餘的方差。通常,傳遞的值n_components小于輸入資料的維數,這樣您可以傳回較少的行,并且具有寬但不高的components_數組。
當您呼叫transform時,您是在要求sklearn實際進行投影。也就是說,您要求它将資料的每一行投影到調用fit時所學習的向量空間中。對于傳遞給transform的每一行資料,您的輸出中将有1行,而該行中的列數将是在fit階段中學習到的向量數。換句話說,列數将等于您傳遞給構造函數的n_components的值。
通常,當源資料有很多列并且您希望減少列數同時保留盡可能多的資訊時,便使用PCA。假設您有一個包含100行的資料集,每行有500列。如果構造了一個類似PCA(n_components = 10)的PCA,然後将其命名為fit,則會發現components_包含10行,其中每個用于您請求的元件,而500列作為輸入維。如果随後調用transform,則将所有100行資料投影到此10維空間中,是以輸出将具有100行(輸入中每行1行),但隻有10列,進而減小了資料的維數。
這樣做的簡短答案是PCA計算奇異值分解,然後僅保留其中一個矩陣的某些列。 Wikipedia後面有更多關于實際線性代數的資訊-一個StackOverflow答案有點長。
使用sklearn的PCA - python
我有一個大輸入矩陣,大小為(20,20000),并且正在嘗試使用sklearn Python軟體包執行PCA。在這裡,20代表20個主題,20,000代表20,000個特征。下面是示例代碼:import numpy as np from sklearn.decomposition import PCA rng = np.random.RandomState(…Python GPU資源利用 - python
我有一個Python腳本在某些深度學習模型上運作推理。有什麼辦法可以找出GPU資源的使用率水準?例如,使用着色器,float16乘法器等。我似乎在網上找不到太多有關這些GPU資源的文檔。謝謝! 參考方案 您可以嘗試在像Renderdoc這樣的GPU分析器中運作pyxthon應用程式。它将分析您的跑步情況。您将能夠獲得有關已使用資源,已用緩沖區,不同渲染狀态上…Python:圖像處理可産生皺紋紙效果 - python
也許很難描述我的問題。我正在尋找Python中的算法,以在帶有某些文本的白色圖像上建立皺紋紙效果。我的第一個嘗試是在帶有文字的圖像上添加一些真實的皺紋紙圖像(具有透明度)。看起來不錯,但副作用是文本沒有真正起皺。是以我正在尋找更好的解決方案,有什麼想法嗎?謝謝 參考方案 除了使用透明性之外,假設您有兩張相同尺寸的圖像,一張在皺紋紙上明亮,一張在白色背景上有深…Python uuid4,如何限制唯一字元的長度 - python
在Python中,我正在使用uuid4()方法建立唯一的字元集。但是我找不到将其限制為10或8個字元的方法。有什麼辦法嗎?uuid4()ffc69c1b-9d87-4c19-8dac-c09ca857e3fc謝謝。 參考方案 嘗試:x = uuid4() str(x)[:8] 輸出:"ffc69c1b" Is there a way to…Python sqlite3資料庫已鎖定 - python
我在Windows上使用Python 3和sqlite3。我正在開發一個使用資料庫存儲聯系人的小型應用程式。我注意到,如果應用程式被強制關閉(通過錯誤或通過任務管理器結束),則會收到sqlite3錯誤(sqlite3.OperationalError:資料庫已鎖定)。我想這是因為在應用程式關閉之前,我沒有正确關閉資料庫連接配接。我已經試過了: connectio…