ঘন ম্যাট্রিক্স নিম্নমানের হয় কিনা তা দ্রুত নির্ধারণ করে


13

যে সফ্টওয়্যার প্রকল্পে আমি কাজ করছি তাতে ঘন কম-র‌্যাঙ্কের ম্যাট্রিক্সের জন্য নির্দিষ্ট কিছু গণ্যকরণ অনেক সহজ। কিছু সমস্যার উদাহরণগুলি ঘন নিম্ন-র‌্যাঙ্কের ম্যাট্রিকগুলিতে জড়িত, তবে সেগুলি আমাকে কারণ হিসাবে না বলে সম্পূর্ণ দেওয়া হয়, সুতরাং আমি যদি নিম্ন-স্তরের কাঠামোর সুবিধা নিতে চাই তবে ম্যাট্রিক্সের র‌্যাঙ্ক এবং ফ্যাক্টরটি পরীক্ষা করতে হবে I'll ।

প্রশ্নে থাকা ম্যাট্রিকগুলি সাধারণত সম্পূর্ণ বা প্রায় সম্পূর্ণ ঘন হয়, এনটি একশ থেকে কয়েক হাজার পর্যন্ত থাকে। যদি কোনও ম্যাট্রিক্সের নিম্ন র‌্যাঙ্ক থাকে (5 থেকে 10 এর চেয়ে কম বলুন), তবে এসভিডি গণনা করা এবং এটি একটি নিম্ন-র‌্যাঙ্কের ফ্যাক্টরাইজেশন গঠন করা চেষ্টা করার মতো। তবে, ম্যাট্রিক্স যদি নিম্ন পদে না থাকে, তবে চেষ্টাটি নষ্ট হবে।

সুতরাং আমি একটি পূর্ণ এসভিডি ফ্যাক্টরীকরণ করার প্রচেষ্টা বিনিয়োগ করার আগে র‌্যাঙ্ক কম কিনা তা নির্ধারণের একটি দ্রুত এবং যুক্তিসঙ্গতভাবে নির্ভরযোগ্য উপায়টি খুঁজে পেতে চাই। যদি কোনও পর্যায়ে এটি স্পষ্ট হয়ে যায় যে র‌্যাঙ্কটি কাটঅফের উপরে রয়েছে, প্রক্রিয়াটি তত্ক্ষণাত বন্ধ হয়ে যেতে পারে। প্রক্রিয়াটি যদি ভুলভাবে ম্যাট্রিক্সকে নিম্ন স্তরের হিসাবে ঘোষণা করে তবে এটি কোনও বিশাল সমস্যা নয়, যেহেতু আমি এখনও নিম্ন র‌্যাঙ্কটি নিশ্চিত করার জন্য একটি পূর্ণ এসভিডি করছিলাম এবং একটি নিম্ন-র‌্যাঙ্কের কারণ নির্ণয় করব।

যে বিকল্পগুলি আমি বিবেচনা করেছি সেগুলির মধ্যে একটি র‌্যাঙ্ক প্রকাশকারী এলইউ বা কিউআর ফ্যাক্টেরাইজেশন অন্তর্ভুক্ত রয়েছে যার পরে চেক হিসাবে একটি সম্পূর্ণ এসভিডি রয়েছে। আমার অন্যান্য বিষয়গুলি বিবেচনা করা উচিত?

উত্তর:


8

একটি ঝরঝরে কৌশল আমি সম্প্রতি এই কাগজ থেকে শিখেছি আছে । আপনি র‌্যাঙ্ক-প্রকাশের কিউআর করা শুরু করেন এবং আপনার প্রথম প্রতিবিম্বের পরে থামুন , যখন আপনি ফর্মটির ম্যাট্রিক্স আকারের , এবং size এর ত্রিভুজাকার সহ সাধারণত ত্রিভুজাকার নয় (যেহেতু আমরা আমাদের মূল লুপের প্রথম পুনরাবৃত্তির পরে থামলাম )। এই মুহুর্তে, আপনি check : যদি এটি ধারণ করে, তবে ম্যাট্রিক্স rank থেকে সর্বাধিক দূরত্বে রয়েছে[ আর 1 আর 12 0 আর 22 ] ,k

