পাইথনে অধ্যক্ষ উপাদান উপাদান বিশ্লেষণ এবং নিরোধক


11

আমি পাইথনে কীভাবে পুনরায় উত্পাদন করতে পারি সে জন্য আমি এসএএস-এর কাজ করেছি work এই ডেটাসেটটি ব্যবহার করে , যেখানে বহুবিধ লাইনারিটি সমস্যা, আমি পাইথনে মূল উপাদান বিশ্লেষণ করতে চাই। আমি সাইকিট-লার্ন এবং স্ট্যাটাসমডেলগুলি দেখেছি, তবে আমি কীভাবে তাদের আউটপুট নেব এবং এটি এসএএস হিসাবে একই ফলাফলের কাঠামোতে রূপান্তর করব তা সম্পর্কে আমি অনিশ্চিত। একটি জিনিস হিসাবে, এসএএস আপনি ব্যবহার করার সময় পারস্পরিক সম্পর্ক মেট্রিক্সে পিসিএ সঞ্চালনের জন্য উপস্থিত হয় PROC PRINCOMPতবে পাইথন লাইব্রেরির বেশিরভাগ (সমস্ত?) এসভিডি ব্যবহার করতে দেখা যায়।

ইন ডেটা সেটটি , প্রথম কলামে প্রতিক্রিয়া পরিবর্তনশীল এবং পরবর্তী 5 ভবিষ্যদ্বাণীপূর্ণ ভেরিয়েবল, pred1-pred5 ডাকতাম।

এসএএস-এ, সাধারণ কর্মপ্রবাহটি হ'ল:

