কেউ আমাকে স্ট্যান্ডার্ডস্কেলার ব্যাখ্যা করতে পারেন?


উত্তর:


114

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


4
আমি দেখতে পাই যে এই উত্তরটি সঠিক নয়। each value in the dataset will have the sample mean value subtracted- এটা সত্য নয়। প্রতিটি বৈশিষ্ট্য / কলামের গড় নির্দিষ্ট কলামের মানগুলি থেকে বিয়োগ করা হবে। এটি কলাম অনুসারে সম্পন্ন হয়। নেই sample mean value subtracted- নীচে আমার উত্তর দেখুন
seralouk

@ মাকিস আপনার পরামর্শ অনুসারে আমি আমার উত্তর সম্পাদনা করেছি।
user6903745

111

ভূমিকা: আমি ধরে নিয়েছি যে আপনার একটি ম্যাট্রিক্স রয়েছে Xযেখানে প্রতিটি সারি / লাইন একটি নমুনা / পর্যবেক্ষণ এবং প্রতিটি কলাম একটি পরিবর্তনশীল / বৈশিষ্ট্য ( sklearnউপায় দ্বারা কোনও এমএল ফাংশনের জন্য এটি প্রত্যাশিত ইনপুট - X.shapeহওয়া উচিত [number_of_samples, number_of_features])।


পদ্ধতির কোর : মূল ধারণা হয় স্বাভাবিক / STANDARDIZE অর্থাত μ = 0এবং σ = 1আপনার বৈশিষ্ট্য / ভেরিয়েবল / কলাম X, স্বতন্ত্রভাবে , সামনে কোনো মেশিন লার্নিং মডেল প্রয়োগের।

StandardScaler()বৈশিষ্ট্যগুলি স্বাভাবিক করে তুলবে এক্স এর প্রতিটি কলাম, স্বতন্ত্রভাবে , যাতে প্রতিটি কলাম / বৈশিষ্ট্য / ভেরিয়েবল থাকে μ = 0এবং σ = 1


PS: আমি এই পৃষ্ঠায় সর্বাধিক উত্সাহিত উত্তর পাই, ভুল। আমি উদ্ধৃত করছি "ডেটাসেটের প্রতিটি মানের নমুনা গড় মানটি বিয়োগ করা হবে" - এটি সত্য বা সঠিকও নয়।


এছাড়াও দেখুন: কীভাবে এবং কেন আপনার ডেটা মানক করা যায়: একটি অজগর টিউটোরিয়াল


উদাহরণ:

from sklearn.preprocessing import StandardScaler
import numpy as np

# 4 samples/observations and 2 variables/features
data = np.array([[0, 0], [1, 0], [0, 1], [1, 1]])
scaler = StandardScaler()
scaled_data = scaler.fit_transform(data)

print(data)
[[0, 0],
 [1, 0],
 [0, 1],
 [1, 1]])

print(scaled_data)
[[-1. -1.]
 [ 1. -1.]
 [-1.  1.]
 [ 1.  1.]]

যাচাই করুন যে প্রতিটি বৈশিষ্ট্য (কলাম) এর গড় 0:

scaled_data.mean(axis = 0)
array([0., 0.])

যাচাই করুন যে প্রতিটি বৈশিষ্ট্য (কলাম) এর std 1:

scaled_data.std(axis = 0)
array([1., 1.])

গণিত:

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


আপডেট 08/2020 : ইনপুট পরামিতি with_meanএবং with_stdএবং False/ এর সাথে সম্পর্কিত True, আমি এখানে একটি উত্তর সরবরাহ করেছি: "with_std = মিথ্যা বা সত্য" এবং "উইথ_মিয়ান = মিথ্যা বা সত্য" এর মধ্যে স্ট্যান্ডার্ডস্কেলারের পার্থক্য


আমি [1.15, 1.15]যখন পান্ডস ডিএফ হিসাবে গণনা করি তখন কেন আমি পাই তা আপনার কি ধারণা আছে pd.DataFrame(scaled_data).std(0)?
সোস

যখন আমি রান pd.DataFrame(scaled_data)[0]করি আমি একটি সিরিজ Name: 0, dtype: float64এবং মানগুলি পাই [-1.0, 1.0, -1.0, 1.0]। বিন্যাসের জন্য দুঃখিত
SOS

@ সেরলোক আপনার উত্তরটি পছন্দ করেছেন, তবে আমি এখনও ভাবছি যে ইনপুট ডেটা ব্যবহার করে পরিবর্তনের পেছনের উদ্দেশ্য কী, এটি কি StandardScalerমেশিন লার্নিংকে অ্যালগরিদমকে আরও দ্রুততর করে তোলে, বা আরও সঠিক সিদ্ধান্ত নিতে বা অন্য কিছু করতে সহায়তা করে?
সেপিসোড

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

সুতরাং,
মানীকরণ


25