[R1R120R22],
R1k×kR22k‖R22‖≤εAε≤k; অন্যথায় এটি হওয়া উচিত নয় (সংখ্যাসূচক ত্রুটিগুলি বাদ দিয়ে)।

এই পদ্ধতিটির জন্য ঘন ম্যাট্রিক্সের জন্য খরচ হয় ।O(n2k)n×n


এটি মূলত সেই পদ্ধতির যা আমি প্রশ্নটিতে বর্ণনা করেছি। আমি মনে করি যে ওল্ফগ্যাং ব্যাঙ্গারথের প্রস্তাবিত উত্তর চেয়ে ভাল করতে পারে । O(n2k)
— ব্রায়ান বোর্চার্স

7

অবশ্যই সমস্যাটি হ'ল প্রকৃত র‌্যাঙ্কের গণনা করা (উদাহরণস্বরূপ, কিউআর পঁচনের মাধ্যমে) ম্যাট্রিক্সের নিম্ন-র‌্যাঙ্ক উপস্থাপনা গণনা করার চেয়ে কোনও সস্তা নয়।

আপনি সবচেয়ে ভাল যা করতে পারেন তা হ'ল নিম্ন-স্তরের আনুমানিক সন্ধানের জন্য একটি এলোমেলোমী অ্যালগরিদম ব্যবহার করা। এগুলি, তাত্ত্বিকভাবে কমপক্ষে পুরো ম্যাট্রিক্সে কাজ করার চেয়ে উল্লেখযোগ্যভাবে দ্রুত হতে পারে কারণ প্রকৃতপক্ষে এগুলি কেবল ম্যাট্রিক্সের অনুমানের জন্য এলোমেলো উপ-স্পেসে গলনা করে।

মাপের ম্যাট্রিক্সের জন্য মণ এর মূল্য এটি ভাল প্রশ্ন হতে পারে তবে আপনার সমস্যাগুলি যদি সত্যিই বড় হয়ে যায় তবে আমি সন্দেহ করব যে এটির মূল্য পরিশোধ হয়েছে।100×100


আমি এই অ্যালগরিদমগুলি সম্পর্কে যা জানি, সেগুলি থেকে তারা একটি নিম্ন-র‌্যাঙ্কের ম্যাট্রিক্স উত্পাদন করে যা প্রদত্ত ম্যাট্রিক্সের সাথে আদর্শগতভাবে নিকটে close আমি কিনা বা না সেখানে একটি (উদাহরণস্বরূপ) পদে -10 বা তার কম ম্যাট্রিক্স খুব দেওয়া ম্যাট্রিক্স পাসে যে জানা প্রয়োজন (1.0e -10 বা ভাল একটি আপেক্ষিক ত্রুটি বলে।)
— ব্রায়ান Borchers

হ্যাঁ, তবে আপনি প্রজেক্টড (নিম্ন-মাত্রিক) ম্যাট্রিক্সের কিউআর পচনও করতে পারেন এবং যদি সেই ক্ষয়টি পুরো র‌্যাঙ্কের অভাব প্রকাশ করে, তবে আপনার কাছেও র‌্যাঙ্কের অভাবজনিত মূল ম্যাট্রিক্স থাকবে have মূল ম্যাট্রিক্সে কিউআর পচন করার জন্য যে মানদণ্ডটি আপনার দরকার ছিল তা কি নয়?
— ওল্ফগ্যাং ব্যাঙ্গার্থ

