আর এর র্যান্ডমফোরস্ট 32 টি স্তরের বেশি পরিচালনা করতে পারে না। কাজটি কী?


22

আর এর এলোমেলো প্যাকেজ 32 টিরও বেশি স্তরের সাথে ফ্যাক্টর পরিচালনা করতে পারে না। যখন এটি 32 টিরও বেশি স্তরের দেওয়া হয় তখন এটি একটি ত্রুটি বার্তা প্রকাশ করে:

32 টিরও বেশি বিভাগ সহ শ্রেণিবদ্ধ ভবিষ্যদ্বাণী পরিচালনা করতে পারে না।

তবে আমার কাছে থাকা ডেটাতে কয়েকটি কারণ রয়েছে। এর মধ্যে কয়েকটিতে 1000+ স্তর রয়েছে এবং তাদের কারও কারও 100+ রয়েছে। এমনকি এটিতে মার্কিন যুক্তরাষ্ট্রের 'রাষ্ট্র' রয়েছে যা 52 is

সুতরাং, এখানে আমার প্রশ্ন।

  1. কেন এমন সীমাবদ্ধতা রয়েছে? র্যান্ডমফোরেস্ট সাধারণ ক্ষেত্রে এমনকি চালাতে অস্বীকার করে।

    > d <- data.frame(x=factor(1:50), y=1:50)
    > randomForest(y ~ x, data=d)
      Error in randomForest.default(m, y, ...) : 
      Can not handle categorical predictors with more than 32 categories.
    

    যদি এটি কেবল মেমরির সীমাবদ্ধতার কারণে হয় তবে কীভাবে স্কাইকিট শিখতে হবে এর র্যান্ডমফরেস্টরেগ্রিজার 32 টিরও বেশি স্তরের সাথে চালাতে পারে?

  2. এই সমস্যাটি হ্যান্ডেল করার সর্বোত্তম উপায় কী? ধরুন আমার কাছে এক্স 1, এক্স 2, ..., এক্স 50 স্বতন্ত্র ভেরিয়েবল এবং ওয়াই নির্ভরশীল পরিবর্তনশীল। এবং ধরুন যে এক্স 1, এক্স 2 এবং এক্স 3 এর 32 টিরও বেশি স্তর রয়েছে। আমার কি করা উচিৎ?

    আমি যা ভাবছি তা এক্স 1, এক্স 2 এবং এক্স 3 এর প্রতিটি জন্য ক্লাস্টারিং অ্যালগরিদম চালাচ্ছে যেখানে দূরত্বকে ওয়াইয়ের পার্থক্য হিসাবে সংজ্ঞায়িত করা হয়েছে। তিনটি সমস্যাযুক্ত ভেরিয়েবল থাকায় আমি তিনটি ক্লাস্টারিং চালাবো। এবং প্রতিটি ক্লাস্টারিংয়ে, আমি আশা করি আমি একই স্তরের সন্ধান করতে পারি। এবং আমি তাদের একীভূত করব।

    কেমন লাগছে এই শব্দ?


প্যাকেজের নাম এবং ত্রুটির বার্তা সহ ওয়েবে অনুসন্ধান করা কিছু উত্তর সরবরাহ করে।
রোল্যান্ড

5
@Roland আসলে এটা আমাকে এখানে নেতৃত্ব ...
isomorphismes

1
আপনি অনেকগুলি পরিসংখ্যানযুক্ত মাইন্ড হিসাবে ডেটা সায়েন্স সি চেষ্টা করতে পারেন সেখানে অনেক মাত্রা সহ ডেটা জন্য প্রোগ্রামিং অভিজ্ঞতা আছে।
aeroNotAuto

2
আপডেট: সংস্করণ 4.6-9 থেকে, randomForest53 স্তর পর্যন্ত শ্রেণিবদ্ধ ভবিষ্যদ্বাণী পরিচালনা করতে পারে। খবর
বেন

আর এর এলোমেলো বন কীভাবে স্তরের সংখ্যা নির্ধারণ করে? আমার ধারণা স্তর মানে বিভাগগুলি categories
এজেপি

উত্তর:


25

এটি আসলে বেশ যুক্তিসঙ্গত প্রতিবন্ধকতা কারণ লেভেলের সাথে একটি ফ্যাক্টরের বিভাজন আসলে 2 এন - 2 সম্ভাব্য সংমিশ্রণের মধ্যে একটির একটি নির্বাচন । এমনকি 25 এর মতো এন এর সাথেও সংমিশ্রণের জায়গাগুলি এত বিশাল যে এই জাতীয় অনুভূতিটি সামান্যতম ধারণা দেয়।এন2এন-2এন

এন

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

এটিও হতে পারে যে প্রতিটি রাজ্যই এমন একটি বিচ্ছিন্ন এবং বেআইনী সম্পর্কযুক্ত সত্তা যে এটির নিজের জন্য পৃথক মডেল প্রয়োজন।

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


4
কিছুটা ক্লান্তিকর উপায়ে এটি সহজেই চারপাশে স্থানান্তরিত হতে পারে। উদাহরণস্বরূপ, যদি আপনার 33 থেকে 1024 স্তর থাকে তবে প্রতিটি <= 32 স্তরের দুটি উপাদান তৈরি করুন।
ক্যাল

15

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

01[0;2এম-1]

ওয়েকা এবং পাইথন থেকে বাস্তবায়ন কেন কাজ করে?

ওয়েকা বাস্তবায়ন ডিফল্টরূপে কার্ট গাছ ব্যবহার করে না। এটি সি 45 টি গাছ ব্যবহার করে যার মধ্যে এই গণনার সমস্যা নেই, কারণ শ্রেণিবদ্ধ ইনপুটগুলির জন্য এটি একাধিক নোডে বিভক্ত হয়, প্রতিটি স্তরের মানের জন্য একটি।

