๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
study๐Ÿ“š/๋จธ์‹ ๋Ÿฌ๋‹

[๋จธ์‹ ๋Ÿฌ๋‹] ์‚ฌ์ดํ‚ท๋Ÿฐ(scikit-learn) - ๋ฐ์ดํ„ฐ_์ „์ฒ˜๋ฆฌ(๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ, ํ”ผ์ฒ˜์Šค์ผ€์ผ๋ง๊ณผ ์ •๊ทœํ™”)

by ์Šค๋‹ 2022. 9. 4.

๋ฐ์ดํ„ฐ_์ „์ฒ˜๋ฆฌ(๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ, ํ”ผ์ฒ˜์Šค์ผ€์ผ๋ง๊ณผ ์ •๊ทœํ™”)

๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(Data Preprocessing)

  • ๋ฐ์ดํ„ฐ ํด๋ฆฐ์ง•
  • ๊ฒฐ์†๊ฐ’ ์ฒ˜๋ฆฌ(Null/NaN ์ฒ˜๋ฆฌ)
  • ๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ(๋ ˆ์ด๋ธ”, ์›-ํ•ซ ์ธ์ฝ”๋”ฉ)
  • ๋ฐ์ดํ„ฐ ์Šค์ผ€์ผ๋ง
  • ์ด์ƒ์น˜ ์ œ๊ฑฐ
  • Feature ์„ ํƒ, ์ถ”์ถœ ๋ฐ ๊ฐ€๊ณต

๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ๋Š” ML ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒํผ ์ค‘์š”ํ•˜๋‹ค
๋จผ์ €, ๊ฒฐ์† ๊ฐ’, ์ฆ‰ Null,NaN ๊ฐ’์€ ํ—ˆ์šฉ๋˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฌํ•œ Null๊ฐ’์€ ๊ณ ์ •๋œ ๋‹ค๋ฅธ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค.
์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•œ๋ฐ, ํ”ผ์ฒ˜ ๊ฐ’ ์ค‘ Null๊ฐ’์ด ์–ผ๋งˆ ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ์—๋Š” ํ”ผ์ฒ˜์˜ ํ‰๊ท ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๊ณ , Null ๊ฐ’์ด ๋Œ€๋ถ€๋ถ„์ด๋ผ๋ฉด ์˜คํžˆ๋ ค ํ•ด๋‹น ํ”ผ์ฒ˜๋Š” ๋“œ๋กญํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ํ•˜์ง€๋งŒ Null๊ฐ’์ด ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ์ผ ๊ฒฝ์šฐ ๊ฐ€์žฅ ๊ฒฐ์ •์ด ํž˜๋“ ๋ฐ, ํ•ด๋‹น ํ”ผ์ฒ˜๊ฐ€ ์ค‘์š”๋„๊ฐ€ ๋†’์€ ํ”ผ์ฒ˜์ด๊ณ  Null์„ ๋‹จ์ˆœํžˆ ํ”ผ์ฒ˜์˜ ํ‰๊ท ๊ฐ’์œผ๋กœ ๋Œ€์ฒดํ•  ๊ฒฝ์šฐ ์˜ˆ์ธก ์™œ๊ณก์ด ์‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์—…๋ฌด ๋กœ์ง๋“ฑ์„ ์ƒ์„ธํžˆ ๊ฒ€ํ† ํ•ด ๋” ์ •๋ฐ€ํ•œ ๋Œ€์ฒด ๊ฐ’์„ ์„ ์ •ํ•ด์•ผ ํ•œ๋‹ค.

์‚ฌ์ดํ‚ท๋Ÿฐ์˜ ๋จธ์‹ ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌธ์ž์—ด ๊ฐ’์„ ์ž…๋ ฅ ๊ฐ’์œผ๋กœ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ๋ชจ๋“  ๋ฌธ์ž์—ด ๊ฐ’์€ ์ธ์ฝ”๋”ฉ ๋ผ์„œ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€ํ™”ํ•ด์•ผ ํ•œ๋‹ค. ๋ฌธ์ž์—ด ํ”ผ์ฒ˜๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์นดํ…Œ๊ณ ๋ฆฌํ˜• ํ”ผํ„ฐ์™€ ํ…์ŠคํŠธํ˜• ํ”ผ์ฒ˜๋ฅผ ์˜๋ฏธํ•˜๋Š”๋ฐ, ํ…์ŠคํŠธํ˜• ํ”ผ์ฒ˜๋Š” ํ”ผ์ฒ˜ ๋ฒกํ„ฐํ™”(feature vectorization)๋“ฑ์˜ ๊ธฐ๋ฒ•์œผ๋กœ ๋ฒกํ„ฐํ™”ํ•˜๊ฑฐ๋‚˜ ๋ถˆํ•„์š”ํ•œ ํ”ผ์ฒ˜๋ผ๊ณ  ํŒ๋‹จ๋˜๋ฉด ์‚ญ์ œํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ

๋จธ์‹ ๋Ÿฌ๋‹ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ ์†์„ฑ์„ ์ž…๋ ฅ ๋ฐ›์ง€ ์•Š์œผ๋ฉฐ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋Š” ์ˆซ์žํ˜•์œผ๋กœ ํ‘œํ˜„๋˜์–ด์•ผ ํ•œ๋‹ค.
๋ฌธ์žํ˜• ์นดํ…Œ๊ณ ๋ฆฌํ˜• ์†์„ฑ์€ ๋ชจ๋‘ ์ˆซ์ž๊ฐ’์œผ๋กœ ๋ณ€ํ™˜/์ธ์ฝ”๋”ฉ ๋˜์–ด์•ผ ํ•œ๋‹ค.

  • ๋ ˆ์ด๋ธ”(Label) ์ธ์ฝ”๋”ฉ
  • ์›-ํ•ซ(One-Hot) ์ธ์ฝ”๋”ฉ

1. ๋ ˆ์ด๋ธ”(Label) ์ธ์ฝ”๋”ฉ

์นดํ…Œ๊ณ ๋ฆฌ ํ”ผ์ฒ˜๋ฅผ ์ฝ”๋“œํ˜• ์ˆซ์ž ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ.

[TV, ๋ƒ‰์žฅ๊ณ , ์ „์ž๋ ˆ์ธ์ง€, ์ปดํ“จํ„ฐ, ์„ ํ’๊ธฐ, ๋ฏน์„œ] -> [0, 1, 4, 5, 3, 2]

from sklearn.preprocessing import LabelEncoder

items = ['TV','๋ƒ‰์žฅ๊ณ ','์ „์ž๋ Œ์ง€','์ปดํ“จํ„ฐ','์„ ํ’๊ธฐ','์„ ํ’๊ธฐ','๋ฏน์„œ','๋ฏน์„œ']

# LabelEncoder ํด๋ž˜์Šค๋ฅผ encoder ๊ฐ์ฒด๋กœ ์ƒ์„ฑํ•œ ํ›„
encoder = LabelEncoder()

# fit์€ transform ์ˆ˜ํ–‰ ์ „ ํ‹€์„ ๋งž์ถฐ์ฃผ๋Š” ์—ญํ• 
encoder.fit(items)

# encoder.transform( ) ์œผ๋กœ label ์ธ์ฝ”๋”ฉ ์ˆ˜ํ–‰. 
labels = encoder.transform(items)
print('์ธ์ฝ”๋”ฉ ๋ณ€ํ™˜๊ฐ’:', labels)

print('์ธ์ฝ”๋”ฉ ํด๋ž˜์Šค:', encoder.classes_)

print('๋””์ฝ”๋”ฉ ์›๋ณธ ๊ฐ’:', encoder.inverse_transform([0, 1, 4, 5, 3, 3, 2, 2]))

๋ฐ์ดํ„ฐ๊ฐ€ ์ปค ๋ฌธ์ž์—ด ๊ฐ’์ด ์–ด๋–ค ์ˆซ์ž ๊ฐ’์œผ๋กœ ์ธ์ฝ”๋”ฉ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ, LabelEncoder ๊ฐ์ฒด์˜ calsses_์†์„ฑ๊ฐ’์„ ํ™•์ธํ•˜๋ฉด ๋œ๋‹ค. classes_ ์†์„ฑ์€ 0๋ฒˆ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ๋ณ€ํ™˜๋œ ์ธ์ฝ”๋”ฉ ๊ฐ’์— ๋Œ€ํ•œ ์›๋ณธ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

๋ ˆ์ด๋ธ” ์ธ์ฝ”๋”ฉ์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ฌธ์ž์—ด ๊ฐ’์„ ์ˆซ์žํ˜• ์นดํ…Œ๊ณ ๋ฆฌ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜์ง€๋งŒ, ๋ช‡๋ช‡ ML ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์ด๋ฅผ ์ ์šฉํ•  ๊ฒฝ์šฐ ์˜ˆ์ธก ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๋‹ค. ์ด๋Š” ์ˆซ์ž ๊ฐ’์˜ ๊ฒฝ์šฐ ํฌ๊ณ  ์ž‘์Œ์— ๋Œ€ํ•œ ํŠน์„ฑ์ด ์ž‘์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ์„ ํ˜• ํšŒ๊ท€์™€ ๊ฐ™์€ ML ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ๋ ˆ์ด๋ธ” ์ธ์ฝ”๋”ฉ์„ ์ ์šฉํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค. ํŠธ๋ฆฌ ๊ณ„์—ด์˜ ML ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์ˆซ์ž์˜ ์ด๋Ÿฌํ•œ ํŠน์„ฑ์„ ๋ฐ˜์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค.

