সমস্যা সেটআপ
আমার কাছে উচ্চ মাত্রার (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 মিনিট, যা আমি এই পর্যায়ে বহন করতে পারি তার চেয়ে অনেক বেশি দীর্ঘ) হয়ে দাঁড়ায়।
আমি কার্নেল পিসিএ সম্পর্কে পড়েছি যা অনুভূতি খুব বড় যে ক্ষেত্রে এটির জন্য ভাল বলে মনে করা হয় তবে এটির রানটাইমটি যা সমস্যা হতে পারে যেহেতু আমি উভয় মাত্রা এবং উদাহরণের সংখ্যা বড় হওয়ার ক্ষেত্রেও মোকাবেলা করতে চাই ।
আমি এটি দেখতে পাচ্ছি, আমার অপশনগুলি হয় পিসিএকে "অনুকূলিতকরণ" বা অন্য মাত্রা হ্রাস পদ্ধতির জন্য অন্তর্নিহিত দ্রুততর বিকল্প হিসাবে বেছে নেওয়া।
আমার প্রশ্নগুলো
- পিসিএ একটি "অফলাইন" ফ্যাশন ব্যবহার করা যেতে পারে যে কোন আশা আছে? অর্থাত্, চিত্রগুলির একটি বিশাল ডেটা সেট ব্যবহার করে সেগুলিতে পিসিএ সঞ্চালন করুন এবং তারপরে অন্যান্য (নতুন!) ডেটার পয়েন্টগুলির মাত্রা হ্রাস করতে তাদের জন্য গণনা করা মূল উপাদানগুলি ব্যবহার করুন ?
- শীর্ষস্থানীয় 100 প্রধান উপাদানগুলির মধ্যে আমি কেবল আগ্রহী, বলুন যে আমি সময়ের আগেই জানি এই ধারণা করে আমি কি ইগেনভেেক্টর গণনার গতি বাড়িয়ে তুলতে পারি?
- আমার ক্ষেত্রে উপযুক্ত কোন বিকল্প মাত্রা হ্রাস পদ্ধতি আছে (যেমন, টি-স্নে প্রয়োগের আগে) যা পিসিএর চেয়ে দ্রুততর হবে? আমি এমন কিছু সন্ধান করছি যা জাভাতে সহজেই প্রয়োগ করা যায়।