๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๊ต์œก/์ŠคํŒŒ๋ฅดํƒ€

[TIL] ๋‚ด์ผ๋ฐฐ์›€์บ ํ”„ AI 9๊ธฐ - 13ํšŒ

by gomdeng 2024. 12. 16.

๐Ÿถ ํ•™์Šต ๋ฒ”์œ„

  • ๋จธ์‹ ๋Ÿฌ๋‹ ๊ฐœ์ธ๊ณต๋ถ€
  • ๋จธ์‹ ๋Ÿฌ๋‹ ํŠน๊ฐ•

 

๐Ÿถ ๊ณต๋ถ€ ๋‚ด์šฉ

โœจ ๋จธ์‹ ๋Ÿฌ๋‹

๐Ÿšฉ ๊ฐœ๋…
 > ์Šค์ผ€์ผ(Scale)์ด ๋‹ค๋ฅด๋‹ค? 
  - ํŠน์„ฑ ๊ฐ„์˜ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ๋‹ค๋ฅธ ๊ฒฝ์šฐ ex) ๊ธธ์ด๋Š” 10~40, ๋†’์ด๋Š” 100~1000
  - ์ด๋Ÿฐ ๊ฒฝ์šฐ, ๊ทผ์ ‘ ๋ฐ์ดํ„ฐ ํŒŒ์•… ๋“ฑ์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
  - ์ •๊ทœํ™” (๋ฒ”์œ„ ๊ฐ’์„ ๋™์ผํ•˜๊ฒŒ ๋งž์ถฐ์ฃผ๋Š” ์ž‘์—…)์ด ํ•„์š”ํ•จ

 > ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ธฐ์ค€์ด ๋‹ค๋ฅด๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์˜ˆ์ธกํ•  ์ˆ˜ ์—†์Œ
  - ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜์ธ ๊ฒฝ์šฐ ํŠนํžˆ ๊ทธ๋ ‡๋‹ค
  - ์—ฌ๊ธฐ์—๋Š” k-์ตœ๊ทผ์ ‘ ์ด์›ƒ ๋ชจ๋ธ๋„ ํฌํ•จ
  - ์ œ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํŠน์„ฑ๊ฐ’์„ ์ผ์ •ํ•œ ๊ธฐ์ค€์œผ๋กœ ๋งž์ถฐ ์ฃผ์–ด์•ผ ํ•จ
  - ์ด๋Ÿฐ ์ž‘์—…์„ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(data preprocessing)๋ผ๊ณ  ํ•จ