2. ์›-ํ•ซ(One-Hot) ์ธ์ฝ”๋”ฉ

์›-ํ•ซ ์ธ์ฝ”๋”ฉ์€ ํ”ผ์ฒ˜ ๊ฐ’์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ์ƒˆ๋กœ์šด ํ”ผ์ฒ˜๋ฅผ ์ถ”๊ฐ€ํ•ด ๊ณ ์œ  ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์ปฌ๋Ÿผ์—๋งŒ 1์„ ํ‘œ์‹œํ•˜๊ณ  ๋‚˜๋จธ์ง€ ์ปฌ๋Ÿผ์—๋Š” 0์„ ํ‘œ์‹œํ•˜๋Š” ๋ฐฉ์‹. ์•ž์„œ ์„ค๋ช…ํ•œ ๋ ˆ์ด๋ธ” ์ธ์ฝ”๋”ฉ์˜ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹

1) sklearn์—์„œ์˜ ์›ํ•ซ ์ธ์ฝ”๋”ฉ

์ฒซ๋ฒˆ์งธ, ์ˆซ์ž๊ฐ’์œผ๋กœ ๋ณ€ํ™˜์„ ์œ„ํ•ด LabelEncoder๋กœ ๋ณ€ํ™˜
๋‘๋ฒˆ์งธ, 2์ฐจ์› ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜(reshape ํ™œ์šฉ)
์„ธ๋ฒˆ์งธ, ์›-ํ•ซ ์ธ์ฝ”๋”ฉ์„ ์ ์šฉ

from sklearn.preprocessing import OneHotEncoder
import numpy as np

items=['TV','๋ƒ‰์žฅ๊ณ ','์ „์ž๋ Œ์ง€','์ปดํ“จํ„ฐ','์„ ํ’๊ธฐ','์„ ํ’๊ธฐ','๋ฏน์„œ','๋ฏน์„œ']

# ์ฒซ๋ฒˆ์งธ, ๋จผ์ € ์ˆซ์ž๊ฐ’์œผ๋กœ ๋ณ€ํ™˜์„ ์œ„ํ•ด LabelEncoder๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 
encoder = LabelEncoder()
encoder.fit(items)
labels = encoder.transform(items)
labels

# ๋‘๋ฒˆ์งธ, 2์ฐจ์› ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 
labels = labels.reshape(-1, 1)
labels

# ๋งˆ์ง€๋ง‰์œผ๋กœ ์›-ํ•ซ ์ธ์ฝ”๋”ฉ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
oh_encoder = OneHotEncoder()
oh_encoder.fit(labels)
oh_labels = oh_encoder.transform(labels)

print('์›-ํ•ซ ์ธ์ฝ”๋”ฉ ๋ฐ์ดํ„ฐ')
print(oh_labels.shape)
oh_labels.toarray()

2) ํŒ๋‹ค์Šค์˜ ์›ํ•ซ ์ธ์ฝ”๋”ฉ

ํŒ๋‹ค์Šค์˜ get_dummies ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•˜๋ฉด ์‰ฝ๊ฒŒ ์›ํ•ซ ์ธ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
์‚ฌ์ดํ‚ท๋Ÿฐ์˜ One-Hot ์ธ์ฝ”๋”ฉ๊ณผ ๋‹ค๋ฅด๊ฒŒ ๋ฌน์—ด ์นดํ…Œ๊ณ ๋ฆฌ ๊ฐ’์„ ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•  ํ•„์š”๊ฐ€ ์—†์ด ๋ฐ”๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

import pandas as pd

df = pd.DataFrame({'item':['TV','๋ƒ‰์žฅ๊ณ ','์ „์ž๋ Œ์ง€','์ปดํ“จํ„ฐ','์„ ํ’๊ธฐ','์„ ํ’๊ธฐ','๋ฏน์„œ','๋ฏน์„œ'] })
df

