نرمالسازی[1] یا استانداردسازی[2]، یکی از راهها برای مقایسه پذیر کردن دادهها است. در این پست، به نرمالسازی دادهها با ارائه مثال پرداخته میشود و سپس فرمولهای محاسبه نرمالسازی معرفی خواهد شد.
یکی از راههای مقایسه پذیری برای اندازهگیری و مقایسه دو داده متفاوت، نرمالسازی است. نرمالسازی دادهها از گامهای اولیه برای استفاده از داده است. فرض کنید دو گروه داده داریم که گروه اول در مقیاس صفرتا هزار و گروه دوم در مقیاس صفرتا یک قرارگرفتهاند.
اگر بخواهیم این دو گروه را باهم مقایسه کنیم این دو گروه داده باهم فاصله زیادی دارند و اختلاف این دو گروه داده بسیار زیاد است.
گروه اول داده ممکن است دربردارنده 900 ویژگی باشد و گروه دوم شامل اعداد در دامنه صفرتا یک باشند. اگر یک داده را بهصورت تصادفی در گروه اول انتخاب کنیم و این داده انتخابی برابر با 900 باشد و آن را تقسیمبر دو کنیم برابر با 450 میشود، درحالیکه داده انتخابی در گروه دوم برابر با صفر است و اگر تقسیم هم شود بازهم برابر با صفر است.
بنابراین، مقایسه این دو گروه داده اصلاً امکانپذیر نیست.
راهحل: استانداردسازی داده
برای حل این مشکل باید این دو گروه داده را استانداردسازی کنید؛ یعنی اینکه این دو گروه را در دودسته صفرتا یک قرار دهید.
کاهش یا افزایش مقادیر، با رعایت همهی نسبتها، آنها رابین صفرتا یک قرار میدهد. بهاینترتیب گروه اول به 0.9 و گروه دوم 0.5 تبدیل خواهد شد. در این حالت داده انتخابی در گروه اول را به دو تقسیم کنیم برابر با 0.45 و گروه دوم برابر با 0.25 خواهد شد. بهاینترتیب مقایسه بین دو گروه داده امکانپذیر خواهد شد.
فرمول نرمالسازی دادهها
فرمول نرمالسازی با استفاده از کم کردن عدد از میانگین و تقسیم آن بر انحراف از معیار به دست میآید. این فرمول به شکل زیر است:
این فرمول دادههای شمارا طوری تبدیل میکند که میانگین آن برابر با صفر و واریانس آن برابر با یک باشد. به این مقادیر z-scores میگویند. با نرمالسازی دادهها مطمئن خواهید شد که اگر دادههای شما خیلی بزرگ یا خیلی کوچک است در بازه عدد صفر و یک قرار خواهد گرفت. scores Z تضمین می کند که تأثیر یک متغیر بر مدل تحت تأثیر مقیاس اصلی اندازه گیری آن قرار نمی گیرد.
اگر ترجیح میدهید که اعداد بین صفر و یک توزیع شوند و در دامنه [0,1] قرار بگیرند، از فرمول زیر استفاده کنید:
نرمالسازی داده در علوم داده و بخصوص در الگوریتم K-means متداول است. به دلیل اینکه ممکن است داده ما دارای مقادیر بسیار متفاوتی باشد. برای مثال در یک دیتاست، یک ویژگی مربوط به سن افراد و ویژگی دیگر مربوط به خوردن تعداد لیوانهای آب هر فرد در یک روز باشد. زمانی که میخواهیم از این دادهها استفاده کنیم ، ممکن است هر تغییری در سن منجر به تغییر در تعداد لیوانهای آب شود و بنابراین نرمالسازی دادهها با استفاده از الگوریتم نرمالسازی ، آنها را به مقیاس یکپارچهای تبدیل میکند. به این ترتیب، تبدیل هر دو گروه داده به صفر و یک امکان محاسبه آسانی رابین دو مجموعه از گروه دادهها فراهم میکند.
کاربرد نرمالسازی داده در علوم کامپیوتر
نرمالسازی داده با استفاده از دو فرمول گفتهشده در حوزههای موضوعی علوم داده و کامپیوتر کاربردهای بسیاری دارد. فهرستی از مواردی که در آن نرمالسازی داده کاربرد دارد شامل موارد زیر است:
- همسایه نزدیکی k با استفاده از فاصله اقلیدسی اگر میخواهند همه ویژگیها به یک اندازه مشارکت داشته باشند.
- k-means به نزدیکترین همسایه k مراجعه کنید.
- رگرسیون لجستیک، SVMs، پرسپترون، شبکه عصبی و غیره. اگر از الگوریتم حریصانه یا برخی از وزن ها برای بهینه سازی استفاده می کنید.
- آنالیز افتراقی خطی، تحلیل مؤلفههای اصلی و در تمامی تحلیل هایی که شما می خواهید حداکثر واریانس را محاسبه کنید.
نمونه ای از نرمال سازی داده در پایتون
my_data = np.array([55, 67, 28, 235, 114])
x_axis = np.arange(len(my_data))
my_mean = my_data.mean()
my_stdev = my_data.std()
# normalisation: the data will now have
# a mean of 0 and a standard deviation of 1
my_data_normed = (my_data - my_mean) / my_data.std()
# domain standardisation: the data points will all lie
# between 0 (smallest one) and 1 (largest one)
my_data_domain_standardised = (my_data - my_data.min()) / (my_data.max() - my_data.min())
# Have a look at the y axis for each figure!
fig, (ax1, ax2, ax3) = plt.subplots(1,3, figsize=(10,5))
ax1.plot(x_axis,my_data)
ax1.set_title('Original')
ax2.plot(x_axis,my_data_normed)
ax2.set_title('Normalised \n(mean = 0, stddev = 1)')
ax3.plot(x_axis,my_data_domain_standardised)
ax3.set_title('Domain standardised \n(data points between 0 and 1)')
plt.show()
برای دریافت کد نرمال سازی داده در پایتون کلیک کنید.