๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Projects/๐Ÿช Convenience Store Location Analysis

[ํ”„๋กœ์ ํŠธ ์Šคํ„ฐ๋””] Feature Scaling (Min-Max scaling)

by ISLA! 2023. 9. 14.

 

๐Ÿ‘‰ ์ด ํฌ์ŠคํŒ…์—์„œ๋Š”..

ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ, ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋กœ ํ”ผ์ฒ˜๋ฅผ ์ƒ์„ฑํ•˜๋‹ค๋ณด๋‹ˆ, ์„œ๋กœ ๋‹ค๋ฅธ ๋ฒ”์œ„์™€ ์ฒ™๋„๋ฅผ ๊ฐ€์กŒ๋‹ค๋Š” ๋ถ€๋ถ„์ด ๊ฑฑ์ •์ด ๋˜์—ˆ๋‹ค.
์ด์™€ ๊ด€๋ จํ•˜์—ฌ ์Šค์ผ€์ผ๋ง์— ๋Œ€ํ•ด ์Šค์ผ€์ผ๋งํ•˜๊ณ , ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•  ๋ฐฉ์•ˆ์„ ๊ณ ๋ฏผํ•ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค
-
ํ•ด๋‹น ํฌ์ŠคํŒ…์—์„œ๋Š” ํ”ผ์ฒ˜ ์Šค์ผ€์ผ๋ง์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๊ณผ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋‹ค์–‘ํ•œ ์Šค์ผ€์ผ๋ง ๋ฒ•์„ ์ตํ˜€๋ณธ๋‹ค.
๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์‚ฌ์ดํ‚ท๋Ÿฐ์„ ์‚ฌ์šฉํ•œ๋‹ค.

 

๐Ÿง Feature Scaling์ด๋ž€?

  • ๊ฐ’๋“ค์„ ๋™์ผํ•œ ๋ฒ”์œ„์™€ ์ฒ™๋„๋‚ด์— ๋„ฃ๋Š” ๊ฒƒ์œผ๋กœ,
  • ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ์˜ํ•ด ์˜ํ–ฅ๋ ฅ์„ ๋ฐœํœ˜ํ•˜์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์„ ๋ง‰๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค

 

๐Ÿง Scaling์ด ์™œ ํ•„์š”ํ• ๊นŒ?

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ ์…‹์€ ๊ฐ๊ฐ์˜ ๊ทœ๋ชจ(magnitude), ๋‹จ์œ„, ๋ฒ”์œ„๊ฐ€ ๋งค์šฐ ๋‹ค๋ฅผ ๊ฒƒ์ด๋‹ค
  • ๋Œ€๋ถ€๋ถ„์˜ ๋จธ์‹ ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋‘ ๋ฐ์ดํ„ฐ ๊ฐ„ ๊ฑฐ๋ฆฌ๋ฅผ ์ธก์ •์‹œ, ์œ ํด๋ฆฌ๋””์•ˆ ๊ฑฐ๋ฆฌ๋ฅผ ์“ฐ๋Š”๋ฐ ์ด๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ๋งŒ์•ฝ, ์Šค์ผ€์ผ๋ง์„ ํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ทœ๋ชจ๊ฐ€ ํฐ ํ”ผ์ฒ˜๋“ค์— ์ง‘์ค‘ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ํŠนํžˆ ๋‹จ์œ„๊ฐ€ ํฐ ์ฐจ์ด๊ฐ€ ๋‚˜๋Š” ๊ฒฝ์šฐ ๊ฒฐ๊ณผ๊ฐ€ ๋งค์šฐ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ๋‹ค. (์˜ˆ, 5kg๊ณผ 5000mg์˜ ์ฐจ์ด)
  • ๋”ฐ๋ผ์„œ, ๋ชจ๋“  ํ”ผ์ฒ˜๋ฅผ ๊ฐ™์€ ๋ ˆ๋ฒจ์˜ ์ฒ™๋„์— ๋‘์–ด์•ผ ํ•˜๋Š”๋ฐ ์ด๊ฒƒ์ด ์Šค์ผ€์ผ๋ง์ด๋‹ค.