StandardScaler কাজটি সম্পাদন করে প্রমিতকরণ । সাধারণত কোনও ডেটাসেটে ভেরিয়েবল থাকে যা স্কেল ভিন্ন। একটি কর্মচারী ডেটা সেটটি যেমন মান বয়স কলাম ধারণ করবে স্কেল 20-70 উপর মান এবং বেতন কলাম স্কেল 10000-80000 উপর
এই দুটি কলাম স্কেল পৃথক পৃথক, মেশিন লার্নিং মডেল তৈরি করার সময় এগুলি সাধারণ স্কেল হিসাবে প্রমিত হয় Standard


11

আপনি যখন বিভিন্ন ইউনিটের সাথে সম্পর্কিত ডেটা তুলনা করতে চান এটি দরকারী is সেক্ষেত্রে আপনি ইউনিটগুলি সরাতে চান। সমস্ত ডেটার একটি সামঞ্জস্যপূর্ণ উপায়ে এটি করতে, আপনি ডেটাটি এমনভাবে রূপান্তরিত করেন যে বৈকল্পিক একক এবং সিরিজের গড় 0 হয়।


4
আপনি কি দয়া করে একটি উদাহরণ দিয়ে ব্যাখ্যা করতে
পারেন..এতে

7

স্ট্যান্ডার্ডাইজেশন গণনা কীভাবে কাজ করে তা ব্যাখ্যা করার জন্য নীচে একটি সাধারণ কাজের উদাহরণ। তত্ত্বের অংশটি ইতিমধ্যে অন্যান্য উত্তরে ব্যাখ্যা করা হয়েছে।

>>>import numpy as np
>>>data = [[6, 2], [4, 2], [6, 4], [8, 2]]
>>>a = np.array(data)

>>>np.std(a, axis=0)
array([1.41421356, 0.8660254 ])

>>>np.mean(a, axis=0)
array([6. , 2.5])

>>>from sklearn.preprocessing import StandardScaler
>>>scaler = StandardScaler()
>>>scaler.fit(data)
>>>print(scaler.mean_)

#Xchanged = (X−μ)/σ  WHERE σ is Standard Deviation and μ is mean
>>>z=scaler.transform(data)
>>>z

গণনা

যেমন আপনি আউটপুটে দেখতে পাচ্ছেন, গড়টি [6]। , 2.5] এবং এসটিডি বিচ্যুতি [1.41421356, 0.8660254]

ডেটা (0,1) অবস্থান 2 মানক = (2 - 2.5) /0.8660254 = -0.57735027

(1,0) পজিশনে ডেটা 4 মানককরণ = (4-6) /1.41421356 = -1.414

মানীকরণের পরে ফলাফল

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

মানককরণের পরে গড় এবং স্ট্যান্ড ডেভিয়েশন পরীক্ষা করুন

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

দ্রষ্টব্য: -2.77555756e-17 0 এর খুব কাছে।

তথ্যসূত্র

  1. আউটলিয়ারদের সাথে ডেটাতে বিভিন্ন স্কেলারের প্রভাবের তুলনা করুন

  2. নরমালাইজেশন এবং মানককরণের মধ্যে পার্থক্য কী?

  3. স্কলার স্ট্যান্ডার্ডস্কেলারের সাহায্যে স্কেল করা ডেটার মধ্যম শূন্য নয়


5

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

কোড

import pandas as pd
import scipy.stats as ss
from sklearn.preprocessing import StandardScaler


data= [[1, 1, 1, 1, 1],[2, 5, 10, 50, 100],[3, 10, 20, 150, 200],[4, 15, 40, 200, 300]]

df = pd.DataFrame(data, columns=['N0', 'N1', 'N2', 'N3', 'N4']).astype('float64')

sc_X = StandardScaler()
df = sc_X.fit_transform(df)

num_cols = len(df[0,:])
for i in range(num_cols):
    col = df[:,i]
    col_stats = ss.describe(col)
    print(col_stats)

আউটপুট

DescribeResult(nobs=4, minmax=(-1.3416407864998738, 1.3416407864998738), mean=0.0, variance=1.3333333333333333, skewness=0.0, kurtosis=-1.3599999999999999)
DescribeResult(nobs=4, minmax=(-1.2828087129930659, 1.3778315806221817), mean=-5.551115123125783e-17, variance=1.3333333333333337, skewness=0.11003776770595125, kurtosis=-1.394993095506219)
DescribeResult(nobs=4, minmax=(-1.155344148338584, 1.53471088361394), mean=0.0, variance=1.3333333333333333, skewness=0.48089217736510326, kurtosis=-1.1471008824318165)
DescribeResult(nobs=4, minmax=(-1.2604572012883055, 1.2668071116222517), mean=-5.551115123125783e-17, variance=1.3333333333333333, skewness=0.0056842140599118185, kurtosis=-1.6438177182479734)
DescribeResult(nobs=4, minmax=(-1.338945389819976, 1.3434309690153527), mean=5.551115123125783e-17, variance=1.3333333333333333, skewness=0.005374558840039456, kurtosis=-1.3619131970819205)