๐Ÿšฉ ์šฉ์–ด
 โœจ ๋ถ„์‚ฐ(Variance)
  - ๋ฐ์ดํ„ฐ๊ฐ€ ํ‰๊ท ์œผ๋กœ๋ถ€ํ„ฐ ์–ผ๋งˆ๋‚˜ ํผ์ ธ ์žˆ๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ†ต๊ณ„ ์ง€ํ‘œ
  - ๋ฐ์ดํ„ฐ ๊ฐ’์ด ํ‰๊ท ์—์„œ ์–ผ๋งˆ๋‚˜ ๋–จ์–ด์ ธ ์žˆ๋Š”์ง€๋ฅผ ์ œ๊ณฑํ•˜์—ฌ ํ‰๊ท ์„ ๊ตฌํ•œ ๊ฐ’
  - ๋ถ„์‚ฐ์ด ํฌ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋„“๊ฒŒ ํผ์ ธ ์žˆ๊ณ , ๋ถ„์‚ฐ์ด ์ž‘์œผ๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ํ‰๊ท ์— ๊ฐ€๊นŒ์ด ๋ชจ์—ฌ ์žˆ์Œ์„ ์˜๋ฏธ
 
  โœ”๏ธ ๋ถ„์‚ฐ์˜ ํŠน์ง•
   1. ๊ฐ’์˜ ๋‹จ์œ„
    - ๋ฐ์ดํ„ฐ์˜ ๋‹จ์œ„๋ฅผ ์ œ๊ณฑํ•œ ๋‹จ์œ„๋ฅผ ๊ฐ€์ง (์˜ˆ: cm², kg² ๋“ฑ)
   2. ๋ถ„์‚ฐ์ด 0์ธ ๊ฒฝ์šฐ
    - ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๊ฐ’์ด ๋™์ผ
   3. ๋ถ„์‚ฐ์ด ํด์ˆ˜๋ก
    - ๋ฐ์ดํ„ฐ ๊ฐ’๋“ค์ด ํ‰๊ท ์œผ๋กœ๋ถ€ํ„ฐ ๋” ๋„“๊ฒŒ ํผ์ ธ ์žˆ์Œ    

  โœ”๏ธ ๋ถ„์‚ฐ์˜ ํ™œ์šฉ
   1. ๋ฐ์ดํ„ฐ ๋ถ„์„
    - ๋ฐ์ดํ„ฐ์˜ ๋ถ„ํฌ์™€ ํผ์ง ์ •๋„๋ฅผ ํŒŒ์•…
   2. ๋จธ์‹ ๋Ÿฌ๋‹
    - ํŠน์„ฑ(feature) ๊ฐ„ ์ค‘์š”๋„ ๋น„๊ต
    - ๋ถ„์‚ฐ์ด ๋„ˆ๋ฌด ํฐ ๊ฒฝ์šฐ ์Šค์ผ€์ผ๋ง ํ•„์š”
   3. ๊ธˆ์œต
    - ํˆฌ์ž ์ˆ˜์ต๋ฅ ์˜ ๋ณ€๋™์„ฑ ๋ถ„์„    

 โœจ ์Šค์ผ€์ผ(Scale) :: ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ(Feature) ๋ฒ”์œ„
 โœจ ์Šค์ผ€์ผ๋ง(Scaling)
  - ๋ฐ์ดํ„ฐ์˜ ํŠน์„ฑ(Feature) ๋ฒ”์œ„๋ฅผ ์กฐ์ •ํ•˜๋Š” ์ž‘์—…
  - ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ๊ณผ ํ•™์Šต ์•ˆ์ •์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์ค‘์š”
 
  โœ”๏ธ ์Šค์ผ€์ผ๋ง ์ด์œ 
   1. ํŠน์„ฑ ๊ฐ„ ํฌ๊ธฐ ์ฐจ์ด ์กฐ์ •
    - ์„œ๋กœ ๋‹ค๋ฅธ ๋‹จ์œ„๋‚˜ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง„ ๋ฐ์ดํ„ฐ ๊ฐ„ ๊ท ํ˜• ์œ ์ง€
   2. ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜
    - k-NN, SVM, K-means ๋“ฑ์˜ ๋ชจ๋ธ์€ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ์˜ํ–ฅ์„ ๋ฐ›์Œ
   3. ๊ฒฝ์‚ฌํ•˜๊ฐ•๋ฒ• ๊ธฐ๋ฐ˜ ๋ชจ๋ธ
    - ์Šค์ผ€์ผ ์ฐจ์ด๊ฐ€ ํฌ๋ฉด ํ•™์Šต์ด ๋А๋ ค์ง

  โœ”๏ธ ์ฃผ์š” ์Šค์ผ€์ผ๋ง ๋ฐฉ๋ฒ•
   1. ํ‘œ์ค€ํ™”(Standardization)
    - ํ‰๊ท ์„ 0, ํ‘œ์ค€ํŽธ์ฐจ๋ฅผ 1๋กœ ๋งž์ถค. ์ •๊ทœ๋ถ„ํฌ์— ์ ํ•ฉ
   2. ์ •๊ทœํ™”(Min-Max)
    - ๊ฐ’์„ 0~1 ๋ฒ”์œ„๋กœ ์กฐ์ •. ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ ๋ฅด๊ฒŒ ๋ถ„ํฌ๋œ ๊ฒฝ์šฐ ์ ํ•ฉ
   3. ๋กœ๋ฒ„์ŠคํŠธ ์Šค์ผ€์ผ๋ง
    - ์ค‘์•™๊ฐ’(median)๊ณผ IQR(์‚ฌ๋ถ„์œ„ ๋ฒ”์œ„)์„ ์‚ฌ์šฉ. ์ด์ƒ์น˜(outlier)์— ๋ฏผ๊ฐํ•˜์ง€ ์•Š์Œ
   4. ์ •๊ทœํ™”(Normalization)
    - ๊ฐœ๋ณ„ ๋ฐ์ดํ„ฐ ์ƒ˜ํ”Œ์˜ ๋ฒกํ„ฐ ํฌ๊ธฐ๋ฅผ 1๋กœ ์กฐ์ •. ๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜(k-NN, SVM)์— ์ ํ•ฉ
   5. ๋กœ๊ทธ ์Šค์ผ€์ผ๋ง
    - ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ๋„“๊ฑฐ๋‚˜ ํ•œ์ชฝ์œผ๋กœ ์น˜์šฐ์นœ ๊ฒฝ์šฐ ์‚ฌ์šฉ

 โœจ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(data preprocessing)
  - ๋ฐ์ดํ„ฐ ๋ถ„์„์ด๋‚˜ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์„ ์ ์šฉํ•˜๊ธฐ ์ „์—, ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ฆฌํ•˜๊ณ  ๋ณ€ํ™˜ํ•˜๋Š” ๊ณผ์ •
  - ๋ฐ์ดํ„ฐ์˜ ํ’ˆ์งˆ์„ ๋†’์ด๊ณ , ๋ชจ๋ธ์˜ ์„ฑ๋Šฅ๊ณผ ์ •ํ™•๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ฐ ๋ชฉ์ 

  โœ”๏ธ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ ์ด์œ 
   1. ๊ฒฐ์ธก๊ฐ’ ๋ฐ ์ด์ƒ์น˜ ์ฒ˜๋ฆฌ
    - ๋ฐ์ดํ„ฐ์˜ ์˜ค๋ฅ˜๋ฅผ ์ œ๊ฑฐํ•ด ๋ถ„์„์˜ ์ •ํ™•๋„๋ฅผ ๋†’์ž„
   2. ํŠน์„ฑ ๊ฐ„ ํฌ๊ธฐ ์ฐจ์ด ์กฐ์ •
    - ๋ชจ๋ธ ํ•™์Šต ๊ณผ์ •์ด ํšจ์œจ์ ์ด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ง„ํ–‰๋˜๋„๋ก ๋„์›€
   3. ๋ชจ๋ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ
    - ์ „์ฒ˜๋ฆฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ์„ ๋†’์ด๋ฉด ๋ชจ๋ธ์˜ ์˜ˆ์ธก ์„ฑ๋Šฅ๋„ ๊ฐœ์„ ๋จ

  โœ”๏ธ ์ฃผ์š” ์ „์ฒ˜๋ฆฌ ์ž‘์—…
   1. ๊ฒฐ์ธก๊ฐ’ ์ฒ˜๋ฆฌ
    - ๋ฐ์ดํ„ฐ์— **๋น„์–ด ์žˆ๋Š” ๊ฐ’(NaN)**์ด ์žˆ์„ ๊ฒฝ์šฐ ์ด๋ฅผ ์ฑ„์šฐ๊ฑฐ๋‚˜ ์ œ๊ฑฐ
   2. ์Šค์ผ€์ผ๋ง(Scaling)
    - ๊ฐ ํŠน์„ฑ์˜ ํฌ๊ธฐ ์ฐจ์ด๋ฅผ ์ค„์—ฌ ๋ชจ๋ธ ํ•™์Šต์„ ์•ˆ์ •ํ™”
    - ์˜ˆ: ๋ฐ์ดํ„ฐ๋ฅผ 0~1 ๋ฒ”์œ„๋กœ ๋ณ€ํ™˜ํ•˜๊ฑฐ๋‚˜, ํ‰๊ท  0, ํ‘œ์ค€ํŽธ์ฐจ 1๋กœ ๋ณ€ํ™˜
   3. ๋ฐ์ดํ„ฐ ์ธ์ฝ”๋”ฉ
    - ๋ฌธ์ž์—ด ๋ฐ์ดํ„ฐ๋ฅผ ์ˆซ์ž๋กœ ๋ณ€ํ™˜
   4. ์ด์ƒ์น˜ ์ฒ˜๋ฆฌ
    - ๋น„์ •์ƒ์ ์ธ ๊ฐ’(Outliers)์„ ์ œ๊ฑฐํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •
   5. ๋ฐ์ดํ„ฐ ์ •๊ทœํ™”
    - ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์ •ํ•œ ๋ฒ”์œ„๋กœ ์กฐ์ •ํ•ด ๊ท ํ˜•์„ ๋งž์ถค

 

