এন, পি উভয়ই বড় হলে পিসিএ খুব ধীর: বিকল্প?


9

সমস্যা সেটআপ

আমার কাছে উচ্চ মাত্রার (4096) ডেটা পয়েন্ট (চিত্রগুলি) রয়েছে, যা আমি 2D তে ভিজ্যুয়ালাইজ করার চেষ্টা করছি। এই লক্ষ্যে, আমি কার্পাথির দ্বারা নিম্নলিখিত উদাহরণ কোডের অনুরূপ টি-স্নে ব্যবহার করছি ।

Scikit-শিখতে ডকুমেন্টেশন প্রথম ডেটার মাত্রা কম পিসিএ ব্যবহার বিশেষ পরামর্শ দেওয়া হচ্ছে:

বৈশিষ্ট্যের সংখ্যাটি খুব বেশি হলে মাত্রার পরিমাণকে যুক্তিসঙ্গত পরিমাণ (যেমন 50) হ্রাস করার জন্য আরও একটি মাত্রিক হ্রাস পদ্ধতি (যেমন ঘন ডেটার জন্য পিসিএ বা স্পার্স ডেটার জন্য ট্র্যাঙ্কেটেড এসভিডি) ব্যবহার করার পরামর্শ দেওয়া হয়।

আমি জাভাতে পিসিএ করতে দার্কস.লিউ এই কোডটি ব্যবহার করছি:

//C=X*X^t / m
DoubleMatrix covMatrix = source.mmul(source.transpose()).div(source.columns);
ComplexDoubleMatrix eigVal = Eigen.eigenvalues(covMatrix);
ComplexDoubleMatrix[] eigVectorsVal = Eigen.eigenvectors(covMatrix);
ComplexDoubleMatrix eigVectors = eigVectorsVal[0];
//Sort sigen vector from big to small by eigen values 
List<PCABean> beans = new ArrayList<PCA.PCABean>();
for (int i = 0; i < eigVectors.columns; i++) {
    beans.add(new PCABean(eigVal.get(i).real(), eigVectors.getColumn(i)));
}
Collections.sort(beans);
DoubleMatrix newVec = new DoubleMatrix(dimension, beans.get(0).vector.rows);
for (int i = 0; i < dimension; i++) {
    ComplexDoubleMatrix dm = beans.get(i).vector;
    DoubleMatrix real = dm.getReal();
    newVec.putRow(i, real);
}
return newVec.mmul(source);

এটি লিনিয়ার বীজগণিত ক্রিয়াকলাপগুলির জন্য jblas ব্যবহার করে, যা আমি যা পড়েছি সেখান থেকে দ্রুততম বিকল্প বলে মনে করা হচ্ছে। যাইহোক, ইগেনভেেক্টর এবং আইগেনভ্যালুগুলি (3,4 লাইনগুলি) গণনা করা একটি বিশাল বাধা (10 মিনিট, যা আমি এই পর্যায়ে বহন করতে পারি তার চেয়ে অনেক বেশি দীর্ঘ) হয়ে দাঁড়ায়।

আমি কার্নেল পিসিএ সম্পর্কে পড়েছি যা অনুভূতি খুব বড় যে ক্ষেত্রে এটির জন্য ভাল বলে মনে করা হয় তবে এটির রানটাইমটি হে(এন3)যা সমস্যা হতে পারে যেহেতু আমি উভয় মাত্রা এবং উদাহরণের সংখ্যা বড় হওয়ার ক্ষেত্রেও মোকাবেলা করতে চাই ।

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

আমার প্রশ্নগুলো

  1. পিসিএ একটি "অফলাইন" ফ্যাশন ব্যবহার করা যেতে পারে যে কোন আশা আছে? অর্থাত্, চিত্রগুলির একটি বিশাল ডেটা সেট ব্যবহার করে সেগুলিতে পিসিএ সঞ্চালন করুন এবং তারপরে অন্যান্য (নতুন!) ডেটার পয়েন্টগুলির মাত্রা হ্রাস করতে তাদের জন্য গণনা করা মূল উপাদানগুলি ব্যবহার করুন ?
  2. শীর্ষস্থানীয় 100 প্রধান উপাদানগুলির মধ্যে আমি কেবল আগ্রহী, বলুন যে আমি সময়ের আগেই জানি এই ধারণা করে আমি কি ইগেনভেেক্টর গণনার গতি বাড়িয়ে তুলতে পারি?
  3. আমার ক্ষেত্রে উপযুক্ত কোন বিকল্প মাত্রা হ্রাস পদ্ধতি আছে (যেমন, টি-স্নে প্রয়োগের আগে) যা পিসিএর চেয়ে দ্রুততর হবে? আমি এমন কিছু সন্ধান করছি যা জাভাতে সহজেই প্রয়োগ করা যায়।

