অ-নেতিবাচক রিজ রিগ্রেশন কিভাবে করবেন?


10

অ-নেতিবাচক রিজ রিগ্রেশন কিভাবে করবেন? অ-নেতিবাচক লাসো পাওয়া যায় scikit-learnতবে রিজের জন্য আমি বেতার অ-নেতিবাচকতা প্রয়োগ করতে পারি না এবং প্রকৃতপক্ষে আমি নেতিবাচক সহগগুলি পাচ্ছি। কেউ কি জানো এটা কেন?

এছাড়াও, আমি কি নিয়মিত ন্যূনতম স্কোয়ারের ক্ষেত্রে রিজ বাস্তবায়ন করতে পারি? এটিকে অন্য একটি প্রশ্নে নিয়ে যাওয়া হয়েছে: আমি কি ওএলএস রিগ্রেশনের ক্ষেত্রে রিজ রিগ্রেশন প্রয়োগ করতে পারি?


1
এখানে দুটি অরথগোনাল প্রশ্ন রয়েছে, আমি আলাদা প্রশ্ন হিসাবে "" আমি কি কমপক্ষে স্কোয়ারের বিচারে রিজ বাস্তবায়ন করতে পারি "ভাঙার বিষয়টি বিবেচনা করব।
ম্যাথু ড্রুরি

উত্তর:


8

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

সম্পাদনা করুন:

@ অ্যামিবা এবং আমি মন্তব্যে আলোচনা করেছিলাম এর বাস্তব বাস্তবায়ন তুলনামূলক সহজ। বলুন যে কারওর কাছে নিম্নলিখিত প্রতিরোধের সমস্যা রয়েছে:

y=2x1x2+ϵ,ϵN(0,0.22)

যেখানে এবং উভয়ই স্ট্যান্ডার্ড নরমাল যেমন: । নোটিশ করুন আমি প্রমিতিকর পূর্বাভাসকারী ভেরিয়েবলগুলি ব্যবহার করি যাতে এর পরে আমাকে স্বাভাবিক করতে হবে না। সরলতার জন্য আমি কোনও ইন্টারসেপ্টও অন্তর্ভুক্ত করি না। আমরা স্ট্যান্ডার্ড লিনিয়ার রিগ্রেশন ব্যবহার করে অবিলম্বে এই রিগ্রেশন সমস্যাটি সমাধান করতে পারি। সুতরাং আর এ এটির মতো কিছু হওয়া উচিত:x1x2xpN(0,1)

rm(list = ls()); 
library(MASS); 
set.seed(123);
N = 1e6;
x1 = rnorm(N)
x2 = rnorm(N)
y = 2 * x1 - 1 * x2 + rnorm(N,sd = 0.2)

simpleLR = lm(y ~ -1 + x1 + x2 )
matrixX = model.matrix(simpleLR); # This is close to standardised
vectorY = y
all.equal(coef(simpleLR), qr.solve(matrixX, vectorY), tolerance = 1e-7)  # TRUE

শেষ লাইন লক্ষ্য করুন। প্রায় সমস্ত লিনিয়ার রিগ্রেশন রুটিন অনুমান করতে QR পচন ব্যবহার করে । আমরা আমাদের রিজ রিগ্রেশন সমস্যার জন্য একইটি ব্যবহার করতে চাই। এই মুহুর্তে @ ভুবার এই পোস্টটি পড়ুন ; আমরা ঠিক এই পদ্ধতি বাস্তবায়ন করা হবে । সংক্ষেপে বলতে গেলে, আমরা আমাদের মূল নকশা উদ্দীপক হবে ম্যাট্রিক্স সঙ্গে একটি তির্যক ম্যাট্রিক্স এবং আমাদের প্রতিক্রিয়া ভেক্টর সঙ্গে শূন্য। সেভাবে আমরা মূল রিজ রিগ্রেশন সমস্যাটি পুনরায় প্রকাশ করতে সক্ষম হব হিসাবে যেখানেβXλIpyp(XTX+λI)1XTy(X¯TX¯)1X¯Ty¯¯সংযুক্ত সংস্করণ প্রতীক। সম্পূর্ণতার জন্য এই নোটগুলি থেকে 18-19 স্লাইডগুলি চেক করুন , আমি সেগুলি বেশ সোজা পেয়েছি। সুতরাং আর তে আমরা কয়েকটি নিম্নলিখিত চাই:

myLambda = 100;  
simpleRR = lm.ridge(y ~ -1 + x1 + x2, lambda = myLambda)
newVecY = c(vectorY, rep(0, 2))
newMatX = rbind(matrixX, sqrt(myLambda) * diag(2))
all.equal(coef(simpleRR), qr.solve(newMatX, newVecY), tolerance = 1e-7)  # TRUE

এবং এটি কাজ করে। ঠিক আছে, সুতরাং আমরা রিজ রিগ্রেশন অংশ পেয়েছি। আমরা অন্য কোনও উপায়ে সমাধান করতে পারলাম, আমরা এটি একটি অপ্টিমাইজেশন সমস্যা হিসাবে তৈরি করতে পারি যেখানে স্কোয়ারের অবশিষ্টাংশের ব্যয়টি ব্যয় হয় এবং তারপরে এর বিরুদ্ধে অপ্টিমাইজ করা হয়, অর্থাৎ। । নিশ্চিতভাবেই আমরা এটি করতে পারি:সর্বনিম্নβ||Y¯-এক্স¯β||22

myRSS <- function(X,y,b){ return( sum( (y - X%*%b)^2 ) ) }
bfgsOptim = optim(myRSS, par = c(1,1), X = newMatX, y= newVecY, 
                  method = 'L-BFGS-B')
all.equal(coef(simpleRR), bfgsOptim$par, check.attributes = FALSE, 
          tolerance = 1e-7) # TRUE

যা প্রত্যাশা মতো আবার কাজ করে। সুতরাং এখন আমরা কেবল চাই: যেখানে । যা কেবল একই অপটিমাইজেশন সমস্যা তবে সীমাবদ্ধ যাতে সমাধানটি অ-নেতিবাচক হয়।সর্বনিম্নβ||Y¯-এক্স¯β||22β0

bfgsOptimConst = optim(myRSS, par = c(1,1), X=newMatX, y= newVecY, 
                       method = 'L-BFGS-B', lower = c(0,0))
all(bfgsOptimConst$par >=0)  # TRUE
(bfgsOptimConst$par) # 2.000504 0.000000