import matplotlib.pyplot as plt                         # ๋งทํ”Œ๋กฏ๋ฆฝ
import numpy as np                                      # ๋„˜ํŒŒ์ด
from sklearn.model_selection import train_test_split    # ํ…Œ์ŠคํŠธ ์œ ํ‹ธ๋ฆฌํ‹ฐ (ํ›ˆ๋ จ์„ธํŠธ, ํ…Œ์ŠคํŠธ์„ธํŠธ ๊ตฌ์„ฑ)
from sklearn.neighbors import KNeighborsClassifier
import matplotlib.pyplot as plt

# ๋ฐ์ดํ„ฐ๊ฐ€ ํด ์ˆ˜๋กœ ํŒŒ์ด์ฌ ๋ฆฌ์ŠคํŠธ๋Š” ๋น„ํšจ์œจ์  => ๋„˜ํŒŒ์ผ ๋ฐฐ์—ด ์‚ฌ์šฉ
fish_data = np.column_stack((fish_length, fish_weight))
fish_target = np.concatenate((np.ones(35), np.zeros(14)))

# train_test_split() ์œผ๋กœ ํ›ˆ๋ จ์„ธํŠธ์™€ ํ…Œ์ŠคํŠธ์„ธํŠธ ์ƒ์„ฑ
train_input, test_input, train_target, test_target = train_test_split(fish_data, fish_target, stratify=fish_target, random_state=42)

# ํ•™์Šต
kn = KNeighborsClassifier()
kn.fit(train_input, train_target)
kn.score(test_input, test_target)

kn.predict([[25, 150]])

# ์‹œ๊ฐํ™”
plt.scatter(train_input[:,0], train_input[:,1])
plt.scatter(25, 150, marker='^')
plt.xlabel('length')
plt.ylabel('weight')
plt.show()

 

 

๐Ÿถ ๋А๋‚€์ 

1. ํ•ด๋„ ํ•ด๋„ ๋์ด ์—†๋‹ค.
2. 12์‹œ๊ฐ„์ด ์งง๊ณ ๋„ ๊ธธ๋‹ค ์˜€๋Š”๋ฐ ์•„๋‹ˆ๋‹ค ์งง๋‹ค.
3. ์ปจ๋””์…˜ ๊ด€๋ฆฌ๋ฅผ ์ž˜ํ•˜์ž