উত্তর:


8

প্রশ্ন 1: ধরা যাক আপনি একটি ডেটা ম্যাট্রিক্স পালন করেছেন এক্সআরএন×পি। এটি থেকে আপনি আইজেন্ডেকম্পজিশনটি গণনা করতে পারেনএক্সটিএক্স=প্রশ্নঃΛপ্রশ্নঃটি। এখন প্রশ্নটি হল: আমরা যদি একই জনসংখ্যার থেকে নতুন ডেটা আসি, সম্ভবত ম্যাট্রিক্সে সংগৃহীতজেডআরমি×পি, ইচ্ছাশক্তি জেডপ্রশ্নঃ এর আদর্শ অরথোগোনাল ঘোরার কাছাকাছি থাকুন জেড? এই ধরণের প্রশ্নটি ডেভিস-কাহান উপপাদ্য এবং ম্যাট্রিক্স পার্টহিউইন তত্ত্ব দ্বারা সাধারণভাবে সমাধান করা হয়েছে (যদি আপনি কোনও অনুলিপি পেতে পারেন, স্টুয়ার্ট এবং সান এর 1990 এর পাঠ্যপুস্তকটি আদর্শ রেফারেন্স)।

প্রশ্ন 2: আপনি অবশ্যই শীর্ষের প্রয়োজন যদি আপনি জানেন তবে আপনি অবশ্যই জিনিসগুলিকে দ্রুত করতে পারবেন eigenvectors। আরআই এর rARPACKজন্য এটি ব্যবহার করুন ; আমি নিশ্চিত একটি জাভা সমতুল্য যেহেতু তারা যাইহোক সমস্ত দুর্গের মোড়ক।

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


3

আপনি যে কোডটি ব্যবহার করছেন তা পুরো ম্যাট্রিক্সকে উল্টে দেবে। এটি ইতিমধ্যে ইতিমধ্যে ও (পি ^ 3)। আপনি ও এর ফলাফল আনুমানিক করতে পারেন (পি ^ 2) তবে এটি এখনও ধীর হবে (তবে সম্ভবত 100x দ্রুত)। মূলত, একটি স্বেচ্ছাসেবক ভেক্টর নিন এবং পাওয়ার পুনরাবৃত্তি করুন। উচ্চ সম্ভাবনার সাথে, আপনি প্রথম ইগেনভেেক্টরটির একটি ভাল আনুমানিকতা পাবেন। তারপরে ম্যাট্রিক্স থেকে এই ফ্যাক্টরটি সরান, দ্বিতীয়টি পেতে পুনরাবৃত্তি করুন। প্রভৃতি

তবে আপনি কি চেষ্টা করেছেন যদি দ্রুত বার্নস হট টিএসএনই বাস্তবায়ন ELKI তে সম্ভবত আপনার ডেটা যেমন কভার ট্রি হিসাবে একটি সূচক দিয়ে কাজ করবে? অন্যরা ব্যর্থ হলে আমি সেই বাস্তবায়নটি ভালভাবেই করেছি।


3
"Whp" কি করে? জন্য দাঁড়ানো?
কোডিওলজিস্ট

উচ্চ সম্ভাবনা সহ। পরিসংখ্যান সাহিত্য দেখুন।
কিউইট আছে - অ্যানি-মৌসেস

2

যদি আপনার লক্ষ্যটি কেবলমাত্র একটি সরল এবং প্রত্যক্ষ উপায়ে মাত্রা হ্রাস প্রভাবিত করে, আপনি একটি বিকল্প ন্যূনতম স্কোয়ার (এএলএস) কৌশল চেষ্টা করতে পারেন। উদাহরণস্বরূপ অ্যাপাচি স্পার্কের mlibএকটি ALS বাস্তবায়ন রয়েছে এবং আমি বিশ্বাস করি একটি জাভা এপিআই সরবরাহ করে। এটি আপনাকে একটি দেওয়া উচিতএন×কে ম্যাট্রিক্স এবং ক কে×পিম্যাট্রিক্স। দ্যকে×পি ম্যাট্রিক্সে ভিজ্যুয়েজেবল সারি ভেক্টর থাকবে।

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