pd.get_dummies(df) # pd.get_dummies ์ฒ˜๋ฆฌ : ๊ฒฐ์ธก๊ฐ’์„ ์ œ์™ธํ•˜๊ณ  0๊ณผ 1๋กœ ๊ตฌ์„ฑ๋œ ๋”๋ฏธ๊ฐ’์ด ๋งŒ๋“ค์–ด์ง„๋‹ค

ํ”ผ์ฒ˜ ์Šค์ผ€์ผ๋ง(feature scailing)

์„œ๋กœ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์˜ ๊ฐ’ ๋ฒ”์œ„๋ฅผ ์ผ์ •ํ•œ ์ˆ˜์ค€์œผ๋กœ ๋งž์ถ”๋Š” ์ž‘์—…. ๋Œ€ํ‘œ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ๋Š” ํ‘œ์ค€ํ™”(Standardization)์™€ ์ •๊ทœํ™”(Normalization)์ด ์žˆ๋‹ค.

  • ํ‘œ์ค€ํ™”๋Š” ๋ฐ์ดํ„ฐ์˜ ํ”ผ์ฒ˜ ๊ฐ๊ฐ์ด ํ‰๊ท ์ด 0์ด๊ณ  ๋ถ„์‚ฐ์ด 1์ธ ๊ฐ€์šฐ์‹œ์•ˆ ์ •๊ทœ ๋ถ„ํฌ๋ฅผ ๊ฐ€์ง„ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ. ํ‘œ์ค€ํ™”์˜ ๊ฐ’์€ ์›๋ž˜ ๊ฐ’์—์„œ ํ”ผ์ฒ˜ x์˜ ํ‰๊ท ์„ ๋บ€ ๊ฐ’์„ x์˜ ํ‘œ์ค€ํŽธ์ฐจ๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ์ •๊ทœํ™”๋Š” ์„œ๋กœ ๋‹ค๋ฅธ ํ”ผ์ฒ˜์˜ ํฌ๊ธฐ๋ฅผ ํ†ต์ผํ•˜๊ธฐ ์œ„ํ•ด ํฌ๊ธฐ๋ฅผ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” ๊ฐœ๋…. ์ด๋Š” ๋ณ€์ˆ˜๋“ค์„ ๋ชจ๋‘ ์ตœ์†Œ 0~ ์ตœ๋Œ€ 1์˜ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ, ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๋ชจ๋‘ ๋˜‘๊ฐ™์€ ๋‹จ์œ„๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ. ์ด ๊ฐ’์€ ์›๋ž˜ ๊ฐ’์—์„œ ํ”ผ์ฒ˜ x์˜ ์ตœ์†Ÿ๊ฐ’์„ ๋บ€ ๊ฐ’์„ ํ”ผ์ฒ˜ x์˜ ์ตœ๋Œ“๊ฐ’๊ณผ ์ตœ์†Ÿ๊ฐ’์˜ ์ฐจ์ด๋กœ ๋‚˜๋ˆˆ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‚ฌ์ดํ‚ท๋Ÿฐ์˜ ์ „์ฒ˜๋ฆฌ์—์„œ ์ œ๊ณต๋˜๋Š” Normalizer ๋ชจ๋“ˆ๊ณผ ์ผ๋ฐ˜์ ์ธ ์ •๊ทœํ™”๋Š” ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค. ์‚ฌ์ดํ‚ท๋Ÿฐ์˜ Normalizer ๋ชจ๋“ˆ์€ ์„ ํ˜•๋Œ€์ˆ˜์—์„œ์˜ ์ •๊ทœํ™” ๊ฐœ๋…์ด ์ ์šฉ๋˜์—ˆ์œผ๋ฉฐ, ๊ฐœ๋ณ„ ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ๋ณ€ํ™˜ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ. ์ฆ‰, ๊ฐœ๋ณ„ ๋ฒกํ„ฐ๋ฅผ ๋ชจ๋“  ํ”ผ์ฒ˜ ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๋กœ ๋‚˜๋ˆ ์ค€๋‹ค.

์‚ฌ์ดํ‚ท๋Ÿฐ ํ”ผ์ฒ˜ ์Šค์ผ€์ผ๋ง ์ง€์›

1) StandardScaler

