কখন আমাদের অব্যাহতভাবে স্বাধীন ভেরিয়েবলগুলি / বৈশিষ্ট্যগুলি বিন্যস্ত করা উচিত এবং কখন করা উচিত নয়?


21

আমাদের কখন বিন / স্বতন্ত্র চলক / বৈশিষ্ট্য বিবেচনা করা উচিত এবং কখন করা উচিত নয়?

প্রশ্নের উত্তর দেওয়ার জন্য আমার প্রচেষ্টা:

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

আমি কি সঠিক? আর কি?


আমি ভেবেছিলাম এই প্রশ্নটি অনেক বার জিজ্ঞাসা করা উচিত তবে আমি কেবল এই পোস্টগুলিতে সিভিতে এটি খুঁজে পাচ্ছি না

আমরা কি একটানা পরিবর্তনশীল বিন করব?

অবিচ্ছিন্নভাবে ভবিষ্যদ্বাণীকারী ভেরিয়েবলটি ভাঙার সুবিধা কী?


আমি মনে করি না যে প্রশ্নটি সদৃশ কারণ উত্তরটি আসলে এই সমস্যাটিকে মোকাবেলা করে না ("আমাদের কি এটি করা উচিত")।
ফায়ারব্যাগ

8
কার্ট / এলোমেলো অরণ্যের পন্থাগুলি কমবেশি বিন্ন ক্রমাগত ভেরিয়েবলগুলি (টুকরোগুলি-ধ্রুবক ফাংশন ফিটিং) তবে তারা এটি আরও ভাল উপায়ে করছে doing আপনি যদি প্রাক-বিন হন, আপনি আপনার গাছ তৈরির অ্যালগরিদমকে একটি অনুকূল জায়গায় বিরতি স্থাপনের নমনীয়তাটিকে অস্বীকার করছেন ...
বেন বলকার

উত্তর:


16

দেখে মনে হচ্ছে আপনিও ভবিষ্যদ্বাণীমূলক অবস্থান থেকে উত্তর খুঁজছেন, তাই আমি আর এ দুটি পদ্ধতির সংক্ষিপ্ত প্রদর্শন একসাথে রেখেছি

  • একটি আকারকে সমান আকারের কারণগুলিতে বিন্যস্ত করা।
  • প্রাকৃতিক ঘন splines

নীচে, আমি কোনও ফাংশনের জন্য কোড দিয়েছি যা কোনও প্রদত্ত সত্য সংকেত ফাংশনের জন্য স্বয়ংক্রিয়ভাবে দুটি পদ্ধতির তুলনা করবে

test_cuts_vs_splines <- function(signal, N, noise,
                                 range=c(0, 1), 
                                 max_parameters=50,
                                 seed=154)

এই ফাংশনটি প্রদত্ত সংকেত থেকে কোলাহলপূর্ণ প্রশিক্ষণ এবং টেস্টিং ডেটাসেট তৈরি করবে এবং তারপরে দুটি প্রকারের প্রশিক্ষণের ডেটাতে লিনিয়ার রেগ্রেশনগুলির একটি সিরিজ ফিট করবে

  • cutsমডেল হাজার প্রতি ভবিষ্যতবক্তা, সমান আকারের অর্ধেক খোলা অন্তর ডেটা পরিসীমা segmenting, এবং তারপর যা ব্যবধান প্রতিটি প্রশিক্ষণ বিন্দু জন্যে ইঙ্গিত বাইনারি ভবিষ্যতবক্তা তৈরি করে গঠিত অন্তর্ভুক্ত করা হয়েছে।
  • splinesসঙ্গে নট সমানভাবে predictor পরিসীমা জুড়ে ব্যবধানে মডেল, একটি প্রাকৃতিক কিউবিক স্প্লাইন ভিত্তিতে সম্প্রসারণ অন্তর্ভুক্ত করা হয়েছে।

যুক্তিগুলি হল

  • signal: সত্যটি অনুমান করা যায় এমন একটি পরিবর্তনশীল ফাংশন।
  • N: প্রশিক্ষণ এবং পরীক্ষার উভয় ডেটাতে অন্তর্ভুক্ত করার জন্য নমুনার সংখ্যা।
  • noise: প্রশিক্ষণ এবং পরীক্ষার সংকেত যোগ করতে এলোমেলো গাউসী আওয়াজের পরিমাণ ound
  • range: প্রশিক্ষণের পরিসীমা এবং পরীক্ষার xডেটা, ডেটা এটি এই সীমার মধ্যে সমানভাবে উত্পন্ন হয়।
  • max_paramters: কোনও মডেলটিতে অনুমান করার জন্য সর্বোচ্চ পরামিতি। এটি উভয়ই cutsমডেলের অংশগুলির সর্বাধিক সংখ্যা এবং মডেলের সর্বাধিক গিঁটের সংখ্যা splines

