কাটা কাটা এসভিডি, একটি সময়ে একক মান / ভেক্টর গণনা করা


11

এমন কি কোনও কাটা এসভিডি অ্যালগরিদম রয়েছে যা এককালে একক মানকে গণনা করে?

আমার সমস্যা: আমি একটি বড় ঘন ম্যাট্রিক্স এম এর প্রথম একবাক্য মানগুলি (এবং একক ভেক্টর) গণনা করতে চাই , তবে আমি জানি না যে কে এর উপযুক্ত মানটি হবে। এম বড়, সুতরাং দক্ষতার কারণে, আমি কেবলমাত্র ছোট এসভি এর পরে কেটে ফেলার জন্য সম্পূর্ণ এসভিডি মূল্যায়ন করব না।kMkM

আদর্শভাবে, একক মানগুলি ক্রমিকভাবে বৃহত্তম ( σ 1 ) থেকে ক্ষুদ্রতম ( σ n ) হিসাবে গণনা করার উপায় থাকবে । এইভাবে, আমি যদি σ কে / hold 1 কিছু প্রান্তিকের নীচে পড়ে তবে কে থ্রি সিঙ্গুলার মান গণনার পরে গণনাটি কেবল থামিয়ে দিতে পারি ।σ1,σ2,σ1σnkσk/σ1

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


আপনার এম বর্গক্ষেত্র বা আয়তক্ষেত্রাকার? যদি আয়তক্ষেত্রাকার হয়, আপনি কি দীর্ঘ বা সংক্ষিপ্ত একক ভেক্টর চান? অর্থাৎ এম যদি এম> এন (এমএক্সএন) হয় তবে আপনি কি (এমএক্সকে) বা (কেএক্সএন) চান?
ম্যাক্স হাচিনসন

এম আয়তক্ষেত্রাকার, কলামগুলির চেয়ে অনেক বেশি সারি সহ। আমি সংক্ষিপ্ত একক ভেক্টর চাই (অর্থাত V, এম = ইউ এস ভি ^ টি তে)।
ইলেকট্রিক

উত্তর:


6

আপনি যদি আনুমানিক র‌্যাঙ্ক-কে ফ্যাক্টরিফিকেশন চান তবে কয়েকটি বিকল্প উপলব্ধ রয়েছে।

  1. দৃ rank়ভাবে র‌্যাঙ্ক-প্রকাশকারী কিউআর ফ্যাক্টরিজেশন
  2. ইন্টারপোলটিভ পচন (আইডি) এবং অন্যান্য এলোমেলো কৌশল।

AMNTfactor×σk+1(A):=ϵ

উপরের ফর্মটির একটি আনুমানিক অনুষঙ্গকে স্ট্যান্ডার্ড কৌশলগুলি ব্যবহার করে কিউআর বা এসভিডি এর মতো একটি স্ট্যান্ডার্ড পচায় রূপান্তর করা যেতে পারে। হালকো, মার্টিনসন এবং ট্রপ্পের কাগজে একটি ভাল পর্যালোচনা পাওয়া যায় "এলোমেলোভাবে কাঠামো সন্ধান করা: আনুমানিক ম্যাট্রিক্স পচানোর জন্য সম্ভাব্য আলগোরিদিম"

সফ্টওয়্যারটির ক্ষেত্রে আইডি অ্যালগরিদমের একটি ইন্টারফেস স্কিপিতে পাওয়া যায় (scipy.linalg.interpolative) http://docs.scipy.org/doc/scipy-dev/references/linalg.interpolative.html যা আপনাকে ব্যবহারকারীকে নির্দিষ্ট করার অনুমতি দেয় ।ϵ


2

(সম্পাদিত, কারণ আমি প্রথমে প্রশ্নটি ভুলভাবে লিখেছি; আপনি ইতিমধ্যে জানেন যে প্রথম একবচনীয় মান গণনা করার জন্য রুটিনগুলি উপলব্ধ )k

আপনি যদি পুরো এসভিডি গণনা করার পদ্ধতিকে বাদ দেন তবে আংশিক এসভিডি অ্যালগরিদম সম্পর্কিত হার্মিটিয়ান ইজেনভ্যালু সমস্যা সমাধানের জন্য পুনরাবৃত্ত পদ্ধতিগুলি ব্যবহার করতে হ্রাস করে। সুতরাং, আপনি যে কৌশলটি গ্রহণ করতে পারেন তা হ'ল এই ধরণের জিনিসটি নিজের হাতে হ্যান্ড-কোড করা এবং শিফট-ইনভার্ট কৌশলটির মতো কিছু ব্যবহার করে আপনি যতক্ষণ না থামতে চান ততক্ষণ অবধি সবচেয়ে বড় অব্যাহত একক মানের জন্য সমাধান চালিয়ে যান। মত অত্যাধুনিক প্যাকেজ জিনিস এই সাজানোর করছেন মার্জিত উপায়ে হতে পারে SLEPc

আর একটি কৌশল নিম্নলিখিত হবে:

  • বৃহত্তম একবচন মান গণনা ।s1
  • বিচ্ছিন্ন এসভিডি রুটিনের সম্পূর্ণ সহনশীলতাটিকে , যেখানে আপনার প্রান্তিক, এবং হ'ল কতগুলি সম্ভাব্য বহির্মুখী একক মানগুলি চান তা নির্ধারণ করার জন্য কিছু সুরক্ষা ফ্যাক্টর হিসাব করতে.τs1fτ0<f1
  • বিরল এসভিডি রুটিন কল করুন।

যদি বিচ্ছিন্ন এসভিডি রুটিন একটি পাতলা এসভিডি গণনা করে (এবং আমি তা দেখতে পাচ্ছি না কেন) তবে এই কৌশলটি আপনাকে পছন্দ করে এমন একক মানগুলি (আরও সম্ভবত কিছু অতিরিক্ত মান) দেয়, কারণ পরম সহিষ্ণুতার নীচের মানগুলি হবে শূন্য হিসাবে গণ্য করা। সেক্ষেত্রে আপনি scipy.sparse.linalg.svds ব্যবহার করতে পারেন , উল্লেখ করে যে একটি alচ্ছিক প্যারামিটার, এবং আপনাকে এটির কোনও পূর্বরূপ নির্দিষ্ট করতে হবে না ।k


আপনি যদি scipy.sparse.linalg.svds এ 'কে' নির্দিষ্ট না করে থাকেন তবে 'টোল' পরামিতি নির্বিশেষে এটি কে = 6 এ ডিফল্ট হবে। এটি কোনও বাগ কিনা তা স্পষ্ট নয় বা 'টোল' গণিত একবাক্য মানের (তাদের আকারের চেয়ে বেশি) যথার্থতার কথা বলে মনে করা হচ্ছে
নিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.