मैं यह पता लगाने की कोशिश कर रहा हूं कि पायस में कुछ काम जो मैंने एसएएस में किए हैं, कैसे पुन: पेश करें। इस डेटासेट का उपयोग करना , जहां बहुसंस्कृति एक समस्या है, मैं पायथन में प्रमुख घटक विश्लेषण करना चाहूंगा। मैंने स्किटिट-लर्न और स्टैटमोडेल को देखा है, लेकिन मैं अनिश्चित हूं कि उनका आउटपुट कैसे लिया जाए और इसे एसएएस के समान परिणाम संरचना में परिवर्तित किया जाए। जब आप उपयोग करते हैं PROC PRINCOMP
, तो एक चीज़ के लिए, एसएएस सहसंबंध मैट्रिक्स पर पीसीए प्रदर्शित करता है , लेकिन पायथन पुस्तकालयों के अधिकांश (सभी?) एसवीडी का उपयोग करते दिखाई देते हैं।
में डाटासेट , पहले कॉलम प्रतिक्रिया चर रहा है और अगले 5 भविष्य कहनेवाला चर, pred1-pred5 कहा जाता है।
SAS में, सामान्य वर्कफ़्लो है:
/* Get the PCs */
proc princomp data=indata out=pcdata;
var pred1 pred2 pred3 pred4 pred5;
run;
/* Standardize the response variable */
proc standard data=pcdata mean=0 std=1 out=pcdata2;
var response;
run;
/* Compare some models */
proc reg data=pcdata2;
Reg: model response = pred1 pred2 pred3 pred4 pred5 / vif;
PCa: model response = prin1-prin5 / vif;
PCfinal: model response = prin1 prin2 / vif;
run;
quit;
/* Use Proc PLS to to PCR Replacement - dropping pred5 */
/* This gets me my parameter estimates for the original data */
proc pls data=indata method=pcr nfac=2;
model response = pred1 pred2 pred3 pred4 / solution;
run;
quit;
मुझे पता है कि अंतिम चरण केवल इसलिए काम करता है क्योंकि मैं क्रम में केवल PC1 और PC2 चुन रहा हूं।
तो, पायथन में, इस बारे में जहाँ तक मैंने देखा है:
import pandas as pd
import numpy as np
from sklearn.decomposition.pca import PCA
source = pd.read_csv('C:/sourcedata.csv')
# Create a pandas DataFrame object
frame = pd.DataFrame(source)
# Make sure we are working with the proper data -- drop the response variable
cols = [col for col in frame.columns if col not in ['response']]
frame2 = frame[cols]
pca = PCA(n_components=5)
pca.fit(frame2)
प्रत्येक पीसी बताते हैं कि विचरण की मात्रा?
print pca.explained_variance_ratio_
Out[190]:
array([ 9.99997603e-01, 2.01265023e-06, 2.70712663e-07,
1.11512302e-07, 2.40310191e-09])
ये क्या हैं? Eigenvectors?
print pca.components_
Out[179]:
array([[ -4.32840645e-04, -7.18123771e-04, -9.99989955e-01,
-4.40303223e-03, -2.46115129e-05],
[ 1.00991662e-01, 8.75383248e-02, -4.46418880e-03,
9.89353169e-01, 5.74291257e-02],
[ -1.04223303e-02, 9.96159390e-01, -3.28435046e-04,
-8.68305757e-02, -4.26467920e-03],
[ -7.04377522e-03, 7.60168675e-04, -2.30933755e-04,
5.85966587e-02, -9.98256573e-01],
[ -9.94807648e-01, -1.55477793e-03, -1.30274879e-05,
1.00934650e-01, 1.29430210e-02]])
क्या ये स्वदेशी हैं?
print pca.explained_variance_
Out[180]:
array([ 8.07640319e+09, 1.62550137e+04, 2.18638986e+03,
9.00620474e+02, 1.94084664e+01])
मैं पायथन परिणाम से वास्तव में प्रिंसिपल कंपोनेंट रिग्रेशन (पायथन में) का प्रदर्शन करने के तरीके के बारे में थोड़ा नुकसान पर हूं। क्या पायथन लाइब्रेरी में से कोई भी एसएएस के समान रिक्त स्थान को भरता है?
किसी भी सुझाव की सराहना की है। मैं एसएएस आउटपुट में लेबल के उपयोग से थोड़ा खराब हो गया हूं और मैं पांडा, संख्यात्मक, डरावना या डरावना-परिचित से बहुत परिचित नहीं हूं।
संपादित करें:
तो, ऐसा लगता है कि स्केलेन सीधे पंडों के डेटाफ़्रेम पर काम नहीं करेगा। मान लीजिए कि मैं इसे एक अफीम सरणी में परिवर्तित करता हूं:
npa = frame2.values
npa
यहाँ मुझे क्या मिलेगा:
Out[52]:
array([[ 8.45300000e+01, 4.20730000e+02, 1.99443000e+05,
7.94000000e+02, 1.21100000e+02],
[ 2.12500000e+01, 2.73810000e+02, 4.31180000e+04,
1.69000000e+02, 6.28500000e+01],
[ 3.38200000e+01, 3.73870000e+02, 7.07290000e+04,
2.79000000e+02, 3.53600000e+01],
...,
[ 4.71400000e+01, 3.55890000e+02, 1.02597000e+05,
4.07000000e+02, 3.25200000e+01],
[ 1.40100000e+01, 3.04970000e+02, 2.56270000e+04,
9.90000000e+01, 7.32200000e+01],
[ 3.85300000e+01, 3.73230000e+02, 8.02200000e+04,
3.17000000e+02, 4.32300000e+01]])
अगर मैं copy
sklearn के PCA के पैरामीटर को बदल देता हूं तो False,
यह नीचे दी गई टिप्पणी के अनुसार सीधे सरणी पर संचालित होता है।
pca = PCA(n_components=5,copy=False)
pca.fit(npa)
npa
आउटपुट के अनुसार, ऐसा लगता है कि यह npa
सरणी में किसी भी चीज़ को जोड़ने के बजाय सभी मानों को बदल दिया है । अब इसमें क्या मूल्य npa
हैं? मूल सरणी के लिए प्रमुख घटक स्कोर?
Out[64]:
array([[ 3.91846649e+01, 5.32456568e+01, 1.03614689e+05,
4.06726542e+02, 6.59830027e+01],
[ -2.40953351e+01, -9.36743432e+01, -5.27103110e+04,
-2.18273458e+02, 7.73300268e+00],
[ -1.15253351e+01, 6.38565684e+00, -2.50993110e+04,
-1.08273458e+02, -1.97569973e+01],
...,
[ 1.79466488e+00, -1.15943432e+01, 6.76868901e+03,
1.97265416e+01, -2.25969973e+01],
[ -3.13353351e+01, -6.25143432e+01, -7.02013110e+04,
-2.88273458e+02, 1.81030027e+01],
[ -6.81533512e+00, 5.74565684e+00, -1.56083110e+04,
-7.02734584e+01, -1.18869973e+01]])
copy=False
हूं, तो मुझे नए मूल्य मिलते हैं। क्या वे प्रमुख घटक स्कोर हैं?