এলোমেলো বন: পরীক্ষা সেটে নতুন ফ্যাক্টর মাত্রা কীভাবে পরিচালনা করতে হয়?


13

আমি আর এলোমেলো বন মডেল ব্যবহার করে পূর্বাভাস দেওয়ার চেষ্টা করছি am

তবে আমি ত্রুটিগুলি পেয়েছি যেহেতু কিছু উপাদানগুলির প্রশিক্ষণ সংস্থার চেয়ে পরীক্ষার সেটে বিভিন্ন মান রয়েছে। উদাহরণস্বরূপ, পরীক্ষার সেটে কোনও ফ্যাক্টরের Cat_2মান 34, 68, 76ইত্যাদি থাকে যা প্রশিক্ষণ সেটে উপস্থিত হয় না। দুর্ভাগ্যক্রমে, টেস্ট সেটে আমার নিয়ন্ত্রণ নেই ... আমার অবশ্যই এটি ব্যবহার করা উচিত।

আমার একমাত্র কাজটি হ'ল সমস্যাযুক্ত বিষয়গুলি পুনরায় সংখ্যার মানগুলিতে রূপান্তর করে ব্যবহার করে as.numeric()। এটা তোলে কাজ করে কিন্তু আমি খুব, সন্তুষ্ট নই যেহেতু এই মান কোড কোন সংখ্যাসূচক ইন্দ্রিয় আছে আছে ...

আপনি কি মনে করেন যে পরীক্ষার সেট থেকে নতুন মানগুলি ফেলে দেওয়ার জন্য আরও একটি সমাধান হবে? তবে 1, 2, 14, 32প্রশিক্ষণ এবং পরীক্ষার উভয় ক্ষেত্রেই রয়েছে এমন সমস্ত অন্যান্য ফ্যাক্টর মানগুলি (মানগুলি বলি etc.


1
পরীক্ষার মান কেন প্রশিক্ষণে থাকতে হবে তা আমি জানি। শ্রেণিবদ্ধকরণের ধারণা হ'ল শ্রেণিকেন্দ্রিক ঘনত্বগুলি কী দেখতে দেখতে একটি ধারণা পেতে প্রশিক্ষণের ডেটা ব্যবহার করা। আপনি ঘনত্ব থেকে প্রতিটি সম্ভাব্য মান দেখতে পাবেন না। আই ভেরিয়েবলটি একটি স্প্লিট ওনা গাছে ব্যবহার করা হয় তারপরে বিভাজন নির্ধারণ করে যে কোন শাখাটি অদৃশ্য মানগুলির সাথে সাথে দেখা হয়েছে সেগুলি অনুসরণ করতে হবে।
মাইকেল আর। চেরনিক

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

আমার প্রশ্নের অনুরূপ এখানে: stats.stackexchange.com/questions/18004/… । আমি মনে করি যে আমি আরএফের পরিবর্তে জিবিএম ব্যবহার করতে পারি কারণ এটি নতুন ফ্যাক্টরের স্তরগুলি আরও ভালভাবে মোকাবেলা করে বলে মনে হচ্ছে। এছাড়াও, আপনি কি পার্টিতে আরএফ বাস্তবায়নের দিকে নজর দিয়েছেন? এই সমস্যাগুলির কারণে আমি কখনও এলোমেলো পছন্দ পছন্দ করি না (এবং নিখরচায় মূল্যবোধের সাথে নির্বিঘ্নে মোকাবেলা করতে অক্ষমতা)।
বি_মিনার

উত্তর:


2

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


8

কিং এবং বনয়েট , এই স্নিপেট স্তরগুলির সাথে সামঞ্জস্য করতে কার্যকর হতে পারে:

for(attr in colnames(training))
{
  if (is.factor(training[[attr]]))
  {
    new.levels <- setdiff(levels(training[[attr]]), levels(testing[[attr]]))
    if ( length(new.levels) == 0 )
    { print(paste(attr, '- no new levels')) }
    else
    {
      print(c(paste(attr, length(new.levels), 'of new levels, e.g.'), head(new.levels, 2)))
      levels(testing[[attr]]) <- union(levels(testing[[attr]]), levels(training[[attr]]))
    }
  }
}

এটি কোন বৈশিষ্ট্যগুলি পরিবর্তিত হয় তাও মুদ্রণ করে। আমি এটি আরও মার্জিতভাবে লেখার কোনও ভাল উপায় খুঁজে পাইনি (ldply বা কিছু দিয়ে)। কোনও টিপস প্রশংসা করা হয়।


4

আমি এখানে কিছু কোড লিখেছি যা উপরে @ কিংয়ের প্রতিক্রিয়া সম্বোধন করে। এটি ত্রুটিটি স্থির করে:

# loops through factors and standardizes the levels
for (f in 1:length(names(trainingDataSet))) {
    if (levels(testDataSet[,f]) > levels(trainingDataSet[,f])) {    
            levels(testDataSet[,f]) = levels(trainingDataSet[,f])       
    } else {
            levels(trainingDataSetSMOTEpred[,f]) = levels(testDataSet[,f])      
    }
}

হাই @ আইফার্ব, আমি আপনার সমাধানটি বোঝার চেষ্টা করছি: ডেটাসেটসমোটপ্রদ প্রশিক্ষণ কি এবং কোডে এটি সংজ্ঞায়িত কোথায়?
কাসিয়া কুলমা

3

পরীক্ষা এবং প্রশিক্ষণ সেটকে এক সেট হিসাবে একত্রিত করতে হবে এবং তারপরে প্রশিক্ষণের সেটটির স্তর পরিবর্তন করতে হবে। আমার কোডগুলি হল:

totalData <- rbind(trainData, testData)
for (f in 1:length(names(totalData))) {
  levels(trainData[, f]) <- levels(totalData[, f])
}

পরীক্ষার স্তরের সংখ্যা প্রশিক্ষণের চেয়ে কম বা কম এমন কোনও ক্ষেত্রে এটি কাজ করে।


2

আমি যখন আর এ র্যান্ডমফোরস্ট ব্যবহার করি তখন আমার খুব কৃপণতা হয় It's এটি সম্ভবত তাত্ত্বিকভাবে সাবলীল নয়, তবে এটি জিনিসটি চলমান।

levels(testSet$Cat_2) = levels(trainingSet$Cat_2)

বা অন্য রাস্তা। মূলত, এটি কেবল আর কে বলে যে এটির একটি বৈধ মান আছে যে 0 টি কেস রয়েছে; সুতরাং ত্রুটি সম্পর্কে আমাকে বগিং বন্ধ করুন।

আমি এটিকে কোড করার মতো যথেষ্ট স্মার্ট নই যে এটি সমস্ত শ্রেণিবদ্ধ বৈশিষ্ট্যের জন্য স্বয়ংক্রিয়ভাবে ক্রিয়া সম্পাদন করে। আপনি যদি জানেন তবে আমাকে কোডটি প্রেরণ করুন ...


পরীক্ষায় স্তরের সংখ্যা প্রশিক্ষণের চেয়ে বেশি হলে এটি কার্যকর হয় না। টেস্ট ডেটা ফ্যাক্টর স্তরগুলি <= প্রশিক্ষণ ডেটা ফ্যাক্টরের স্তরগুলি হলে এটি কেবল কাজ করে।
কার্তিকস

1

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

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