0 এবং 1 এর মধ্যে নম্বর হিসাবে আনবাউন্ডেড ভেরিয়েবলকে কীভাবে উপস্থাপন করবেন


28

আমি 0 এবং 1 এর মধ্যে একটি সংখ্যা হিসাবে একটি ভেরিয়েবল উপস্থাপন করতে চাই ভেরিয়েবল একটি সহজাত সীমা ছাড়াই একটি অ-নেতিবাচক পূর্ণসংখ্যা হয়। আমি 0 থেকে 0 এর মানচিত্র রাখি তবে 0 বা 1 এর মধ্যে আমি 1 বা সংখ্যায় কী ম্যাপ করতে পারি?

সীমাটি সরবরাহ করতে আমি সেই পরিবর্তনশীলটির ইতিহাস ব্যবহার করতে পারি। এর অর্থ হ'ল সর্বাধিক পরিমাণ বৃদ্ধি পেলে আমাকে পুরানো পরিসংখ্যান পুনরায় সেট করতে হবে। আমার কি এটি করতে হবে বা অন্য কৌশল সম্পর্কে আমার জানা উচিত?


6
যেহেতু পর্যন্ত কোনও ননডেক্রেইজিং ফাংশন কৌশলটি করবে, আপনার অনেক স্বাচ্ছন্দ্য রয়েছে। তবে কিছু পদ্ধতি প্রয়োগের উপর নির্ভর করে অন্যের চেয়ে ভাল হবে। এই জাতীয় পুনঃপ্রকাশের জন্য আপনার উদ্দেশ্য কী? [0,)[0,1]
whuber

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

1
@ স্পেন্সার ঠিক কীভাবে আপনি সামগ্রী এবং "প্রাসঙ্গিকতা" পরিমাপ করছেন? উদাহরণস্বরূপ, নির্বিচারে আইশগুলিতে, গণনা, অনুপাত, মতামতের ফ্রিকোয়েন্সি, অন্যান্য সামগ্রীর সাথে সম্পর্কিত হওয়া ইত্যাদি etc. ইত্যাদি types
whuber

1
আমি এগুলি নির্বিচারে স্কেলগুলিতে পরিমাপ করছি। বিষয়বস্তু কত পুরানো। কত টুকরো সামগ্রীতে "পয়েন্ট" পাওয়া যায়। বিষয়বস্তুর ডোমেনে স্ব-প্রতিবেদনিত "আগ্রহ"।
স্পেন্সার

2
আপনি যে সহজ সরল রূপান্তর ব্যবহার করতে পারেন তার মধ্যে একটি হ'ল আপনার ডেটাকে কোয়ান্টাইল স্কোরগুলিতে রূপান্তর করা।
Charles.y.zheng

উত্তর:


34

এটি করার একটি খুব সাধারণ কৌশল (উদাহরণস্বরূপ, সংযোগবাদী মডেলিংয়ে) হাইপারবোলিক ট্যানজেন্ট তানহকে 'স্কোয়াশিং ফাংশন' হিসাবে ব্যবহার করা It এটি স্বয়ংক্রিয়ভাবে সমস্ত সংখ্যাকে -1 এবং 1 এর ব্যবধানের সাথে ফিট করে Which যা আপনার ক্ষেত্রে সীমাটি সীমাবদ্ধ করে from 0 থেকে 1. ইন rএবং matlabআপনি এটি মাধ্যমে পাবেন tanh()

অন্য স্কোয়াশিং ফাংশন হ'ল লজিস্টিক ফাংশন (নামটির জন্য সাইমনকে ধন্যবাদ), দ্বারা সরবরাহিত , যা 0 থেকে 1 পর্যন্ত রেঞ্জকে সীমাবদ্ধ করে (0 ম্যাপযুক্ত সাথে)। 5)। সুতরাং আপনাকে ফলাফলটি 2 দিয়ে গুণতে হবে এবং আপনার ডেটা 0 এবং 1 এর মধ্যে ব্যবধানে ফিট করতে 1 বিয়োগ করতে হবে।(এক্স)=1/(1+ +-এক্স)

