আমি বুঝতে পারছি না পৃষ্ঠা এর StandardScaler
ডকুমেন্টেশন মধ্যে sklearn
।
কেউ কি আমাকে সহজ কথায় এটি ব্যাখ্যা করতে পারেন?
আমি বুঝতে পারছি না পৃষ্ঠা এর StandardScaler
ডকুমেন্টেশন মধ্যে sklearn
।
কেউ কি আমাকে সহজ কথায় এটি ব্যাখ্যা করতে পারেন?
উত্তর:
পিছনে ধারণাটি StandardScaler
হ'ল এটি আপনার ডেটাগুলিকে রূপান্তরিত করবে যে এর বিতরণটির একটি গড় মূল্য 0 এবং স্ট্যান্ডার্ড বিচ্যুতি থাকবে 1
মাল্টিভারিয়েট ডেটার ক্ষেত্রে এটি বৈশিষ্ট্য অনুসারে সম্পন্ন করা হবে (ডেটার প্রতিটি কলামের জন্য স্বাধীনভাবে অন্য কথায়) ।
ডেটা বিতরণ দেওয়া, ডেটাসেটের প্রতিটি মানের গড় মূল্য বিয়োগ করা হবে এবং তারপরে পুরো ডেটাসেটের মানক বিচ্যুতি দ্বারা বিভক্ত (বা মাল্টিভারিয়েট ক্ষেত্রে বৈশিষ্ট্য)।
ভূমিকা: আমি ধরে নিয়েছি যে আপনার একটি ম্যাট্রিক্স রয়েছে 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]
। বিন্যাসের জন্য দুঃখিত
StandardScaler
মেশিন লার্নিংকে অ্যালগরিদমকে আরও দ্রুততর করে তোলে, বা আরও সঠিক সিদ্ধান্ত নিতে বা অন্য কিছু করতে সহায়তা করে?
কীভাবে এটি গণনা করতে হবে:
আপনি এখানে আরও পড়তে পারেন:
StandardScaler কাজটি সম্পাদন করে প্রমিতকরণ । সাধারণত কোনও ডেটাসেটে ভেরিয়েবল থাকে যা স্কেল ভিন্ন। একটি কর্মচারী ডেটা সেটটি যেমন মান বয়স কলাম ধারণ করবে স্কেল 20-70 উপর মান এবং বেতন কলাম স্কেল 10000-80000 উপর ।
এই দুটি কলাম স্কেল পৃথক পৃথক, মেশিন লার্নিং মডেল তৈরি করার সময় এগুলি সাধারণ স্কেল হিসাবে প্রমিত হয় Standard
আপনি যখন বিভিন্ন ইউনিটের সাথে সম্পর্কিত ডেটা তুলনা করতে চান এটি দরকারী is সেক্ষেত্রে আপনি ইউনিটগুলি সরাতে চান। সমস্ত ডেটার একটি সামঞ্জস্যপূর্ণ উপায়ে এটি করতে, আপনি ডেটাটি এমনভাবে রূপান্তরিত করেন যে বৈকল্পিক একক এবং সিরিজের গড় 0 হয়।
স্ট্যান্ডার্ডাইজেশন গণনা কীভাবে কাজ করে তা ব্যাখ্যা করার জন্য নীচে একটি সাধারণ কাজের উদাহরণ। তত্ত্বের অংশটি ইতিমধ্যে অন্যান্য উত্তরে ব্যাখ্যা করা হয়েছে।
>>>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 এর খুব কাছে।
তথ্যসূত্র
উপরের উত্তরগুলি দুর্দান্ত, তবে অতীতে আমার কিছু উদ্বেগ দূর করার জন্য আমার একটি সাধারণ উদাহরণের প্রয়োজন হয়েছিল। আমি নিশ্চিত করতে চেয়েছিলাম যে এটি প্রতিটি কলামকে পৃথকভাবে চিকিত্সা করছে। আমি এখন আশ্বাস পেয়েছি এবং কী উদাহরণ আমার উদ্বেগের কারণ হয়েছিল তা খুঁজে পাচ্ছি না। সমস্ত কলামগুলি উপরেরগুলি দ্বারা বর্ণিত হিসাবে আলাদাভাবে স্কেল করা আছে।
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
প্রয়োগের পরে StandardScaler()
, এক্সে প্রতিটি কলামের গড় 0 এবং স্ট্যান্ডার্ড বিচ্যুতি 1 হবে।
সূত্রগুলি এই পৃষ্ঠায় অন্যদের দ্বারা তালিকাভুক্ত করা হয়েছে।
যুক্তি: কিছু অ্যালগরিদমের মতো দেখতে ডেটা প্রয়োজন ( স্ক্লেরন ডক্স দেখুন )।
আমরা StandardScalar()
সারি ভিত্তিতে আবেদন করি ।
সুতরাং, একটি কলামে প্রতিটি সারির জন্য (আমি ধরে নিচ্ছি যে আপনি একটি পান্ডাস ডেটা ফ্রেমের সাথে কাজ করছেন):
x_new = (x_original - mean_of_distribution) / std_of_distribution
কয়েকটি পয়েন্ট -
এটিকে স্ট্যান্ডার্ড স্কেলার বলা হয় কারণ আমরা এটিকে বিতরণের মানক বিচ্যুতি (বৈশিষ্ট্যের ভিন্নতা) দ্বারা বিভক্ত করছি। একইভাবে, আপনি অনুমান করতে পারেন MinMaxScalar()
।
মূল বিতরণ প্রয়োগের পরে একই থাকে StandardScalar()
। এটি একটি সাধারণ ভুল ধারণা যে বিতরণটি একটি সাধারণ বিতরণে পরিবর্তিত হয়। আমরা কেবলমাত্র [0, 1] এ ব্যাপ্তিটি স্কোয়াশ করছি।
each value in the dataset will have the sample mean value subtracted
- এটা সত্য নয়। প্রতিটি বৈশিষ্ট্য / কলামের গড় নির্দিষ্ট কলামের মানগুলি থেকে বিয়োগ করা হবে। এটি কলাম অনুসারে সম্পন্ন হয়। নেইsample mean value subtracted
- নীচে আমার উত্তর দেখুন