/* 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;

আমি জানি যে শেষ পদক্ষেপটি কেবলমাত্র কাজ করে কারণ আমি কেবলমাত্র পিসি 1 এবং পিসি 2 বেছে নিচ্ছি।

পাইথনে, আমি যতটা পেয়েছি এটি এখানে প্রায়:

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স্কেলেরানের পিসিএ এর প্যারামিটারটিকে পরিবর্তন করে 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]])

1
সাইকিট-লার্নে প্রতিটি নমুনা আপনার ডেটা ম্যাট্রিক্সে একটি সারি হিসাবে সংরক্ষণ করা হয় । পিসিএ ক্লাসটি ডেটা ম্যাট্রিক্সে সরাসরি কাজ করে, এটি কোভরিয়েন্স ম্যাট্রিক্স এবং তারপরে এর আইজেনভেেক্টরগুলিকে গণনা করার যত্ন নেয় । আপনার চূড়ান্ত 3 টি প্রশ্ন সম্পর্কে, হ্যাঁ, উপাদান_গুলি হ'ল কোভারিয়েন্স ম্যাট্রিক্সের আইজেনভেেক্টর, ব্যাখ্যা করা হয়েছে_পরিচয়_রটিও_ প্রতিটি পিসি ব্যাখ্যা করে, এবং বর্ণিত রূপটি ইগেনভ্যালুগুলির সাথে সামঞ্জস্য করা উচিত।
লাইটলচেমিস্ট

@ হালালচেমিস্ট স্পষ্টির জন্য আপনাকে ধন্যবাদ। স্কলারনের সাহায্যে, পিসিএ করার পূর্বে কোনও নতুন ডেটাফ্রেম তৈরি করা কি যথাযথ, বা 'সম্পূর্ণ' পান্ডাস ডেটা ফ্রেমে প্রেরণ করা এবং এটি বামদিকের (প্রতিক্রিয়া) কলামে পরিচালনা না করা সম্ভব?
ক্লে

আমি আরও কিছু তথ্য যুক্ত করেছি। আমি যদি প্রথমে একটি নমপি অ্যারে রূপান্তর করি এবং তারপরে পিসিএ চালাই copy=False, আমি নতুন মান পাই। সেগুলি কি মূল উপাদানগুলির স্কোর?
ক্লে

আমি পান্ডাদের সাথে তেমন পরিচিত নই তাই আপনার প্রশ্নের অংশটির আমার কাছে উত্তর নেই। দ্বিতীয় অংশটি সম্পর্কে, আমি মনে করি না যে তারা প্রধান উপাদান। আমি বিশ্বাস করি যে তারা আসল ডেটা নমুনা তবে গড় বিয়োগফলের সাথে। তবে, আমি এটি সম্পর্কে সত্যই নিশ্চিত হতে পারি না।
হালকা চশমাবিদ

উত্তর:


16

Scikit-শিখতে উদাহরণস্বরূপ মত পিসিএ একটি মিলিত বাস্তবায়ন ও রিগ্রেশন নেই , অনুগ্রহ আর প্যাকেজ কিন্তু আমি মনে করি নীচে পছন্দ করি বা পিএলএস রিগ্রেশন চয়ন করতে পারেন।

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

from sklearn.preprocessing import scale
from sklearn.decomposition import PCA
from sklearn import cross_validation
from sklearn.linear_model import LinearRegression

%matplotlib inline

import seaborn as sns
sns.set_style('darkgrid')

df = pd.read_csv('multicollinearity.csv')
X = df.iloc[:,1:6]
y = df.response

সাইকিট-লার্ন পিসিএ

pca = PCA()

অধ্যক্ষ উপাদানগুলি পেতে ডেটা স্কেল এবং রূপান্তর করুন

X_reduced = pca.fit_transform(scale(X))

মূল উপাদানগুলির দ্বারা ব্যাখ্যা করা বৈকল্পিক (% ক্রমযুক্ত)

np.cumsum(np.round(pca.explained_variance_ratio_, decimals=4)*100)

array([  73.39,   93.1 ,   98.63,   99.89,  100.  ])

প্রথম দুটি উপাদানগুলির মতো দেখে মনে হচ্ছে ডেটাগুলির বেশিরভাগ বৈচিত্র্য ব্যাখ্যা করে।

শ্যাফেল সহ 10-ভাণ্ডার সিভি

n = len(X_reduced)
kf_10 = cross_validation.KFold(n, n_folds=10, shuffle=True, random_state=2)

regr = LinearRegression()
mse = []

কেবল ইন্টারসেপ্টের জন্য এমএসই পেতে একটি সিভি করুন (রিগ্রেশনে মূল উপাদান নেই)

score = -1*cross_validation.cross_val_score(regr, np.ones((n,1)), y.ravel(), cv=kf_10, scoring='mean_squared_error').mean()    
mse.append(score) 

5 টি মূল উপাদানগুলির জন্য সিভি করুন, সেই সময়ে রিগ্রেশনে একটি উপাদান যুক্ত করুন

for i in np.arange(1,6):
    score = -1*cross_validation.cross_val_score(regr, X_reduced[:,:i], y.ravel(), cv=kf_10, scoring='mean_squared_error').mean()
    mse.append(score)

fig, (ax1, ax2) = plt.subplots(1,2, figsize=(12,5))
ax1.plot(mse, '-v')
ax2.plot([1,2,3,4,5], mse[1:6], '-v')
ax2.set_title('Intercept excluded from plot')

for ax in fig.axes:
    ax.set_xlabel('Number of principal components in regression')
    ax.set_ylabel('MSE')
    ax.set_xlim((-0.2,5.2))

এখানে চিত্র বর্ণনা লিখুন

সাইকিট-শিখুন পিএলএস রিগ্রেশন

mse = []

kf_10 = cross_validation.KFold(n, n_folds=10, shuffle=True, random_state=2)

for i in np.arange(1, 6):
    pls = PLSRegression(n_components=i, scale=False)
    pls.fit(scale(X_reduced),y)
    score = cross_validation.cross_val_score(pls, X_reduced, y, cv=kf_10, scoring='mean_squared_error').mean()
    mse.append(-score)

plt.plot(np.arange(1, 6), np.array(mse), '-v')
plt.xlabel('Number of principal components in PLS regression')
plt.ylabel('MSE')
plt.xlim((-0.2, 5.2))

এখানে চিত্র বর্ণনা লিখুন


7

পাইথন এবং নম্পপিতে এখানে এসভিডি রয়েছে (বছরগুলি পরে)।
(এটি এসএসএ / স্কলারন / পান্ডাস সম্পর্কে আপনার প্রশ্নগুলিকে মোটেই সমাধান করে না, তবে কোনও দিন অজগরবিদকে সহায়তা করতে পারে ))

#!/usr/bin/env python2
""" SVD straight up """
# geometry: see http://www.ams.org/samplings/feature-column/fcarc-svd

from __future__ import division
import sys
import numpy as np

__version__ = "2015-06-15 jun  denis-bz-py t-online de"

# from bz.etc import numpyutil as nu
def ints( x ):
    return np.round(x).astype(int)  # NaN Inf -> - maxint

def quantiles( x ):
    return "quantiles %s" % ints( np.percentile( x, [0, 25, 50, 75, 100] ))


#...........................................................................
csvin = "ccheaton-multicollinearity.csv"  # https://gist.github.com/ccheaton/8393329
plot = 0

    # to change these vars in sh or ipython, run this.py  csvin=\"...\"  plot=1  ...
for arg in sys.argv[1:]:
    exec( arg )

np.set_printoptions( threshold=10, edgeitems=10, linewidth=120,
    formatter = dict( float = lambda x: "%.2g" % x ))  # float arrays %.2g

#...........................................................................
yX = np.loadtxt( csvin, delimiter="," )
y = yX[:,0]
X = yX[:,1:]
print "read %s" % csvin
print "y %d  %s" % (len(y), quantiles(y))
print "X %s  %s" % (X.shape, quantiles(X))
print ""

#...........................................................................
U, sing, Vt = np.linalg.svd( X, full_matrices=False )
#...........................................................................

print "SVD: %s -> U %s . sing diagonal . Vt %s" % (
        X.shape, U.shape, Vt.shape )
print "singular values:", ints( sing )
    # % variance (sigma^2) explained != % sigma explained, e.g. 10 1 1 1 1

var = sing**2
var *= 100 / var.sum()
print "% variance ~ sing^2:", var

print "Vt, the right singular vectors  * 100:\n", ints( Vt * 100 )
    # multicollinear: near +- 100 in each row / col

yU = y.dot( U )
yU *= 100 / yU.sum()
print "y ~ these percentages of U, the left singular vectors:", yU


-> লগ

# from: test-pca.py
# run: 15 Jun 2015 16:45  in ~bz/py/etc/data/etc  Denis-iMac 10.8.3
# versions: numpy 1.9.2  scipy 0.15.1   python 2.7.6   mac 10.8.3

read ccheaton-multicollinearity.csv
y 373  quantiles [  2823  60336  96392 147324 928560]
X (373, 5)  quantiles [     7     47    247    573 512055]

SVD: (373, 5) -> U (373, 5) . sing diagonal . Vt (5, 5)
singular values: [2537297    4132    2462     592      87]
% variance ~ sing^2: [1e+02 0.00027 9.4e-05 5.4e-06 1.2e-07]
Vt, the right singular vectors  * 100:
[[  0   0 100   0   0]
 [  1  98   0 -12  17]
 [-10 -11   0 -99  -6]
 [  1 -17   0  -4  98]
 [-99   2   0  10   2]]
y ~ these percentages of U, the left singular vectors: [1e+02 15 -18 0.88 -0.57]

আমি পার্টিতে কিছুটা দেরি করেছি তবে দুর্দান্ত উত্তর
plumbus_bouquet

3

নীতি উপাদান বিশ্লেষণ এবং লিনিয়ার রিগ্রেশন একত্রিত করতে একটি পাইপলাইন ব্যবহার করার চেষ্টা করুন:

from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline

# Principle components regression
steps = [
    ('scale', StandardScaler()),
    ('pca', PCA()),
    ('estimator', LinearRegression())
]
pipe = Pipeline(steps)
pca = pipe.set_params(pca__n_components=3)
pca.fit(X, y)

3

আমার উত্তরটি প্রায় পাঁচ বছর দেরিতে আসছে এবং এটির একটি ভাল সম্ভাবনা রয়েছে যে পাইথনে আপনাকে আর আর পিসিআর করার বিষয়ে সাহায্যের প্রয়োজন হবে না। হোগর্ম নামে একটি পাইথন প্যাকেজ তৈরি করেছি যা আপনার আগে যা প্রয়োজন ঠিক তা করে। এখানে পিসিআর উদাহরণগুলি দেখুন । হোগমর্মের সাথে গণনা করা ফলাফলগুলির দৃশ্যধারণের জন্য হোগগর্ম্প্লট নামে একটি পরিপূরক প্লটিং প্যাকেজও রয়েছে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.