๐Ÿ“ฆ Scaling์ด ์ค‘์š”ํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • k-์ตœ๊ทผ์ ‘ ์ด์›ƒ(k-nearest neighbors) : ์œ ํด๋ฆฌ๋””์•ˆ ๊ฑฐ๋ฆฌ ์ฒ™๋„๋ฅผ ์“ฐ๋Š” ํ•ด๋‹น ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ทœ๋ชจ๊ฐ€ ํฐ ๋ณ€์ˆ˜์— ๋งค์šฐ ์˜ˆ๋ฏผํ•˜๋‹ค, ๋”ฐ๋ผ์„œ ๋ชจ๋“  ํ”ผ์ฒ˜์˜ ์ค‘์š”๋„๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋งž์ถฐ ์ฃผ์–ด์•ผ ํ•œ๋‹ค
  • ์ฃผ์„ฑ๋ถ„ ๋ถ„์„(PCA) : PCA๋Š” ๊ฐ€์žฅ ํฐ ๋ถ„์‚ฐ์„ ๊ฐ–๋Š” ํ”ผ์ณ๋ฅผ ์ฐพ์œผ๋ คํ•˜๋Š”๋ฐ, ์ด ๋ถ„์‚ฐ์ด ๊ทœ๋ชจ๊ฐ€ ํฐ ์น˜๋Ÿฌ์—์„œ ํ›จ์”ฌ ํฌ๊ฒŒ ๋‚˜ํƒ€๋‚œ๋‹ค. ์ด๋Š” ์ฃผ์„ฑ๋ถ„์„์ด ํฐ ๊ทœ๋ชจ์˜ ํ”ผ์ณ๋“ค์— ํŽธํ–ฅ๋˜๊ฒŒ ๋งŒ๋“ ๋‹ค.
  • ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์˜ ์†๋„ : ์Šค์ผ€์ผ๋ง์„ ํ†ตํ•ด ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ•์˜ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ทœ๋ชจ(magnitude)๊ฐ€ ์ปค์ง€๋ฉด ๊ฒฝ์‚ฌํ•˜๊ฐ•์˜ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๋ฏ€๋กœ, ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๊ฐ€ ์ผ์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์†๋„ ์ธก๋ฉด์—์„œ ๋น„ํšจ์œจ์ ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“ฆ Scaling์ด ํ•„์ˆ˜๊ฐ€ ์•„๋‹Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ : ํŠธ๋ฆฌ ๋ชจ๋ธ๋“ค์€ ๊ฑฐ๋ฆฌ์— ๊ธฐ๋ฐ˜์„ ๋‘์ง€ ์•Š์•˜์œผ๋ฉฐ ๋‹ค์–‘ํ•œ ๋ฒ”์œ„(varying range)๋ฅผ ๊ฐ€์ง„ ํ”ผ์ฒ˜๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ธฐ์— ํŠธ๋ฆฌ ๋ชจ๋ธ ์‚ฌ์šฉ์‹œ์—๋Š” ์Šค์ผ€์ผ๋ง์ด ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค
  • ์„ ํ˜• ํŒ๋ณ„ ๋ถ„์„(LDA), ๋‚˜์ด๋ธŒ ๋ฒ ์ด์ฆˆ : ์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ด๋Ÿฌํ•œ ์Šค์ผ€์ผ๋ง ๊ด€๋ จ ๋ฌธ์ œ๋ฅผ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ๋””์ž์ธ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ”ผ์ฒ˜์— ์ค‘์š”๋„๋ฅผ ๊ณ„์‚ฐ์— ํฌํ•จํ•˜๊ธฐ์—, ์ด ๊ฒฝ์šฐ ์Šค์ผ€์ผ๋ง์ด ๊ทธ๋ ‡๊ฒŒ ํฐ ํšจ๊ณผ๊ฐ€ ์—†์„ ์ˆ˜ ์žˆ๋‹ค

 

๐Ÿ“ฆ (์ฐธ๊ณ ) ๊ฒฝ์‚ฌํ•˜๊ฐ•๊ณผ ์Šค์ผ€์ผ๋ง

