কীভাবে 0-1 ব্যাপ্তিতে ডেটা সাধারণ করা যায়?


265

আমি সাধারণীকরণে হারিয়ে গেছি, কেউ দয়া করে আমাকে গাইড করতে পারে।

আমার ন্যূনতম এবং সর্বাধিক মান রয়েছে যথাক্রমে -23.89 এবং 7.54990767।

যদি আমি 5.6878 এর মান পাই তবে আমি কীভাবে 0 থেকে 1 এর স্কেলে এই মানটি স্কেল করতে পারি।


8
এই উপায় = (মান-মিনিট) / (সর্বাধিক-মিনিট)
অ্যাঞ্জেলো

3
এটি আপনাকে এই থ্রেডটি পড়তে সহায়তা করতে পারে: কীভাবে যাচাই-বাছাই করে কোনও-ডিস্ট্রিবিউশন -কে সাধারণীকরণ করা হয় । যদি এটি আপনার প্রশ্নের উত্তর দেয় তবে আপনি এই প্রশ্নটি মুছতে পারেন; যদি তা না হয় তবে আপনি কী বুঝতে পারছেন না তা নির্দিষ্ট করতে আপনার প্রশ্নটি সম্পাদনা করুন।
গাং

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

1
প্রদত্ত সমাধানগুলি একটি রৈখিক বিপরীতে মান বিবেচনা করে - আপনি কি অন্যরকম স্বাভাবিককরণ চান, উদাহরণস্বরূপ যে আউটপুটটির জন্য অভিন্ন সম্ভাবনা অর্জন করে?
মেডুজ

উত্তর:


299

আপনি যদি নিজের ডেটাটিকে স্বাভাবিক করতে চান তবে আপনি নিম্নলিখিতগুলি পরামর্শ এবং সহজভাবে গণনা করার জন্য এটি করতে পারেন:

zi=ximin(x)max(x)min(x)

যেখানে এবং এখন আপনার স্বাভাবিকের ডেটা। ধারণার প্রমাণ হিসাবে (যদিও আপনি এটি জিজ্ঞাসা করেননি) এখানে এই কোডটি চিত্রিত করার জন্য এখানে কিছু কোড এবং সহ গ্রাফ রয়েছে:x=(x1,...,xn)ziithR

এখানে চিত্র বর্ণনা লিখুন

# Example Data
x = sample(-100:100, 50)

#Normalized Data
normalized = (x-min(x))/(max(x)-min(x))

# Histogram of example data and normalized data
par(mfrow=c(1,2))
hist(x,          breaks=10, xlab="Data",            col="lightblue", main="")
hist(normalized, breaks=10, xlab="Normalized Data", col="lightblue", main="")

11
আমি কেবল আশ্চর্য হয়েছি যে দুটি বেশ আলাদা-চেহারার হিস্টোগ্রামগুলি illustrate the pointআপনার (সঠিক) উত্তরটি কীভাবে দেয়?
ttnphns

12
@ttnphns হিস্টোগ্রামগুলি বিন্যাসের কারণে এগুলিকে কেবল ভিন্ন দেখাচ্ছে। তবে আমার বক্তব্যটি দেখানো ছিল যে মূল মানগুলি -100 থেকে 100 এর মধ্যে বেঁচে থাকত এবং এখন সাধারণীকরণের পরে তারা 0 এবং 1 এর মধ্যে থাকে I আমি মনে করি বা কেবল সংক্ষিপ্ত পরিসংখ্যান দেখানোর জন্য আমি একটি ভিন্ন গ্রাফ ব্যবহার করতে পারতাম।

20
@Ttnphns- র কোমল নগ্নতা আপনাকে কেবলমাত্র একটি (সাধারণ) ধারণা চিত্রিত করার জন্য কম জটিল উপায় ব্যবহার করতে উত্সাহিত করার জন্য নয়, বরং আরও সরাসরি প্রাসঙ্গিক চিত্রটি এখানে উপকারী হতে পারে এমন ইঙ্গিত হিসাবেও (আমার সন্দেহ)। আপনি ওপেন দ্বারা সরবরাহিত ন্যূনতম এবং সর্বাধিক প্রয়োগ করা হয় তখন রূপান্তরটি গ্রাফ করার আরও সহজ সরল উপায় আবিষ্কার করে আপনি উভয়ই করতে পারেন
হোবার

1
0-1 এর পরিবর্তে কাস্টম ব্যাপ্তিতে "স্বাভাবিককরণ" করার কোনও উপায় আছে কি?
জন দেমেট্রিও

