আপনি যা করছেন তা ভুল: পিসিএর মতো প্রেসার গণনা করার কোনও মানে হয় না! বিশেষত, সমস্যাটি আপনার # 5 ধাপে রয়েছে।
পিসিএর জন্য প্রেসের কাছে নির্দোষ পন্থা
ndx(i)∈Rd,i=1…nx(i)X(−i)kU(−i)∥∥x(i)−x^(i)∥∥2=∥∥x(i)−U(−i)[U(−i)]⊤x(i)∥∥2i
PRESS=?∑i=1n∥∥x(i)−U(−i)[U(−i)]⊤x(i)∥∥2.
সরলতার জন্য, আমি এখানে কেন্দ্রীকরণ এবং স্কেলিংয়ের বিষয়গুলি উপেক্ষা করছি।
নিষ্প্রভ দৃষ্টিভঙ্গি ভুল
উপরের সমস্যাটি হ'ল আমরা the পূর্বাভাস গণনা করতে use ব্যবহার এবং এটি খুব খারাপ জিনিস।x(i)x^(i)
কোনও রিগ্রেশন কেসের ক্ষেত্রে গুরুত্বপূর্ণ পার্থক্যটি নোট করুন, যেখানে পুনর্গঠনের ত্রুটির সূত্রটি মূলত একই , কিন্তু ভবিষ্যদ্বাণী predictor ভেরিয়েবল ব্যবহার করে এবং নির্ণয় করা হয় না ব্যবহার । এটি পিসিএতে সম্ভব নয়, কারণ পিসিএতে কোনও নির্ভরশীল এবং স্বতন্ত্র ভেরিয়েবল নেই: সমস্ত ভেরিয়েবলগুলি একসাথে চিকিত্সা করা হয়।∥∥y(i)−y^(i)∥∥2y^(i)y(i)
বাস্তবে এটা যে প্রেস উপরের হিসাবে নির্ণিত উপাদান সংখ্যা বাড়িয়ে দিয়ে হ্রাস করতে পারেন এর মানে হল এবং সর্বনিম্ন পৌঁছাতে না। যা একটিকে ভাবতে পরিচালিত করবে যে সমস্ত উপাদানগুলি উল্লেখযোগ্য। অথবা হতে পারে কিছু ক্ষেত্রে এটি সর্বনিম্নে পৌঁছে যায়, তবে তবুও সর্বোত্তম মাত্রিকতার চেয়ে বেশি পরিমাণে বাড়ে।kd
একটি সঠিক পদ্ধতির
বেশ কয়েকটি সম্ভাব্য পন্থা রয়েছে, ব্রো এট আল দেখুন। (২০০৮) উপাদান মডেলের ক্রস-বৈধকরণ: একটি ওভারভিউ এবং তুলনা করার জন্য বর্তমান পদ্ধতির একটি সমালোচনা । একটি পদ্ধতি হ'ল একবারে একটি ডেটার পয়েন্টের একটি মাত্রা (যেমন পরিবর্তে ) ছেড়ে দেওয়া হয়, যাতে প্রশিক্ষণ তথ্যটি একটি হারানো মান সহ একটি ম্যাট্রিক্সে পরিণত হয় , এবং তারপরে PCA সহ এই অনুপস্থিত মানটির পূর্বাভাস ("অভিমান") করতে হবে। (অবশ্যই অবশ্যই এলোমেলোভাবে ম্যাট্রিক্স উপাদানগুলির কিছু বড় ভগ্নাংশ রাখা যেতে পারে, যেমন 10%)। সমস্যাটি হ'ল অনুপস্থিত মানগুলির সাথে পিসিএর কম্পিউটিংটি কম্পিউটেশনালি বেশ ধীর হতে পারে (এটি ইএম অ্যালগরিদমের উপর নির্ভর করে) তবে এখানে বহুবার পুনরাবৃত্তি করা দরকার। আপডেট: দেখুন http://alexhwilliams.info/itsneuronalblog/2018/02/26/crossval/x(i)jx(i) একটি সুন্দর আলোচনা এবং পাইথন বাস্তবায়নের জন্য (সর্বনিম্ন স্কোয়ারগুলি পরিবর্তনের মাধ্যমে অনুপস্থিত মানগুলির সাথে পিসিএ প্রয়োগ করা হবে)।
আমি যে পদ্ধতির চেয়ে অনেক বেশি ব্যবহারিক বলে মনে করেছি তা হ'ল একটি ডেটা পয়েন্ট leave একবারে ছেড়ে দেওয়া, প্রশিক্ষণ ডেটার উপর ঠিক পিসিএ গণনা করুন (ঠিক উপরে হিসাবে), তবে তারপরে , তাদের একবারে ছেড়ে যান এবং বাকীটি ব্যবহার করে পুনর্গঠনের ত্রুটি গণনা করুন। এটি শুরুতে বেশ বিভ্রান্তিকর হতে পারে এবং সূত্রগুলি বেশ অগোছালো হয়ে যায় তবে বাস্তবায়ন বরং সোজা ward আমাকে প্রথমে (কিছুটা ভীতিজনক) সূত্রটি দেওয়া যাক এবং তারপরে সংক্ষেপে এটি ব্যাখ্যা করুন:x(i)x(i)
PRESSPCA=∑i=1n∑j=1d∣∣∣x(i)j−[U(−i)[U(−i)−j]+x(i)−j]j∣∣∣2.
এখানে অভ্যন্তরীণ লুপটি বিবেচনা করুন। আমরা এক বিন্দু বাদ এবং নির্ণিত প্রশিক্ষণ ডেটার উপর প্রধান উপাদান, । এখন আমরা প্রতিটি মান কে পরীক্ষারূপে রাখি এবং ভবিষ্যদ্বাণীটি সম্পাদনের জন্য অবশিষ্ট মাত্রাগুলি use ব্যবহার । ভবিষ্যদ্বাণী হয় -th "অভিক্ষেপ" (লিস্ট স্কোয়ার অর্থে) এর তুল্য এর subspace সম্মুখের দৃশ্যও দ্বারা । এটি গণনা করতে, পিসি স্পেসে একটি বিন্দু সন্ধান করুন যা নিকটতমx(i)kU(−i)x(i)jx(i)−j∈Rd−1x^(i)jjx(i)−jU(−i)z^Rkx(i)−j গণনা করে যেখানে হয় সঙ্গে -th সারি লাথি মেরে ফেলেছে এবং অর্থ সিউডোইনভার্স। এখন মানচিত্রের the মূল স্থানটিতে ফিরে যান: এবং এর তম স্থানাঙ্ক গ্রহণ করুন । z^=[U(−i)−j]+x(i)−j∈RkU(−i)−jU(−i)j[⋅]+z^U(−i)[U(−i)−j]+x(i)−jj[⋅]j
সঠিক পদ্ধতির একটি অনুমান
আমি পিএলএসটুলবক্সে ব্যবহৃত অতিরিক্ত সাধারণীকরণটি বেশ বুঝতে পারি না, তবে এখানে একই পদ্ধতিতে চলে আসা একটি পদ্ধতি রয়েছে।
মূল উপাদানগুলির map মানচিত্র করার আরও একটি উপায় রয়েছে : ie, অর্থাত সিউডো-ইনভার্সের পরিবর্তে কেবল ট্রান্সপোজ নিন। অন্য কথায়, পরীক্ষার জন্য যে মাত্রাটি বাদ পড়েছে সেগুলি মোটেও গণনা করা হয় না এবং সংশ্লিষ্ট ওজনগুলিও কেবল লাথি মেরে বের করা হয়। আমি মনে করি এটি কম নির্ভুল হওয়া উচিত, তবে প্রায়শই গ্রহণযোগ্য হতে পারে। ভাল জিনিস হ'ল ফলস্বরূপ সূত্রটি নীচের মত এখন ভেক্টরাইজ করা যেতে পারে (আমি গণনা বাদ দিই):x(i)−jz^approx=[U(−i)−j]⊤x(i)−j
PRESSPCA,approx=∑i=1n∑j=1d∣∣∣x(i)j−[U(−i)[U(−i)−j]⊤x(i)−j]j∣∣∣2=∑i=1n∥∥(I−UU⊤+diag{UU⊤})x(i)∥∥2,
আমি কোথায় লিখেছে যেমন সংহতি জন্য, এবং শুন্যতে সমস্ত অ-তির্যক উপাদানের সেটিং উপায়। নোট করুন যে এই সূত্রটি হুবহু সংশোধন করে প্রথমটির মতো (নিষ্পাপ প্রেস) মতো দেখায়! আরও লক্ষ করুন যে এই সংশোধনটি কেবল PLS_Toolbox কোডের মতো তির্যক উপর নির্ভর করে । যাইহোক, সূত্রটি PLS_Toolbox এ প্রয়োগ করা বলে মনে হচ্ছে তার থেকে এখনও আলাদা এবং এই পার্থক্যটি আমি ব্যাখ্যা করতে পারি না।U(−i)Udiag{⋅}UU⊤
আপডেট (ফেব্রুয়ারী 2018): উপরে আমি একটি পদ্ধতিটিকে "সঠিক" এবং অন্যটিকে "আনুমানিক" বলেছি কিন্তু আমি এতটা নিশ্চিত নই যে এটি অর্থবহ। উভয় পদ্ধতিই বোধগম্য এবং আমি মনে করি দুটিও সঠিক নয়। আমি সত্যিই পছন্দ করি যে "আনুমানিক" পদ্ধতির একটি সহজ সূত্র রয়েছে। এছাড়াও, আমার মনে আছে যে আমার কিছু ডেটাসেট ছিল যেখানে "আনুমানিক" পদ্ধতির ফলাফল পাওয়া গেছে যা আরও অর্থবহ বলে মনে হয়েছিল। দুর্ভাগ্যক্রমে, আমি বিশদটি আর মনে করি না।
উদাহরণ
এই পদ্ধতিগুলি দুটি সুপরিচিত ডেটাসেটের জন্য কীভাবে তুলনা করে: আইরিস ডেটাসেট এবং ওয়াইন ডেটাসেট। নোট করুন যে নিষ্পাপ পদ্ধতিটি একঘেয়েমি হ্রাসকারী বক্ররেখা উত্পাদন করে, অন্য দুটি পদ্ধতি ন্যূনতম সহ একটি বক্ররেখা দেয়। আরও মনে রাখবেন যে আইরিস ক্ষেত্রে আনুমানিক পদ্ধতিটি 1 পিসিকে অনুকূল নম্বর হিসাবে প্রস্তাব দেয় তবে সিউডোইনভার্স পদ্ধতিটি 2 পিসি প্রস্তাব দেয়। (এবং আইরিস ডেটাসেটের জন্য যে কোনও পিসিএ স্ক্রেটারপ্লোটের দিকে তাকালে মনে হয় যে প্রথম পিসি উভয়ই কিছু সংকেত বহন করে)) এবং ওয়াইন ক্ষেত্রে সিউডোইনসার্স পদ্ধতিটি 3 পিসিতে স্পষ্টভাবে নির্দেশ করে, যেখানে আনুমানিক পদ্ধতিটি 3 এবং 5 এর মধ্যে সিদ্ধান্ত নিতে পারে না।
ক্রস-বৈধতা সম্পাদন করতে ফলাফলগুলি প্লট করতে মাতলাব কোড
function pca_loocv(X)
%// loop over data points
for n=1:size(X,1)
Xtrain = X([1:n-1 n+1:end],:);
mu = mean(Xtrain);
Xtrain = bsxfun(@minus, Xtrain, mu);
[~,~,V] = svd(Xtrain, 'econ');
Xtest = X(n,:);
Xtest = bsxfun(@minus, Xtest, mu);
%// loop over the number of PCs
for j=1:min(size(V,2),25)
P = V(:,1:j)*V(:,1:j)'; %//'
err1 = Xtest * (eye(size(P)) - P);
err2 = Xtest * (eye(size(P)) - P + diag(diag(P)));
for k=1:size(Xtest,2)
proj = Xtest(:,[1:k-1 k+1:end])*pinv(V([1:k-1 k+1:end],1:j))'*V(:,1:j)';
err3(k) = Xtest(k) - proj(k);
end
error1(n,j) = sum(err1(:).^2);
error2(n,j) = sum(err2(:).^2);
error3(n,j) = sum(err3(:).^2);
end
end
error1 = sum(error1);
error2 = sum(error2);
error3 = sum(error3);
%// plotting code
figure
hold on
plot(error1, 'k.--')
plot(error2, 'r.-')
plot(error3, 'b.-')
legend({'Naive method', 'Approximate method', 'Pseudoinverse method'}, ...
'Location', 'NorthWest')
legend boxoff
set(gca, 'XTick', 1:length(error1))
set(gca, 'YTick', [])
xlabel('Number of PCs')
ylabel('Cross-validation error')
tempRepmat(kk,kk) = -1
লাইনের ভূমিকা কী ? পূর্ববর্তী লাইনটি ইতিমধ্যে নিশ্চিত করে না যেtempRepmat(kk,kk)
-1 সমান? এছাড়াও, কেন বিয়োগ? ত্রুটি যেভাবেই হোক স্কোয়ার করা হবে, তাই আমি কি সঠিকভাবে বুঝতে পারি যে যদি বিয়োগগুলি সরানো হয় তবে কিছুই পরিবর্তন হবে না?