নোট করুন যে splinesমডেলটিতে অনুমান করা পরামিতিগুলির সংখ্যা নট সংখ্যার সমান, তাই দুটি মডেল মোটামুটি তুলনা করা হয়।

ফাংশন থেকে রিটার্ন অবজেক্টের কয়েকটি উপাদান রয়েছে

  • signal_plot: সিগন্যাল ফাংশন একটি প্লট।
  • data_plot: প্রশিক্ষণ এবং পরীক্ষার ডেটা একটি বিচ্ছুরিত প্লট।
  • errors_comparison_plot: অনুমান করা পরামিতির সংখ্যার ব্যাপ্তিতে উভয় মডেলের জন্য স্কোয়ার ত্রুটি হারের যোগফলের বিবর্তন দেখানো একটি প্লট।

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

true_signal_sin <- function(x) {
  x + 1.5*sin(3*2*pi*x)
}

obj <- test_cuts_vs_splines(true_signal_sin, 250, 1)

এখানে ত্রুটির হারগুলি কীভাবে বিকশিত হয়েছিল তা এখানে

পাপ তরঙ্গ বাড়ানোর জন্য বিভিন্ন স্তরের স্বাধীনতার সাথে গ্রুপিং বনাম স্প্লিনস ট্রেন এবং পরীক্ষার কার্য সম্পাদন

দ্বিতীয় উদাহরণটি একটি বাদাম ফাংশন যা আমি কেবল এই ধরণের জিনিসটির জন্য রাখি, এটি প্লট করুন এবং দেখুন

true_signal_weird <- function(x) {
  x*x*x*(x-1) + 2*(1/(1+exp(-.5*(x-.5)))) - 3.5*(x > .2)*(x < .5)*(x - .2)*(x - .5)
}

obj <- test_cuts_vs_splines(true_signal_weird, 250, .05)

বিজারো ফাংশন বাড়ানোর জন্য বিভিন্ন ডিগ্রি স্বাধীনতার সাথে গ্রুপিং বনাম স্প্লিনস ট্রেন এবং পরীক্ষামূলক পারফরম্যান্স

এবং মজাদার জন্য, এখানে একটি বিরক্তিকর লিনিয়ার ফাংশন

obj <- test_cuts_vs_splines(function(x) {x}, 250, .2)

গ্রুপিং বনাম স্প্লিনস ট্রেন এবং রৈখিক ফাংশনের জন্য স্বাধীনতার বিভিন্ন ডিগ্রী সহ পরীক্ষার কার্য সম্পাদন

তুমি ইহা দেখতে পারো:

  • মডেল জটিলতা উভয়ের জন্য সঠিকভাবে সুর করা হলে স্প্লাইসগুলি সামগ্রিকভাবে আরও ভাল সামগ্রিক পরীক্ষার কার্য সম্পাদন করে।
  • স্প্লাইসগুলি খুব কম অনুমিত পরামিতিগুলির সাথে সর্বোত্তম পরীক্ষার কার্য সম্পাদন করে ।
  • সামগ্রিকভাবে স্প্লাইজের কার্য সম্পাদন অনেক বেশি স্থিতিশীল কারণ অনুমানিত পরামিতিগুলির সংখ্যা বৈচিত্রপূর্ণ।

সুতরাং স্প্লাইজগুলি সর্বদা অনুমানমূলক দৃষ্টিভঙ্গি থেকে পছন্দ করা উচিত।

কোড

আমি এই তুলনা উত্পাদন করতে ব্যবহৃত কোড এখানে। আমি এগুলিকে একটি ফাংশনে আবদ্ধ করেছি যাতে আপনি নিজের সিগন্যাল ফাংশন দিয়ে চেষ্টা করে দেখতে পারেন। আপনার দ্বারা আমদানি করতে হবে ggplot2এবং splinesআর লাইব্রেরি।