আমি দেখতে পাচ্ছি যে অভিক্ষিপ্ত ম্যাট্রিক্স পদে চেয়ে কম হয় বা সমান করতে (র্যান্ডম ম্যাট্রিক্স মধ্যে সারির সংখ্যা আমি সংখ্যাবৃদ্ধি বার) এবং উ: পদে যদি র্যাঙ্ক হল , তারপর মূল ম্যাট্রিক্স হতে পারে না বা তার চেয়ে কম র‌্যাঙ্কের । যদি কম র্যাঙ্ক হল তারপর আমি শুধু হতভাগ্য হয়েছে বা হতে পারে কম পদে ছিল । পদে খোঁজা দ্বারা ম্যাট্রিক্স মধ্যে সম্পন্ন করা যাবে সময়। যাইহোক, আমি যে এলোমেলো ম্যাট্রিক্সকে বার বার করে তাকে ঘন করা হয়, তবে অপসারণটি নট লাগেকে কে - 1 কে এ কে কে এন ও ( কে 2 এন ) এ ও ( কে এন 2 )kkk−1kAkknO(k2n)AO(kn2)সময়। এমন কি বিরল ম্যাট্রিক রয়েছে যা উচ্চ সম্ভাবনা সহ র‌্যাঙ্কটি সংরক্ষণ করে?
— ব্রায়ান বোর্চার্স

আমি জানি না। আমি সম্মত (এবং বোঝাতে চাইছি) যে অ্যালগরিদম কেবল তখনই আপনাকে বলতে পারে যদি কোনও ম্যাট্রিক্স পূর্ণ পদে না থাকে। এটা তোলে তোমাকে বলতে পারবো না যদি ম্যাট্রিক্স হয় পূর্ণ র্যাঙ্ক যদি না আপনি সব গ্রহণ র্যান্ডম নির্দেশ। আমার আশা কেবল এই যে আপনি যথেষ্ট পরিমাণে ছোট জন্য উত্তর পাবেন যেখানে । কে কে এন 2 ≪ এন 3k=nkkn2≪n3
— ওল্ফগ্যাং ব্যাঙ্গার্থ

1

চেষ্টা করার মতো আরেকটি উপায় হ'ল অ্যাডাপিটিভ ক্রস অ্যাডেক্সিমেশন (এসিএ) ব্যবহার করা। এটি একটি দুর্দান্ত জনপ্রিয় অ্যালগরিদম যার অনেকগুলি বাস্তবায়ন অনলাইনে উপলব্ধ। রেফারেন্সের জন্য, আপনি মূল কাগজটি দেখতে পারেন:

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

যদি হিউরিস্টিকাল অবশিষ্টাংশগুলি (অ্যালগোরিদম দেখুন) যথেষ্ট হয়, আমি বিশ্বাস করি যে আপনার জটিলতা হবে , যেখানে বর্গ ম্যাট্রিক্সের আকার এবং পদমর্যাদার। দ্রষ্টব্য, যে র‌্যাঙ্ক নির্ধারিত কাটছাঁটি সহনশীলতা এপসিলনের একটি ফাংশন । সঠিক এবং গ্যারান্টিযুক্ত ত্রুটির জন্য ।N r ( ϵ ) r ϵ O ( N 2 r )O(Nr)Nr(ϵ)rϵO(N2r)


0

সাধারণ ক্ষেত্রে যেখানে ম্যাট্রিক্স সমান্তরাল ধনাত্মক-নির্দিষ্ট, সেখানে তার 20 টি বড় ইগ্যালভ্যালু গণনা করুন এবং দেখুন যে তারা , বা নিয়মের তুলনা করে। এআরপ্যাক এর জন্য দ্রুত; আরও গুরুত্বপূর্ণ, এটির জন্য একটি ফাংশন প্রয়োজন । সুতরাং সাধারণ , ইগেনুয়ালুগুলি দেখুন (এটি একটি তাত্ক্ষণিক না করে লিনোপ হিসাবে p)→ 0 x → এA→0এ এ টি এx→AxAATA

scipy.sparse.linalg.svds করে এই: LinOp Arpack জন্য কোন আকারের:এ(ATA)→A

from scipy.sparse.linalg import svds
sing = svds( A, k=20, tol=1e-4, return_singular_vectors=False )  # v0=random
# runtimes on random-normal n x n:
# n = 100, 1k, 2k
#       5, 130, 770 ms
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.