ํ‘œ์ค€ํ™”๋ฅผ ์‰ฝ๊ฒŒ ์ง€์›ํ•˜๊ธฐ ์œ„ํ•œ ํด๋ž˜์Šค ์ฆ‰, ๊ฐœ๋ณ„ ํ”ผ์ฒ˜๋ฅผ ํ‰๊ท ์ด 0์ด๊ณ , ๋ถ„์‚ฐ์ด 1์ธ ์ •๊ทœ ๋ถ„ํฌ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜
์‚ฌ์ด์ผ“๋Ÿฐ์—์„œ ๊ตฌํ˜„ํ•œ RBF ์ปค๋„์„ ์ด์šฉํ•˜๋Š” ์„œํฌํŠธ ๋ฒกํ„ฐ ๋จธ์‹ (Support Vector Machine)์ด๋‚˜ ์„ ํ˜• ํšŒ๊ท€(Linear Regression), ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€(Logistic Regression)๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์šฐ์‹œ์•ˆ ๋ถ„ํฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ๊ตฌํ˜„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ „์— ํ‘œ์ค€ํ™”๋ฅผ ์ ์šฉํ•˜๋Š” ๊ฒƒ์€ ์˜ˆ์ธก ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ์ค‘์š”ํ•œ ์š”์†Œ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค.

from sklearn.datasets import load_iris
import pandas as pd
# ๋ถ“๊ฝƒ ๋ฐ์ดํ„ฐ ์…‹์„ ๋กœ๋”ฉํ•˜๊ณ  DataFrame์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. 
iris = load_iris()
iris_data = iris.data
iris.feature_names

iris_df = pd.DataFrame(data=iris_data, columns=iris.feature_names)

print('feature ๋“ค์˜ ํ‰๊ท  ๊ฐ’')
print(iris_df.mean(), '\n')

print('feature ๋“ค์˜ ๋ถ„์‚ฐ ๊ฐ’')
print(iris_df.var())

from sklearn.preprocessing import StandardScaler

# StandardScaler๊ฐ์ฒด ์ƒ์„ฑ
scaler = StandardScaler()

# StandardScaler ๋กœ ๋ฐ์ดํ„ฐ ์…‹ ๋ณ€ํ™˜. fit( ) ๊ณผ transform( ) ํ˜ธ์ถœ.  
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)
iris_scaled

# transform( )์‹œ scale ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ ์…‹์ด numpy ndarry๋กœ ๋ฐ˜ํ™˜๋˜์–ด ์ด๋ฅผ DataFrame์œผ๋กœ ๋ณ€ํ™˜
iris_df_scaled = pd.DataFrame(data=iris_scaled, columns=iris.feature_names)

print('feature ๋“ค์˜ ํ‰๊ท  ๊ฐ’')
print(iris_df_scaled.mean(), '\n')

print('feature ๋“ค์˜ ๋ถ„์‚ฐ ๊ฐ’')
print(iris_df_scaled.var())

-> ๋ชจ๋“  ์ปฌ๋Ÿผ ๊ฐ’์˜ ํ‰๊ท ์€ 0์— ์•„์ฃผ ๊ฐ€๊นŒ์šด ๊ฐ’์œผ๋กœ, ๋ถ„์‚ฐ์€ 1์— ๊ฐ€๊นŒ์šด ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋˜์—ˆ๋‹ค.

2) MinMaxScaler

๋ฐ์ดํ„ฐ ๊ฐ’์„ 0๊ณผ 1 ์‚ฌ์ด์˜ ๋ฒ”์œ„ ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜(์Œ์ˆ˜ ๊ฐ’์ด ์žˆ์œผ๋ฉด -1์—์„œ 1 ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜)

from sklearn.preprocessing import MinMaxScaler

# MinMaxScaler๊ฐ์ฒด ์ƒ์„ฑ
scaler = MinMaxScaler()

# MinMaxScaler ๋กœ ๋ฐ์ดํ„ฐ ์…‹ ๋ณ€ํ™˜. fit() ๊ณผ transform() ํ˜ธ์ถœ.  
scaler.fit(iris_df)
iris_scaled = scaler.transform(iris_df)
# transform()์‹œ scale ๋ณ€ํ™˜๋œ ๋ฐ์ดํ„ฐ ์…‹์ด numpy ndarry๋กœ ๋ฐ˜ํ™˜๋˜์–ด ์ด๋ฅผ DataFrame์œผ๋กœ ๋ณ€ํ™˜
iris_df_scaled = pd.DataFrame(data=iris_scaled, columns=iris.feature_names)

print('feature๋“ค์˜ ์ตœ์†Œ ๊ฐ’')
print(iris_df_scaled.min(), '\n')

print('feature๋“ค์˜ ์ตœ๋Œ€ ๊ฐ’')
print(iris_df_scaled.max())

-> ๋ชจ๋“  ํ”ผ์ฒ˜์˜ ๊ฐ’์ด 0~1 ์‚ฌ์ด๋กœ ๋ณ€ํ™˜๋˜์—ˆ๋‹ค.

๋Œ“๊ธ€