পাইথনে স্ক্রি প্লট কীভাবে আঁকবেন? [বন্ধ]


11

আমি ম্যাট্রিক্সে একক ভেক্টর পচন ব্যবহার করছি এবং ইউ, এস এবং ভিটি ম্যাট্রিক্স পাচ্ছি। এই মুহুর্তে, আমি মাত্রা বজায় রাখার জন্য একটি প্রান্তিক নির্বাচন করার চেষ্টা করছি। আমাকে একটি স্ক্রি প্লটটি দেখার পরামর্শ দেওয়া হয়েছিল তবে কীভাবে এটি স্তন্যপায়ীভাবে করা যায় তা নিয়ে ভাবছি। বর্তমানে, আমি পাইথনে ন্যাপি এবং স্কিপি লাইব্রেরি ব্যবহার করে নিম্নলিখিতটি করছি:

U, S, Vt = svd(A)

কোন পরামর্শ?


1
এর তির্যকটি নিন S, যদি এটি ইতিমধ্যে তির্যক না হয়, এটি বর্গক্ষেত্র করুন, ক্রমহ্রাসমান ক্রম অনুসারে বাছাই করুন, ক্রমসংখ্যাটি নিন, শেষ মান দ্বারা ভাগ করুন, তারপরে এটি প্লট করুন।
shabbychef

@ শ্যাববিচেফ: আপনার অর্থ, সংখ্যার যোগফল নেওয়া এবং সমস্ত মানের যোগফলকে ভাগ করে নেওয়া?
কিংবদন্তি

হ্যাঁ. মতলব-এ এটি হবে[U,S,V] = svd(X);S = cumsum(sort(diag(S).^2,1,'descend'));S = S ./ S(end);plot(S);
শেবিবিচেফ

উত্তর:


13

এখানে একটি উদাহরণ যা আইপিথন প্রম্পটে আটকানো যায় এবং নীচের মতো চিত্র তৈরি করা যায় (এটি এলোমেলো ডেটা ব্যবহার করে):

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

#Make a random array and then make it positive-definite
num_vars = 6
num_obs = 9
A = np.random.randn(num_obs, num_vars)
A = np.asmatrix(A.T) * np.asmatrix(A)
U, S, V = np.linalg.svd(A) 
eigvals = S**2 / np.sum(S**2)  # NOTE (@amoeba): These are not PCA eigenvalues. 
                               # This question is about SVD.

fig = plt.figure(figsize=(8,5))
sing_vals = np.arange(num_vars) + 1
plt.plot(sing_vals, eigvals, 'ro-', linewidth=2)
plt.title('Scree Plot')
plt.xlabel('Principal Component')
plt.ylabel('Eigenvalue')
#I don't like the default legend so I typically make mine like below, e.g.
#with smaller fonts and a bit transparent so I do not cover up data, and make
#it moveable by the viewer in case upper-right is a bad place for it 
leg = plt.legend(['Eigenvalues from SVD'], loc='best', borderpad=0.3, 
                 shadow=False, prop=matplotlib.font_manager.FontProperties(size='small'),
                 markerscale=0.4)
leg.get_frame().set_alpha(0.4)
leg.draggable(state=True)
plt.show()

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


হারমান: +1 আপনার সময়ের জন্য আপনাকে ধন্যবাদ! আমি জানি এটি অনেক দিন কেটে গেছে তবে তবুও এটি পাওয়া সত্যিই ভাল :)
কিংবদন্তি

কি num_vars? এটি আপনার স্ক্রিপ্টে সংজ্ঞায়িত বলে মনে হচ্ছে না।
থিমেরার

@ ছাইমেরা - এটি ধরার জন্য ধন্যবাদ, আমি আমার প্রতিক্রিয়া আপডেট করেছি।
জোশ হেম্যান

@ জোশ হেমেন হ্যাঁ, আমি এটিকেও মাঝামাঝি সময়ে আবিষ্কার করেছি - তবে আমি মনে করি এটি এ এর ​​আকার থেকে গণনা করা ভাল হতে পারে
থেইমিরা

1
@ জোশহিমান আপনি এটি ব্যাখ্যা করতে পারেন: igিগভালস = এস ** 2 / এনপি.কমসাম (এস) [- 1] ?? আমি কিছু কাগজপত্র eigvals = S ** 2 / (n-1) এর উপর ভিত্তি করে দেখেছি যেখানে n বৈশিষ্ট্য সংখ্যা
seralouk
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.