যা দেখায় যে আসল অ-নেতিবাচক রিজ রিগ্রেশন টাস্কটিকে একটি সীমাবদ্ধ অপটিমাইজেশন সমস্যা হিসাবে সংস্কার করে সমাধান করা যেতে পারে। কিছু সতর্কতা:

  1. আমি (প্রাকৃতিকভাবে) প্রমিতিকর ভেরিয়েবলকে নরমালাইজড করেছিলাম। আপনার নিজেরাই সাধারণীকরণের অ্যাকাউন্ট করতে হবে।
  2. একই জিনিসটি ইন্টারসেপ্টের অ- সাধারণকরণের জন্য যায় ।
  3. আমি ব্যবহৃত optim'র , L-BFGS-বি যুক্তি। এটি সর্বাধিক ভ্যানিলা আর সলভার যা সীমা গ্রহণ করে। আমি নিশ্চিত যে আপনি কয়েক ডজন আরও ভাল সলভার পাবেন।
  4. সাধারণত সীমাবদ্ধ রৈখিক মধ্যে সর্বনিম্ন-স্কোয়ারের সমস্যাগুলি চতুর্ভুজ অপ্টিমাইজেশন কার্য হিসাবে দেখা দেয় । এটি এই পোস্টের জন্য একটি ওভারকিল তবে মনে রাখবেন প্রয়োজনে আরও ভাল গতি পেতে পারেন।
  5. মন্তব্যে উল্লিখিত হিসাবে আপনি রিজ-রিগ্রেশনকে অগমেন্টেড-লিনিয়ার-রিগ্রেশন অংশ হিসাবে এড়িয়ে যেতে পারেন এবং একটি অপ্টিমাইজেশন সমস্যা হিসাবে রিজ কস্ট ফাংশনটিকে সরাসরি এনকোড করতে পারেন। এটি অনেক সহজ এবং এই পোস্টটি উল্লেখযোগ্যভাবে ছোট হবে। যুক্তির খাতিরে আমি এই দ্বিতীয় সমাধানটিও সংযোজন করি।
  6. আমি পাইথনে পুরোপুরি কথোপকথন করছি না তবে নুমপির লিনালগ.সলভ এবং সায়পাইয়ের অনুকূলিত ফাংশনগুলি ব্যবহার করে আপনি এই কাজটির প্রতিলিপি করতে পারেন ।
  7. হাইপারপ্যারামিটার- ইত্যাদি চয়ন করতে আপনি কেবলমাত্র সিভি-স্টেপটিই করেন যা আপনি কোনও ক্ষেত্রেই করেন; কিছুই পরিবর্তন.λ

পয়েন্ট 5 এর কোড:

myRidgeRSS <- function(X,y,b, lambda){ 
                return( sum( (y - X%*%b)^2 ) + lambda * sum(b^2) ) 
              }
bfgsOptimConst2 = optim(myRidgeRSS, par = c(1,1), X = matrixX, y = vectorY,
                        method = 'L-BFGS-B', lower = c(0,0), lambda = myLambda)
all(bfgsOptimConst2$par >0) # TRUE
(bfgsOptimConst2$par) # 2.000504 0.000000

1
এটি কিছুটা বিভ্রান্তিকর। অ-নেতিবাচক রিজ রিগ্রেশন বাস্তবায়নের জন্য তুচ্ছ: কেউ প্রসারিত ডেটার উপর স্বাভাবিক রিগ্রেশন হিসাবে রিজ রিগ্রেশন পুনরায় লিখতে পারেন ( স্ট্যাটাস.স্ট্যাকেক্সচেঞ্জ / সেকশনস /203687 এর মন্তব্য দেখুন ) এবং তারপরে অ-নেতিবাচক রিগ্রেশন রুটিন ব্যবহার করুন।
অ্যামিবা

আমি সম্মতি জানাই এটি কার্যকর করা সহজ (এটি +1)। (আমি প্রথমটি আপনার এবং অন্যান্য থ্রেডে গ্লেনের মন্তব্যকেও উত্সাহিত করেছি)। প্রশ্নটি কেন বাস্তবায়িত হয় না, যদি তা কঠিন হয় না। এই বিষয়ে, আমি দৃ strongly়ভাবে সন্দেহ করি যে সরাসরি এই এনএনআরআর কার্যটি প্রণয়ন একটি অপ্টিমাইজেশান সমস্যাটি আরও সহজ যে এটি প্রথমে বর্ধিত ডেটা রিগ্রেশন এবং পরে কোয়াড ব্যবহার করে তৈরি করে। প্রগ। এই রিগ্রেশন সমাধানের জন্য অনুকূলিতকরণ। আমি আমার উত্তরে এটি বলিনি কারণ এটি বাস্তবায়নের অংশে উদ্যোগী হবে।
usεr11852

বা শুধু স্ট্যান এ লিখুন।
সাইকোরাক্স মনিকাকে