test_cuts_vs_splines <- function(signal, N, noise,
                                 range=c(0, 1), 
                                 max_parameters=50,
                                 seed=154) {

  if(max_parameters < 8) {
    stop("Please pass max_parameters >= 8, otherwise the plots look kinda bad.")
  }

  out_obj <- list()

  set.seed(seed)

  x_train <- runif(N, range[1], range[2])
  x_test <- runif(N, range[1], range[2])

  y_train <- signal(x_train) + rnorm(N, 0, noise)
  y_test <- signal(x_test) + rnorm(N, 0, noise)

  # A plot of the true signals
  df <- data.frame(
    x = seq(range[1], range[2], length.out = 100)
  )
  df$y <- signal(df$x)
  out_obj$signal_plot <- ggplot(data = df) +
    geom_line(aes(x = x, y = y)) +
    labs(title = "True Signal")

  # A plot of the training and testing data
  df <- data.frame(
    x = c(x_train, x_test),
    y = c(y_train, y_test),
    id = c(rep("train", N), rep("test", N))
  )
  out_obj$data_plot <- ggplot(data = df) + 
    geom_point(aes(x=x, y=y)) + 
    facet_wrap(~ id) +
    labs(title = "Training and Testing Data")

  #----- lm with various groupings -------------   
  models_with_groupings <- list()
  train_errors_cuts <- rep(NULL, length(models_with_groupings))
  test_errors_cuts <- rep(NULL, length(models_with_groupings))

  for (n_groups in 3:max_parameters) {
    cut_points <- seq(range[1], range[2], length.out = n_groups + 1)
    x_train_factor <- cut(x_train, cut_points)
    factor_train_data <- data.frame(x = x_train_factor, y = y_train)
    models_with_groupings[[n_groups]] <- lm(y ~ x, data = factor_train_data)

    # Training error rate
    train_preds <- predict(models_with_groupings[[n_groups]], factor_train_data)
    soses <- (1/N) * sum( (y_train - train_preds)**2)
    train_errors_cuts[n_groups - 2] <- soses

    # Testing error rate
    x_test_factor <- cut(x_test, cut_points)
    factor_test_data <- data.frame(x = x_test_factor, y = y_test)
    test_preds <- predict(models_with_groupings[[n_groups]], factor_test_data)
    soses <- (1/N) * sum( (y_test - test_preds)**2)
    test_errors_cuts[n_groups - 2] <- soses
  }

  # We are overfitting
  error_df_cuts <- data.frame(
    x = rep(3:max_parameters, 2),
    e = c(train_errors_cuts, test_errors_cuts),
    id = c(rep("train", length(train_errors_cuts)),
           rep("test", length(test_errors_cuts))),
    type = "cuts"
  )
  out_obj$errors_cuts_plot <- ggplot(data = error_df_cuts) +
    geom_line(aes(x = x, y = e)) +
    facet_wrap(~ id) +
    labs(title = "Error Rates with Grouping Transformations",
         x = ("Number of Estimated Parameters"),
         y = ("Average Squared Error"))

  #----- lm with natural splines -------------  
  models_with_splines <- list()
  train_errors_splines <- rep(NULL, length(models_with_groupings))
  test_errors_splines <- rep(NULL, length(models_with_groupings))

  for (deg_freedom in 3:max_parameters) {
    knots <- seq(range[1], range[2], length.out = deg_freedom + 1)[2:deg_freedom]

    train_data <- data.frame(x = x_train, y = y_train)
    models_with_splines[[deg_freedom]] <- lm(y ~ ns(x, knots=knots), data = train_data)

    # Training error rate
    train_preds <- predict(models_with_splines[[deg_freedom]], train_data)
    soses <- (1/N) * sum( (y_train - train_preds)**2)
    train_errors_splines[deg_freedom - 2] <- soses

    # Testing error rate
    test_data <- data.frame(x = x_test, y = y_test)  
    test_preds <- predict(models_with_splines[[deg_freedom]], test_data)
    soses <- (1/N) * sum( (y_test - test_preds)**2)
    test_errors_splines[deg_freedom - 2] <- soses
  }

  error_df_splines <- data.frame(
    x = rep(3:max_parameters, 2),
    e = c(train_errors_splines, test_errors_splines),
    id = c(rep("train", length(train_errors_splines)),
           rep("test", length(test_errors_splines))),
    type = "splines"
  )
  out_obj$errors_splines_plot <- ggplot(data = error_df_splines) +
    geom_line(aes(x = x, y = e)) +
    facet_wrap(~ id) +
    labs(title = "Error Rates with Natural Cubic Spline Transformations",
         x = ("Number of Estimated Parameters"),
         y = ("Average Squared Error"))


  error_df <- rbind(error_df_cuts, error_df_splines)
  out_obj$error_df <- error_df

  # The training error for the first cut model is always an outlier, and
  # messes up the y range of the plots.
  y_lower_bound <- min(c(train_errors_cuts, train_errors_splines))
  y_upper_bound = train_errors_cuts[2]
  out_obj$errors_comparison_plot <- ggplot(data = error_df) +
    geom_line(aes(x = x, y = e)) +
    facet_wrap(~ id*type) +
    scale_y_continuous(limits = c(y_lower_bound, y_upper_bound)) +
    labs(
      title = ("Binning vs. Natural Splines"),
      x = ("Number of Estimated Parameters"),
      y = ("Average Squared Error"))

  out_obj
}