์•„๋ž˜ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ์™ผ์ชฝ์€ ์Šค์ผ€์ผ๋ง์ด ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ, ์˜ค๋ฅธ์ชฝ์€ ์Šค์ผ€์ผ๋ง์œผ๋กœ ๋‘ ๋ณ€์ˆ˜์˜ ๋ฒ”์œ„๋ฅผ ๋งž์ถฐ์ค€ ๋ชจ์Šต์ด๋‹ค.

์™ผ์ชฝ์˜ ๊ฒฝ์šฐ ๊ฒฝ์‚ฌ ํ•˜๊ฐ•์ด ๋ณด๋‹ค ์•ˆ์ •์ ์œผ๋กœ(?) ์ด๋ฃจ์–ด์ง€๊ณ  ์žˆ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.


 

๐Ÿง SciKit-Learn libraries ํ™œ์šฉํ•œ Min-Max Scaling

๐Ÿ“ฆ ๋ฐ์ดํ„ฐ ํ™•์ธํ•˜๊ธฐ

  • Age ์ปฌ๋Ÿผ๊ณผ Estimated Salary ์ปฌ๋Ÿผ์˜ ์Šค์ผ€์ผ์ด ์„œ๋กœ ๋‹ค๋ฆ„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
  • ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ์Šค์ผ€์ผ๋ง์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๋‹ค.
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
dataset= pd.read_csv("C:\data/data.csv")
dataset[:5]

 

 

๐Ÿ“ฆ Min-Max scaling

์Šค์ผ€์ผ๋ง์—๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋Š”๋ฐ, ์ด๋ฒˆ ์‹œ๊ฐ„์—๋Š” Min-Max scaling์„ ์‚ดํŽด๋ณธ๋‹ค

 

  • min-max scaling์€ ์ •๊ทœํ™”์˜ ํ•œ ์œ ํ˜•์œผ๋กœ, ๋ฐ์ดํ„ฐ์˜ ๋ฒ”์œ„๋ฅผ 0๊ณผ 1 ์‚ฌ์ด์˜ ํŠน์ •ํ•œ ๊ฐ’์œผ๋กœ ์ถ•์†Œํ•˜๋Š” ๊ฒƒ์ด๋‹ค
  • ๋ณธ ๋ฐ์ดํ„ฐ์˜ ์ตœ์†Œ๊ฐ’์ด 0, ์ตœ๋Œ€๊ฐ’์ด 1๋กœ ์ง€์ •๋˜๊ณ  ๊ทธ ์‚ฌ์ด์˜ ๊ฐ’์ด ์ž๋™์œผ๋กœ ์ถ•์†Œ๋œ๋‹ค
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.preprocessing import minmax_scale

# ๋žœ๋คํ•œ ๊ฐ’์„ ๊ณ ์ •
np.random.seed(0)

# ์˜ค๋ฆฌ์ง€๋„ ๋ฐ์ดํ„ฐ๋ฅผ ๋žœ๋ค ๋ฐ์ดํ„ฐ 1000๊ฐœ๋กœ ๋งŒ๋“ฆ
original_data = np.random.exponential(size = 1000)

# 0~1 ์‚ฌ์ด๋กœ ์ตœ์†Œ์ตœ๋Œ€์ •๊ทœํ™” ์ง„ํ–‰
scaled_data = minmax_scale(original_data)

# ๋น„๊ต๋ฅผ ์œ„ํ•œ ์‹œ๊ฐํ™”
fig, ax=plt.subplots(1,2)

sns.distplot(original_data, ax=ax[0], color='y')
ax[0].set_title("Original Data")

sns.distplot(scaled_data, ax=ax[1])
ax[1].set_title("Scaled data")
plt.show()

๐Ÿ’œ X ์ถ• ๊ฐ’์˜ ๋ณ€ํ™”๋ฅผ ํ™•์ธํ•˜์„ธ์š”!

 

 

 

 

 

์ฐธ๊ณ  ์ž๋ฃŒ

https://rahul-saini.medium.com/feature-scaling-why-it-is-required-8a93df1af310

728x90