আহ ঠিক আছে; আমি কিউটি বুঝতে পেরেছিলাম মূলত জিজ্ঞাসা করছিলাম কীভাবে অ-নেতিবাচক রিজ করবেন (এবং কেবল এটি পাসের ক্ষেত্রে কেন প্রয়োগ করা হয়নি); এমনকি আমি এটিকে শিরোনামে রাখার জন্য সম্পাদনা করেছি। যাইহোক, এটি কীভাবে করবেন তা আমার কাছে আরও আকর্ষণীয় প্রশ্ন বলে মনে হচ্ছে। যদি আপনি কীভাবে অ-নেতিবাচক রিজ বাস্তবায়ন করবেন সে সম্পর্কে ব্যাখ্যা সহ আপনার উত্তরটি আপডেট করতে পারেন, আমি মনে করি এটি ভবিষ্যতের পাঠকদের জন্য খুব কার্যকর হবে (এবং আমি উজ্জীবিত হতে খুশি হব :))।
অ্যামিবা

1
দুর্দান্ত, আমি এটি পরে করব (নতুন শিরোনামটি আমি খেয়াল করিনি, সে সম্পর্কে দুঃখিত)। আমি সম্ভবত ওএলএস / সিউডো-পর্যবেক্ষণের শর্তে বাস্তবায়ন দেব যাতে আমরা অন্য প্রশ্নেরও জবাব দেব।
usεr11852

4

আর প্যাকেজ গ্ল্যামনেট যা ইলাস্টিক নেট প্রয়োগ করে এবং তাই লসো এবং রিজ এটিকে অনুমতি দেয়। পরামিতিগুলির সাথে lower.limitsএবং upper.limits, আপনি পৃথকভাবে প্রতিটি ওজনের জন্য সর্বনিম্ন বা সর্বাধিক মান নির্ধারণ করতে পারেন, সুতরাং আপনি যদি নিম্ন সীমাটি 0 তে সেট করেন তবে এটি নননেজিটিভ ইলাস্টিক-নেট (লাসো / রিজ) সম্পাদন করবে।

এছাড়াও পাইথন মোড়ক রয়েছে https://pypi.python.org/pypi/glmnet/2.0.0


2

প্রত্যাহার করুন আমরা সমাধানের চেষ্টা করছি:

কমানএক্সএকজনএক্স-Y22+ +λএক্স22St এক্স>0

সমান:

কমানএক্সএকজনএক্স-Y22+ +λএক্সআমিএক্সSt এক্স>0

আরও কিছু বীজগণিত সহ:

কমানএক্সএক্সটি(একজনটিএকজন+ +λআমি)এক্স+ +(-2একজনটিY)টিএক্সSt এক্স>0

সিউডো-পাইথনের সমাধানটি কেবল সহজভাবে করা:

Q = A'A + lambda*I
c = - A'y
x,_ = scipy.optimize.nnls(Q,c)

দেখুন: ফর্মের নিয়মিত ব্যবহার করে কেউ কীভাবে অ-নেতিবাচক সর্বনিম্ন স্কোয়ারগুলিকে স্পার করে ?কেএক্সআরএক্স

আরও কিছুটা সাধারণ উত্তরের জন্য।


লাইনটি সি = - অ 'আমি সি = এ' পড়তে পারি না? আমি মনে করি এটি সঠিক, যদিও একটিকে লক্ষ্য করা উচিত যে সমাধানটি স্কিপি.পটিমাইজ.এনএনএলএস (নিউম্যাটএক্স, নিউভিসিওয়াই) থেকে কিছুটা আলাদা, যেখানে নিউম্যাটএক্স এক্স সারিটি বর্গাকার বর্গক্ষেত্রের (ল্যাম্বডা) সহ তির্যক ম্যাট্রিক্সের সাথে সংযুক্ত এবং নিউভিসওয়াই হ'ল Y এনভিআর জিরোসের সাথে বাড়ানো। আমি মনে করি আপনি যে সমাধানটির উল্লেখ করেছেন সেটি হ'ল সঠিক ...
টম ওয়েনসিলার্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.