19

সমষ্টিটি যথেষ্ট অর্থবহ (গবেষক সে সম্পর্কে সচেতন কিনা)।

স্বতন্ত্র ভেরিয়েবল সহ ডেটা বিন্যাস করা উচিত, যখন কেউ চায় তখনই ডেটা ভিত্তিক :

  • পরিসংখ্যানিক শক্তি হেমোরেজ করতে।

  • সমিতির পক্ষপাতদুষ্ট করা।

আমি বিশ্বাস করি, গেল্কে এবং বিহল (১৯৩— — অবশ্যই পাঠযোগ্য, এবং সহজেই কিছু সহজ কম্পিউটার সিমুলেশনের পরামর্শ দেওয়া হয়েছে যেগুলি নিজের জন্য চালাতে পারে) এবং বিশেষত 'পরিবর্তনশীল অঞ্চল ইউনিট সমস্যা' সাহিত্যে (ওপেনশো) চালিয়ে যাওয়া একটি সাহিত্য আমার বিশ্বাস , 1983; ডুডলি, 1991; লি এবং কেম্প, 2000) এই দুটি বিষয়ই পরিষ্কার করেছে।

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

তথ্যসূত্র
ডুডলি, জি। (1991)। স্কেল, সমষ্টি এবং পরিবর্তনযোগ্য আঞ্চল ইউনিট সমস্যা । [বেতন-প্রাচীর] অপারেশনাল জিওগ্রাফার, 9 (3): 28-33।

গহল্কে, সিই এবং বিহল, কে। (1934)। গোষ্ঠীবদ্ধ কিছু এফেক্টস পরে জনগণনা মধুপুর উপাদান মধ্যে পারস্পরিক সম্পর্কের সহগের সাইজ । [বেতন-প্রাচীর] আমেরিকান স্ট্যাটিস্টিকাল অ্যাসোসিয়েশন জার্নাল , 29 (185): 169–170।

ক্রিগার, এন (2012)। কে এবং একটি "জনসংখ্যা" কী? ঐতিহাসিক বিতর্ক, বর্তমান বিতর্ক, এবং "জনসংখ্যা স্বাস্থ্য" বুঝতে এবং স্বাস্থ্য স্বরূপ শোধক জন্য প্রভাব । মিলবাঙ্ক ত্রৈমাসিক , 90 (4): 634–681।

লি, এইচটি কে এবং কেম্প, জেড। (2000)। স্থিতিশীল যুক্তি এবং স্থানিক ও টেম্পোরাল ডেটাগুলির অন-লাইন বিশ্লেষণমূলক প্রক্রিয়াকরণ । ইন প্রসিডিংস স্থানিক ডেটার উপর 9 ম আন্তর্জাতিক সিম্পোজিয়াম সামলাচ্ছে , বেইজিং, জনসংযোগ চীন। আন্তর্জাতিক ভৌগলিক ইউনিয়ন।

ওপেনশো, এস (1983)। পরিবর্তনযোগ্য আঞ্চল ইউনিট সমস্যা। আধুনিক ভূগোলের ধারণা এবং কৌশলসমূহ । জিও বুকস, নরুইচ, যুক্তরাজ্য।


10
আমি এই উত্তরটি ভোট দিতে পেরে দুঃখ পেয়েছি কারণ আপনার প্রতিবেদনটি এখন 8888 এর চেয়ে বড়, যা আমাকে নান্দনিকভাবে আনন্দিত করেছিল।
সাইকোরাক্স মনিকাকে

@ hxd1011 এবং জেনারেলআবারিয়াল:: ডি: ডি: ডি: ডি
অ্যালেক্সিস

আমি এই উত্তরটি ভালবাসি, তবে @ ম্যাথিউড্রুরির উত্তরটি সত্যিই আমি দেখতে চাই।
হাইটাও ডু

একগুচ্ছ আকর্ষণীয় উল্লেখ সহ একটি দৃinc় উত্তর দেওয়ার জন্য আপনাকে ধন্যবাদ!
y.selivonchyk
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.