1
@ জনডেমিট্রিউ সবচেয়ে পরিষ্কার সমাধান নাও হতে পারে তবে আপনি এটি করতে সাধারণ মানের মান স্কেল করতে পারেন। যদি আপনি উদাহরণস্বরূপ 0-100 ব্যাপ্তি চান তবে আপনি প্রতিটি সংখ্যাটি কেবল 100 দ্বারা গুণিত করুন 10 মানগুলি যেগুলি থেকে আপনি কেবলমাত্র এমআইএন যোগ করেন 90 দ্বারা স্কেল করুন, তারপরে 10 যোগ করুন এটি আপনার পছন্দসই কাস্টম রেঞ্জগুলির বেশিরভাগের জন্য যথেষ্ট।
আলেকজান্ডার রোসা

47

সাধারণ এক-লাইন সূত্র সুসংগত পর্যবেক্ষিত থাকার ডাটা মান rescale করতে সর্বনিম্ন এবং সর্বোচ্চ একটি নতুন অবাধ সীমার মধ্যে 'মিনিট থেকে সর্বোচ্চ' হয়

  newvalue= (max'-min')/(max-min)*(value-max)+max'
  or
  newvalue= (max'-min')/(max-min)*(value-min)+min'.

9
এটি সঠিক, তবে দক্ষ নয়। এটি একটি রৈখিক রূপান্তর, সুতরাং আপনি পূর্বনির্ধারিত aএবং bধ্রুবক হবে, এবং তারপরে কেবল প্রয়োগ করুন newvalue = a * value + ba = (max'-min')/(max-min)এবংb = max - a * max
লাকাটা

1
আপনি কীভাবে এটি উদ্ধৃত করতে জানেন? মানে, "কোথাও" মূল "রেফারেন্স" আছে?
ট্রেফেক্স

3
@ মার্কলাকাটা হালকা (টাইপো?) সংশোধন: b = max' - a * maxবাb = min' - (a * min)
নিক

@ নিক - হ্যাঁ আমি একটি '
মার্ক Lakata

আপনি দয়া করে এখানে আপনার স্বাভাবিকীকরণটি se.mathworks.com/matlabcentral/answers/… অর্থাৎ সমীকরণের সাথে তুলনা করতে পারেন u = -1 + 2.*(u - min(u))./(max(u) - min(u));
লিও লোপোল্ড হার্টজ 준영

13

এখানে নর্মালাইজেশনের জন্য আমার পিএইচপি বাস্তবায়ন:

function normalize($value, $min, $max) {
	$normalized = ($value - $min) / ($max - $min);
	return $normalized;
}

তবে যখন আমি আমার নিজস্ব কৃত্রিম নিউরাল নেটওয়ার্কগুলি তৈরি করছিলাম, গ্রাফের জন্য ভাল পাঠযোগ্য আউটপুট পাওয়ার জন্য আমার স্বাভাবিকীকরণের আউটপুটটিকে মূল ডেটাতে ফিরে যেতে হবে to

function denormalize($normalized, $min, $max) {
	$denormalized = ($normalized * ($max - $min) + $min);
	return $denormalized;
}

$int = 12;
$max = 20;
$min = 10;

$normalized = normalize($int, $min, $max); // 0.2
$denormalized = denormalize($normalized, $min, $max); //12

অস্বীকৃতি নিম্নলিখিত সূত্র ব্যবহার করে:

x(maxmin)+min


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

2
আমি মনে করি না, এটিই কেবল পার্থক্য। আমার কোডে, আমি এটিও দেখিয়েছি, কীভাবে একটি স্বাভাবিকীকরণের মানটিকে স্বাভাবিককরণের পূর্বে দেওয়া মানটিতে কীভাবে ফিরিয়ে আনতে হয়। আমি মনে করি, এটি এই উত্তরটি মূল্যবান করে তোলে।
জাঙ্কাল

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

মানটি পুনরুদ্ধার করার জন্য আপনার কিছু সমস্যা রয়েছে: উদাহরণস্বরূপ নিউরাল নেটওয়ার্কগুলি ... তবে আপনি ঠিক বলেছেন, ডেটা বিশ্লেষণের পদ্ধতিতে, এই উত্তরটি খুব খারাপ।
জাঙ্কাল

3
@ নিককক্স আমি তার উত্তর গ্রহণযোগ্য উত্তর চেয়ে সন্তোষজনক বলে খুঁজে পেয়েছি।
কার্ল মরিসন

4

শূন্য দ্বারা বিভাগ

একটি জিনিস মনে রাখতে হবে এটি max - minশূন্যের সমান হতে পারে। এই ক্ষেত্রে, আপনি এই বিভাগটি সম্পাদন করতে চাইবেন না।

আপনি যখন সাধারণ হওয়ার চেষ্টা করছেন তালিকার সমস্ত মান একই হয় তখন এটি ঘটবে সে ক্ষেত্রে। যেমন একটি তালিকা স্বাভাবিক করতে, প্রতিটি আইটেম হবে 1 / length