এখানে কয়েকটি সাধারণ আর কোড যা উভয় ফাংশনকে প্লট করে (লাল রঙে তানহ, নীল রঙের লজিস্টিক) যাতে আপনি দেখতে পাবেন যে উভয় স্কোয়াশ কীভাবে:

x <- seq(0,20,0.001)
plot(x,tanh(x),pch=".", col="red", ylab="y")
points(x,(1 / (1 + exp(-x)))*2-1, pch=".",col="blue")

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

25

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

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


সুতরাং ডেটা জোর করে সাথে কিছুই করার নেই , এবং লেখক যদি সত্যিই এটি খোঁজেন তবে সাধারণভাবে আমি মানীকরণের সাথে একমত নই :) আলোচনাটি প্রকাশের আগে আমি উত্তর দিয়েছিলাম, তাই সম্ভবত আমার উত্তরটি মুছুন যদি এই উত্তরটি থাকে তবে ঠিক আছে :)[0,1]
দিমিত্রিজ সেলভ

1
যদি কেউ বহিরাগতদের সম্পর্কে উদ্বিগ্ন থাকে তবে কেউ স্ট্যান্ডার্ড বিচ্যুতির পরিবর্তে মিডিয়ান পরম বিচ্যুতি (মিডিয়ান থেকে) ব্যবহার করতে পারে। আর তে, mad()ফাংশনটি ব্যবহার করুন । এবং যদি কেউ স্কিউনেস সম্পর্কে চিন্তিত হয় তবে কেউ মূল পর্যবেক্ষণের পরিবর্তে ডেটার সীমা ব্যবহার করতে পারেন। আর, এই হবে rank(), কিন্তু যদি এক নতুন ডেটা ব্যবহার করতে গিয়ে ecdf()একটি ভালো বিকল্প (হবে ecdf(x)আয় একটি নতুন ফাংশন যা মূলত মান দেয় থেকে এর -quantile , যেমন, 0 (সত্যিই ) এর সর্বনিম্ন মান , থেকে সর্বোচ্চ মানের, 0.5 এর মধ্যবর্তী মানের ইত্যাদি)পি এক্স 1 / এন এক্স 1পিপিএক্স1/এনএক্স1
কার্ল ওভে হুফথামার

10

যে কোনও সিগময়েড ফাংশন কাজ করবে:


ইরফ খুব কার্যকর কাজ নয়, তবে আপনি যদি এটির পরিবর্তনের জন্য এটি ব্যবহার না করতে চান তবে শর্ত থাকে।

আমি কিছু ছোট টুইটগুলি সহ একটি সাধারণ লজিস্টিক ফাংশনটি ব্যবহার করে শেষ করেছি: (1 / (1 + java.lang.Math.exp (-1 * (ফ্যাক্টর * i))) - 0.5) * 2. আমি 0.05 এর একটি উপাদান বেছে নিয়েছি যা আমার পক্ষে 0 থেকে কয়েক শতাধিকের জন্য ভাল কাজ করছে বলে মনে হচ্ছে।
জিলিস ভ্যান গুরপ