পাইথন এলোমেলো বন বাস্তবায়ন শ্রেণিবদ্ধ / ফ্যাক্টর ভেরিয়েবল ব্যবহার করতে পারে না। আপনাকে সেই ভেরিয়েবলগুলি ডামি বা সংখ্যাযুক্ত ভেরিয়েবলগুলিতে এনকোড করতে হবে।

এম


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

2
ডামি এনকোডিং কাজ করে তবে এটি কেবলমাত্র সমস্ত বিভাগ বনাম তৈরি করতে পারে। এনকোডিংয়ের পরে ভেরিয়েবলগুলি একবারে পরীক্ষা করা হয়। সুতরাং, টোয়িং বাস্তবায়ন অসম্ভব। এই বৈশিষ্ট্যটি যদি সহায়তা করতে পারে তবে আমি মনে করি যে কার্যত কোনও বড় পার্থক্য নেই। তবে অন্যান্য কিছু বিষয় রয়েছে যা ভেরিয়েবল গুরুত্ব সহকারে কাজ করার সময় মনোযোগের প্রয়োজন হতে পারে: কিছু বাস্তবায়ন একাধিক স্তর সহ শ্রেণীবদ্ধের দিকে পক্ষপাতদুষ্ট থাকে। বিশদগুলির জন্য ক্যারোলিন স্ট্রোব্লল কাগজপত্রগুলি দেখুন: statistik.uni-dortmund.de/useR-2008/slides/Strobl+Zeileis.pdf । আর-তে কিছু বাস্তবায়ন রয়েছে যার পক্ষপাত নেই।
রাপাইও

2

আপনি সেই এক কলামটি আলাদাভাবে উপস্থাপন করার চেষ্টা করতে পারেন। আপনি বিচ্ছিন্ন ডাটাফ্রেমের মতো একই ডেটা উপস্থাপন করতে পারেন।

সর্বনিম্ন টেকসই কোড;

example <- as.data.frame(c("A", "A", "B", "F", "C", "G", "C", "D", "E", "F"))
names(example) <- "strcol"

for(level in unique(example$strcol)){
      example[paste("dummy", level, sep = "_")] <- ifelse(example$strcol == level,     1, 0)
}

লক্ষ্য করুন যে কীভাবে মূল কলামে প্রতিটি মান পৃথক ডামি কলামে পরিণত হয়।

আরও বিস্তৃত উদাহরণ কোড;

set.seed(0)
combs1 = sample.int(33, size= 10000, replace=TRUE)
combs2 = sample.int(33, size= 10000, replace=TRUE)
combs3 = combs1 * combs2 + rnorm(10000,mean=0,100)
df_hard = data.frame(y=combs3, first=factor(combs1), second=factor(combs2))

for(level in unique(df_hard$first)){
    df_hard[paste("first", level, sep = "_")] <- ifelse(df_hard$first == level, 1, 0)
}

for(level in unique(df_hard$second)){
    df_hard[paste("second", level, sep = "_")] <- ifelse(df_hard$second == level, 1, 0)
}

example$first <- NULL
example$second <- NULL

rf_mod = randomForest( y ~ ., data=example )

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

আরও তথ্যের জন্য দয়া করে এই ব্লগপোস্টটি দেখুন:

https://blog.cloudera.com/blog/2013/02/how-to-resample-from-a-large-data-set-in-parallel-with-r-on-hadoop/


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

ভিনসেন্ট, আপনি কি অনুভব করেন না যে আমি যদি 100+ ক্রমের অর্ডার স্তর পেয়ে থাকি তবে আমি এত বড় সমস্যার মুখোমুখি হব, আপনি কি প্রতিটি কলামকে এলোমেলোভাবে ইনপুট হিসাবে যুক্ত করার পরামর্শ দিচ্ছেন?
হার্দিক গুপ্ত

অন্য বিকল্প হ'ল h2o এ র্যান্ডমফরেস্ট বাস্তবায়ন ব্যবহার করা; এটির বড় ডেটাসেটগুলির জন্য আরও ভাল সমর্থন রয়েছে। আমি "প্রতিটি কলাম এলোমেলোভাবে ইনপুট হিসাবে যুক্ত করুন" বিটটি বুঝতে পারি না।
ভিনসেন্ট ওয়ার্মারডাম

0

পরিবর্তে আপনি প্যাকেজ অতিরিক্তTree ব্যবহার করতে পারেন। চূড়ান্তভাবে এলোমেলোভাবে বন অ্যালগরিদম কোনও ব্রেকপয়েন্ট / বিভাজন চেষ্টা করে না, তবে কেবল বিভক্তির একটি সীমিত এলোমেলো উপসেট।


1
এক্সট্রা ট্রিজের সীমাবদ্ধতা আছে, এই অর্থে আপনার ইনপুটটির একটি অঙ্কের ডেটা ম্যাট্রিক্স হওয়া উচিত?
হার্দিক গুপ্ত

0

আরেকটি বিকল্প: আপনার ডেটাতে স্তরের সংখ্যা এবং পর্যবেক্ষণের সংখ্যার উপর নির্ভর করে আপনি কিছু স্তর মার্জ করতে পারেন। সীমাবদ্ধতা ছাড়িয়ে যাওয়ার বাইরে, যদি আপনার কয়েকটি পর্যবেক্ষণের সাথে অনেকগুলি স্তর থাকে তবে এটি বৈকল্পিকতা হ্রাস করতে পারে। হ্যাডলি 's forcats: fct_lump এই আছে।

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