// JavaScript
function normalize(list) {
   var minMax = list.reduce((acc, value) => {
      if (value < acc.min) {
         acc.min = value;
      }

      if (value > acc.max) {
         acc.max = value;
      }

      return acc;
   }, {min: Number.POSITIVE_INFINITY, max: Number.NEGATIVE_INFINITY});

   return list.map(value => {
      // Verify that you're not about to divide by zero
      if (minMax.max === minMax.min) {
         return 1 / list.length
      }

      var diff = minMax.max - minMax.min;
      return (value - minMax.min) / diff;
   });
}

উদাহরণ:

normalize([3, 3, 3, 3]); // output => [0.25, 0.25, 0.25, 0.25]

এটি 0-1-এর ব্যাপ্তিতে নয়, 1 টি যোগফলকে উদ্ধার করে। আমি কেবল উত্তরটি তাই অফ-টপিক বলে মনে করি।
ttnphns

তাই না। normalize([12, 20, 10])আউটপুট [0.2, 1.0, 0.0], যা আপনি একই পেতে হবে (val - min) / (max - min)
রড্রিগো-সিলভির

@ রদ্রিগো-সিলভিরা আমি কেন দেখছি না যে সমস্ত 0.25 আউটপুট রয়েছে। সব কি ভাল হয় না 0.5? সমস্ত আইটেম সমান, তাই ব্যবধানকে কেন্দ্র করে রাখতে হবে।
javierdvalle

0

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

এখানে চিত্র বর্ণনা লিখুন

আমি এটি ব্যবহার করার পরামর্শ দিচ্ছি

এখানে চিত্র বর্ণনা লিখুন

ন্যূনতম এবং সর্বাধিক পরিসরে এই জাতীয় স্কোয়াশিং সহ

এখানে চিত্র বর্ণনা লিখুন

এবং সীমার বাইরে থাকা প্রত্যাশার পরিমানের আকারটি আস্থা ছাড়িয়ে যাওয়ার মাত্রার সাথে সমানুপাতিক যে সীমার বাইরে মান থাকবে।

আরও তথ্যের জন্য আপনি গুগল করতে পারেন: সীমার বাইরে স্কোয়াশ করা এবং "ডরিয়ান পাইল" এর ডেটা প্রস্তুতির বই পড়ুন


5
প্রচলিত হিসাবে মূলধনকে ব্যবহার করতে আপনার উত্তরটি সম্পাদনা করুন। ধারাবাহিক লোয়ার কেস মজাদার বা দক্ষ মনে হতে পারে তবে প্রায় প্রত্যেকের পক্ষে এটি পড়া আরও কঠিন।
নিক কক্স

3
চিত্রগুলি আপনার উত্তরটি যথেষ্ট পরিমাণে জানায় না। "স্কোয়াশিং কৌশল" আসলে কী?
whuber

0

এটা চেষ্টা কর. এটি ফাংশন স্কেলের সাথে সামঞ্জস্যপূর্ণ

normalize <- function(x) { 
  x <- as.matrix(x)
  minAttr=apply(x, 2, min)
  maxAttr=apply(x, 2, max)
  x <- sweep(x, 2, minAttr, FUN="-") 
  x=sweep(x, 2,  maxAttr-minAttr, "/") 
  attr(x, 'normalized:min') = minAttr
  attr(x, 'normalized:max') = maxAttr
  return (x)
} 

7
এই উত্তর এবং ইতিমধ্যে গৃহীত উত্তরের মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য রয়েছে। এটি মূল ধারণাটি স্পষ্টভাবে এবং সরাসরি ব্যাখ্যা করেছিল এবং তারপরে দ্বিতীয়ত দেখানো হয় যে এটি একটি সাধারণভাবে ব্যবহৃত প্রোগ্রামে কীভাবে করা যায়। বিপরীতে, আপনি এখানে কেবল কোড পোস্ট। যদিও আমি বিশ্বাস করতে পেরে খুশি যে এই ফোরামটিতে এটি একটি ভাল কোড (কিছু অব্যক্ত ভাষায়) রয়েছে আমাদের কাছে সাধারণত প্রতিটি প্রশ্নের উত্তর কীভাবে প্রতিটি অনুমেয় ভাষায় এটি কীভাবে করা যায় তা ব্যাখ্যা করার একটি বান্ডিল নেই। অন্যথায় আমাদের কাছে এসএএস, এসপিএসএস, স্টাটা, ম্যাটল্যাব, সি, সি ++, সি #, জাভাতে উত্তর থাকবে। পাইথন ইত্যাদি ইত্যাদি
নিক কক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.