1.0 / (1.0 + এক্সপ্রেস (-1.69897 * (এক্স-গড় (এক্স)) / এসডি (এক্স)) পিএনরোমের খুব কাছাকাছি
ক্রিস

3

হেনরিক এবং সাইমন বাইর্নের ভাল পরামর্শ ছাড়াও আপনি f (x) = x / (x + 1) ব্যবহার করতে পারেন। তুলনা করার মাধ্যমে, লজিস্টিক ফাংশন এক্স বড় হওয়ার সাথে সাথে পার্থক্যগুলিকে অতিরঞ্জিত করবে। অর্থাৎ f (x) এবং f (x + 1) এর মধ্যে পার্থক্য f (x) = x / (x + 1) এর চেয়ে লজিস্টিক ফাংশনের সাথে আরও বড় হবে। আপনি এই প্রভাবটি পেতে বা নাও পেতে পারেন।


1

আমার আগের পোস্টে 0 এবং 1 এর মধ্যে র‌্যাঙ্ক করার একটি পদ্ধতি রয়েছে class শ্রেণিবদ্ধ ইনপুট পারস্পরিক সম্পর্কের বিষয়ে পরামর্শ

তবে, আমি যে র‌্যাঙ্কিংটি ব্যবহার করেছি, টিমিন / টিম্যাক্স ন্যূনতম / সর্বাধিক নমুনা ব্যবহার করে তবে আপনি জনসংখ্যাকে ন্যূনতম / সর্বাধিক উপযুক্ত বলে মনে করতে পারেন। জেড স্কোরগুলিও দেখুন


1

অন্যান্য উত্তরগুলিতে যোগ করার জন্য পনর্মের পরামর্শ দিচ্ছে ...

পরামিতিগুলি নির্বাচনের জন্য সম্ভাব্য সর্বোত্তম পদ্ধতির জন্য আমি পনরমের জন্য এই সান্নিধ্য প্রস্তাব করি।

1.0/(1.0+exp(-1.69897*(x-mean(x))/sd(x)))

pnormish

এটি মূলত সফটম্যাক্স নরমালাইজেশন।

একটি চিমটি মধ্যে রেফারেন্স রেফারেন্স


1

এটি কার্যকর করার দুটি উপায় আছে যা আমি সাধারণত ব্যবহার করি। আমি সবসময় রিয়েলটাইম ডেটা নিয়ে কাজ করি, তাই এটি ধারাবাহিক ইনপুট ধরে নেয়। এখানে কয়েকটি সিউডো কোড রয়েছে:

প্রশিক্ষণযোগ্য মিনম্যাক্স ব্যবহার করা:

define function peak:
    // keeps the highest value it has received

define function trough:
    // keeps the lowest value it has received

define function calibrate:
    // toggles whether peak() and trough() are receiving values or not

define function scale:
    // maps input range [trough.value() to peak.value()] to [0.0 to 1.0]

এই ফাংশনটির প্রয়োজন হয় যে আপনি হয় প্রাথমিক প্রশিক্ষণ পর্ব (ব্যবহার করে calibrate()) সম্পাদন করুন অথবা নির্দিষ্ট বিরতিতে বা নির্দিষ্ট শর্ত অনুসারে আপনি পুনরায় প্রশিক্ষণ নিতে পারেন। উদাহরণস্বরূপ, এই জাতীয় ফাংশনটি কল্পনা করুন:

define function outBounds (val, thresh):
    if val > (thresh*peak.value()) || val < (trough.value() / thresh):
        calibrate()

শিখর এবং গর্ত সাধারণত মানগুলি গ্রহণ করে না, তবে যদি outBounds()বর্তমানের শিখর থেকে 1.5 গুণ বেশি বা বর্তমান গর্তের তুলনায় 1.5 ভাগের চেয়ে কম এমন কোনও মান পাওয়া যায়, তবে calibrate()ফাংশনটি স্বয়ংক্রিয়ভাবে পুনরায় ক্যালিব্রেট করার অনুমতি দেয়।

একটি historicalতিহাসিক মিনম্যাক্স ব্যবহার করে:

var arrayLength = 1000
var histArray[arrayLength]

define historyArray(f):
    histArray.pushFront(f) //adds f to the beginning of the array

define max(array):
    // finds maximum element in histArray[]
    return max

define min(array):
    // finds minimum element in histArray[]
    return min

define function scale:
    // maps input range [min(histArray) to max(histArray)] to [0.0 to 1.0]

main()
historyArray(histArray)
scale(min(histArray), max(histArray), histArray[0])
// histArray[0] is the current element

প্রথমটি উদাহরণস্বরূপ [শিখর] এবং [ট্রাট] অবজেক্টের সাথে এবং দ্বিতীয় উদাহরণের জন্য [জিট ৩৩ মি] দিয়ে ম্যাক্স / এমএসপি / জিটারে এটি সমস্ত প্রয়োগ করা যেতে পারে।
সোপান

0

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

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