বিঃদ্রঃ:

স্কিপি.স্ট্যাটস মডিউল সঠিকভাবে "নমুনা" বৈকল্পিকের প্রতিবেদন করছে, যা ডিনোমিনেটরে (এন - 1) ব্যবহার করে। "জনসংখ্যার" প্রকরণটি বৈকল্পিক গণনার জন্য ডিনোমিনেটরে n ব্যবহার করবে। আরও ভাল বুঝতে, দয়া করে নীচের কোডটি দেখুন যা উপরে সেট করা ডেটার প্রথম কলাম থেকে স্কেল করা ডেটা ব্যবহার করে:

কোড

import scipy.stats as ss

sc_Data = [[-1.34164079], [-0.4472136], [0.4472136], [1.34164079]]
col_stats = ss.describe([-1.34164079, -0.4472136, 0.4472136, 1.34164079])
print(col_stats)
print()

mean_by_hand = 0
for row in sc_Data:
    for element in row:
        mean_by_hand += element
mean_by_hand /= 4

variance_by_hand = 0
for row in sc_Data:
    for element in row:
        variance_by_hand += (mean_by_hand - element)**2
sample_variance_by_hand = variance_by_hand / 3
sample_std_dev_by_hand = sample_variance_by_hand ** 0.5

pop_variance_by_hand = variance_by_hand / 4
pop_std_dev_by_hand = pop_variance_by_hand ** 0.5

print("Sample of Population Calcs:")
print(mean_by_hand, sample_variance_by_hand, sample_std_dev_by_hand, '\n')
print("Population Calcs:")
print(mean_by_hand, pop_variance_by_hand, pop_std_dev_by_hand)

আউটপুট

DescribeResult(nobs=4, minmax=(-1.34164079, 1.34164079), mean=0.0, variance=1.3333333422778562, skewness=0.0, kurtosis=-1.36000000429325)

Sample of Population Calcs:
0.0 1.3333333422778562 1.1547005422523435

Population Calcs:
0.0 1.000000006708392 1.000000003354196

4
দয়া করে কেন বৈকল্পিকতা 1 নয়?
সর্বাধিক

@ ম্যাক্স, স্কিপি পরিসংখ্যানগুলি নমুনা বৈকল্পিকতা ব্যবহার করছে। উত্তর দেওয়ার জন্য নতুন সংযোজন দেখুন।
থম আইভেস

@ সেরলোক হ্যাঁ যদি জনসংখ্যার বৈকল্পিক এবং এসডি বিচ্যুতি হয়, তবে নমুনা বৈকল্পিক এবং এসডি বিচ্যুতির জন্য নয় - স্যাম্পল ক্যালকের ডিফল্ট স্কিপি পরিসংখ্যান।
থম আইভেস

3

প্রয়োগের পরে StandardScaler(), এক্সে প্রতিটি কলামের গড় 0 এবং স্ট্যান্ডার্ড বিচ্যুতি 1 হবে।

সূত্রগুলি এই পৃষ্ঠায় অন্যদের দ্বারা তালিকাভুক্ত করা হয়েছে।

যুক্তি: কিছু অ্যালগরিদমের মতো দেখতে ডেটা প্রয়োজন ( স্ক্লেরন ডক্স দেখুন )।


সঠিক। কিছু উত্তর স্কেলি পরিসংখ্যানের পরিসংখ্যানের ডেটা নমুনার গড় এবং বৈচিত্রের বিবরণ দেখায়। ছোট ডেটা সেটগুলির জন্য নমুনা বৈকল্পিকতা জনসংখ্যার বৈকল্পের থেকে উল্লেখযোগ্যভাবে পৃথক হতে পারে।
থম আইভেস

0

আমরা StandardScalar()সারি ভিত্তিতে আবেদন করি ।

সুতরাং, একটি কলামে প্রতিটি সারির জন্য (আমি ধরে নিচ্ছি যে আপনি একটি পান্ডাস ডেটা ফ্রেমের সাথে কাজ করছেন):

x_new = (x_original - mean_of_distribution) / std_of_distribution

কয়েকটি পয়েন্ট -

  1. এটিকে স্ট্যান্ডার্ড স্কেলার বলা হয় কারণ আমরা এটিকে বিতরণের মানক বিচ্যুতি (বৈশিষ্ট্যের ভিন্নতা) দ্বারা বিভক্ত করছি। একইভাবে, আপনি অনুমান করতে পারেন MinMaxScalar()

  2. মূল বিতরণ প্রয়োগের পরে একই থাকে StandardScalar()। এটি একটি সাধারণ ভুল ধারণা যে বিতরণটি একটি সাধারণ বিতরণে পরিবর্তিত হয়। আমরা কেবলমাত্র [0, 1] এ ব্যাপ্তিটি স্কোয়াশ করছি।

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