Week3: ๐Ÿ“ Data Preprocessing(Pandas& Numpy) + MLP ๊ธฐ์ดˆ

yoonยท2025๋…„ 9์›” 14์ผ

HDC LABS NOVA 1๊ธฐ

๋ชฉ๋ก ๋ณด๊ธฐ
2/7
post-thumbnail

์ด๋ฒˆ ์ฃผ ํ•™์Šต ์ •๋ฆฌ

์ด๋ฒˆ ์ฃผ์—๋Š” Titanic ๋ฐ์ดํ„ฐ์…‹๊ณผ MNIST ๋ฐ์ดํ„ฐ์…‹์„ ํ†ตํ•ด
๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ(Pandas & Numpy)์™€ MLP(๋‹ค์ธต ํผ์…‰ํŠธ๋ก ) ๊ธฐ๋ณธ๊ธฐ๋ฅผ ์ตํž˜


๐Ÿ“š ๋ชฉ์ฐจ


1. Pandas ์กฐ๊ฑด ๊ฒ€์ƒ‰

๋ฐฉ๋ฒ•์˜ˆ์‹œ ์ฝ”๋“œํŠน์ง•
Boolean Indexdf[df['Age']>30]์กฐ๊ฑด True/False๋กœ ํ•„ํ„ฐ๋ง
locdf.loc[df['Age']>30, ['Name','Age']]์กฐ๊ฑด + ํŠน์ • ์—ด๋งŒ ์„ ํƒ
isindf[df['Name'].isin(['John','Mary'])]๋ฆฌ์ŠคํŠธ ๊ฐ’ ํ•„ํ„ฐ๋ง
isin+locdf.loc[df['Name'].isin(my_condition), 'Age']์กฐ๊ฑด + ํŠน์ • ์—ด

2. ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ & map vs apply

๐ŸŸก ๊ฒฐ์ธก์น˜ ํ™•์ธ

df['Age'].isna()           # True/False
df['Age'].isnull().sum()   # NaN ๊ฐœ์ˆ˜
df['Age'].notnull()        # ๊ฒฐ์ธก ์•„๋‹Œ ๊ฐ’

๐ŸŸก ๊ฒฐ์ธก์น˜ ์ฑ„์šฐ๊ธฐ

df['Cabin'] = df['Cabin'].fillna('U')

๐Ÿ”ต map vs apply ์ฐจ์ด

ํ•ญ๋ชฉmap()apply()
๋Œ€์ƒiterable ์ „์ฒดSeries/DataFrame
๋ฐ˜ํ™˜map ๊ฐ์ฒดSeries/DataFrame
์ž…๋ ฅ์œผ๋กœ ํ—ˆ์šฉํ•จ์ˆ˜, dict, Series(๋งคํ•‘ ๊ฐ€๋Šฅ ๊ฐ์ฒด)ํ•จ์ˆ˜๋งŒ (dict๋‚˜ Series ๋งคํ•‘ X)

3. ๋ฐ์ดํ„ฐ ๋ณ€ํ™˜ & ํ†ต๊ณ„ ํ•จ์ˆ˜

  • ์ˆซ์ž ๋ณ€ํ™˜: pd.to_numeric(errors='coerce') โ†’ ๋ณ€ํ™˜ ๋ถˆ๊ฐ€ ์‹œ NaN
    - errors = โ€˜ignoreโ€™ : ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๋ผ๋ฉด ์›๋ณธ ๋ฐ์ดํ„ฐ ๊ทธ๋Œ€๋กœ ๋ฐ˜ํ™˜
    - errors = โ€˜coerceโ€™ : ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๋ผ๋ฉด ๊ธฐ์กด ๋ฐ์ดํ„ฐ๋Š” ์ง€์šฐ๊ณ  NaN์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ฐ˜ํ™˜
    - erros= โ€˜ raiseโ€™ : ์ˆซ์žํ˜•์œผ๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋Š” ๋ฐ์ดํ„ฐ๋ผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉฐ ์ฝ”๋“œ๊ฐ€ ์ค‘๋‹จ
  • ๋ฐ์ดํ„ฐ ํƒ€์ž… ๋ณ€๊ฒฝ: astype()
  • ๊ตฌ๊ฐ„๋ณ„ ์นดํ…Œ๊ณ ๋ฆฌํ™”: pd.cut()
  • ํ†ต๊ณ„: df.describe(), df['col'].mean() ๋“ฑ

4. NumPy ๋ฐฐ์—ด ๊ธฐ์ดˆ & ์กฐ์ž‘

1. NumPy์™€ Pandas ๋น„๊ต

๊ตฌ๋ถ„NumPy ๋ฐฐ์—ด (ndarray)Pandas ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„ (DataFrame)
๊ตฌ์กฐ๋‹ค์ฐจ์› ๋ฐฐ์—ด (๋ฒกํ„ฐยทํ–‰๋ ฌยทํ…์„œ)2์ฐจ์› ํ…Œ์ด๋ธ” ๊ตฌ์กฐ
์ž๋ฃŒํ˜•๋™์ผํ•œ ์ž๋ฃŒํ˜•(int, float)๋งŒ์—ด๋งˆ๋‹ค ์„œ๋กœ ๋‹ค๋ฅธ ์ž๋ฃŒํ˜• ๊ฐ€๋Šฅ
์ธ๋ฑ์‹ฑ์ •์ˆ˜ ๊ธฐ๋ฐ˜๋ ˆ์ด๋ธ” ๊ธฐ๋ฐ˜(ํ–‰/์—ด)
ํŠน์ง•๋น ๋ฅธ ์ˆ˜์น˜ ์—ฐ์‚ฐ, ๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…groupby, merge, join, pivot ๋“ฑ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ

2. NumPy ๋ฐฐ์—ด ์ƒ์„ฑ

โ‘  arange + reshape

import numpy as np

d = np.arange(12).reshape(3,4)
print(d, d.shape)
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]] (3, 4)
  • arange(): ํŠน์ • ์ˆ˜์—ด์„ ๋งŒ๋“ค์–ด ๋ฐฐ์—ด ์ƒ์„ฑ
  • reshape(): ๋ฐฐ์—ด์˜ ์ฐจ์›/ํ˜•ํƒœ๋ฅผ ๋ณ€๊ฒฝ

โ‘ก ๋ฐฐ์—ด ์†์„ฑ

  • dtype : ๋ฐ์ดํ„ฐํ˜•
  • ndim : ๋ฐฐ์—ด ์ฐจ์›
  • T : ํ–‰/์—ด ์ „์น˜ (Transpose)
  • size : ์ด ์›์†Œ ์ˆ˜
  • nbytes : ์ด ๋ฐ”์ดํŠธ ์ˆ˜
  • flat : ๋ชจ๋“  ์š”์†Œ ์ผ๊ด„ ๋ณ€๊ฒฝ (d.flat = 1)

โ‘ข np.array()๋กœ ์ง์ ‘ ์ƒ์„ฑ

1์ฐจ์›

a = np.arange(0,5,2)
print(a, a.shape)

2์ฐจ์›

m = np.array([np.arange(0,4,3),
              np.arange(1,5,3),
              np.arange(2,6,3)])
print(m, m.shape)

# [[0 3]
#  [1 4]
#  [2 5]] (3,2)

3์ฐจ์›

m = np.array([[[0,1,2],
               [3,4,5]],
              [[0,1,2],
               [3,4,5]]])
print(m.shape)

# (2,2,3)

๐Ÿ’ก Python range() vs NumPy arange()
โ†’ arange()๋Š” ์‹ค์ˆ˜ ๊ฐ„๊ฒฉ๋„ ๊ฐ€๋Šฅ, NumPy ๋ฐฐ์—ด ๋ฐ˜ํ™˜.

3. ๋ฐฐ์—ด ๋‹ค๋ฃจ๊ธฐ (reshape, flatten, ๋ฐฉํ–ฅ ๋ณ€๊ฒฝ)

โ‘  reshape()๋กœ ํ˜•ํƒœ ๋ณ€๊ฒฝ

m1 = np.arange(6)
m2 = m1.reshape(6,1)   # 6ํ–‰ 1์—ด
m3 = m1.reshape(2,3)   # 2ํ–‰ 3์—ด
m4 = m1.reshape(2,2,3) # 2๋ฉด 2ํ–‰ 3์—ด

ํ–‰ ์ˆ˜๋ฅผ -1๋กœ ์ฃผ๋ฉด ์ž๋™ ๊ณ„์‚ฐ:

m2 = m1.reshape(-1,2)  # 2์—ด, ํ–‰์€ ์ž๋™

โ‘ก flatten() : ๋‹ค์ฐจ์› โ†’ 1์ฐจ์›

flat = m4.flatten()

โ‘ข ๋ฐฐ์—ด ๋ฐฉํ–ฅ ๋’ค์ง‘๊ธฐ

arr[::-1]  # ํ–‰ ๋ฐฉํ–ฅ ๋’ค์ง‘๊ธฐ
arr[:, ::-1]  # ์—ด ๋ฐฉํ–ฅ ๋’ค์ง‘๊ธฐ

4. ๋ฐฐ์—ด ํ†ตํ•ฉ๊ณผ ๋ถ„ํ• 

โ‘  ํ•ฉ์น˜๊ธฐ

ํ–‰ ๋ฐฉํ–ฅ์—ด ๋ฐฉํ–ฅ
vstack(), row_stack(), concatenate(..., axis=0)hstack(), column_stack(), concatenate(..., axis=1)

โ‘ก ๋ถ„ํ• ํ•˜๊ธฐ

ํ–‰ ๋‹จ์œ„ ๋ถ„ํ• ์—ด ๋‹จ์œ„ ๋ถ„ํ• 
vsplit(arr, n)hsplit(arr, n)
split(arr, n, axis=0)split(arr, n, axis=1)

5. Numpy ๋ฐฐ์—ด์˜ ์—ฐ์‚ฐ

๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…: ์ฐจ์›์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅธ ๋ฐฐ์—ด๋ผ๋ฆฌ ์‚ฐ์ˆ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ.

A = np.array([[1,2,3],
              [4,5,6]])
B = np.array([[2],
              [4]])
print(A+B)

[[ 3  4  5]
 [ 8  9 10]]

5. ์‹ ๊ฒฝ๋ง ๊ธฐ์ดˆ (Neural Network)

๐Ÿ“Œ ์ˆœ์ „ํŒŒ ์‹ ๊ฒฝ๋ง(Feedforward Neural Network) ๋กœ์ง

  1. ์ž…๋ ฅ์ธต (Input Layer)
    • ๋ฐ์ดํ„ฐ x๊ฐ€ ๋“ค์–ด์˜ต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ํŠน์ง•(feature) ๋ฒกํ„ฐ [x1,x2,...,xn][x_1, x_2, ..., x_n][x1,x2,...,xn].
  2. ๊ฐ€์ค‘์น˜ ๋ฐ ํŽธํ–ฅ (Weights, Bias)
    • ๊ฐ ์ธต์—๋Š” ๊ฐ€์ค‘์น˜ ํ–‰๋ ฌ W์™€ ํŽธํ–ฅ ๋ฒกํ„ฐ b๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ์ˆ˜์‹:z=Wโ‹…x+b
  3. ํ™œ์„ฑํ™” ํ•จ์ˆ˜ (Activation Function)
    • ๋น„์„ ํ˜•์„ฑ์„ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด z๋ฅผ ํ™œ์„ฑํ™” ํ•จ์ˆ˜ f ์— ํ†ต๊ณผ์‹œํ‚ต๋‹ˆ๋‹ค.
    • ์˜ˆ: ReLU, Sigmoid, Tanh a=f(z)
  4. ๋‹ค์Œ ์ธต์œผ๋กœ ์ „๋‹ฌ (Forward Propagation)
    • ๊ณ„์‚ฐ๋œ a๋Š” ๋‹ค์Œ ์ธต์˜ ์ž…๋ ฅ์ด ๋ฉ๋‹ˆ๋‹ค. [๋‹ค์ค‘ Hidden Layer]
    • ์ด๋ฅผ ๋ฐ˜๋ณตํ•ด์„œ ์ถœ๋ ฅ์ธต๊นŒ์ง€ ์ง„ํ–‰.
  5. ์ถœ๋ ฅ์ธต (Output Layer)
    • ํšŒ๊ท€ ๋ฌธ์ œ๋ผ๋ฉด ๋ณดํ†ต ํ™œ์„ฑํ™” ์—†์ด ๊ทธ๋Œ€๋กœ ์ถœ๋ ฅ.
    • ๋ถ„๋ฅ˜ ๋ฌธ์ œ๋ผ๋ฉด Softmax๋ฅผ ์จ์„œ ํ™•๋ฅ  ๋ถ„ํฌ๋กœ ๋ณ€ํ™˜.
    • ์ด์ง„ ๋ถ„๋ฅ˜ ๋ฌธ์ œ๋ผ๋ฉด Sigmoid ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 0~1 ํ™•๋ฅ ๋กœ ๋ณ€ํ™˜

์ˆœ์ „ํŒŒ(Forward)๋กœ ์ž…๋ ฅโ†’์ถœ๋ ฅ, ์—ญ์ „ํŒŒ(Backpropagation)๋กœ ๊ฐ€์ค‘์น˜ ์—…๋ฐ์ดํŠธ


6. MLPClassifier ์‹ค์Šต (Iris & MNIST)

๐Ÿ”น Iris ๋ฐ์ดํ„ฐ

from sklearn.neural_network import MLPClassifier

mlp = MLPClassifier(hidden_layer_sizes=(10,),
                    activation='logistic',
                    solver='lbfgs')
mlp.fit(X_train, y_train) # ํ•™์Šต
# ์ž‘์€ ๋ฐ์ดํ„ฐ์…‹(150๊ฐœ) โ†’ ์ž‘์€ ์€๋‹‰์ธต์œผ๋กœ๋„ ๋†’์€ ์ •ํ™•๋„

๐Ÿ”น MNIST ๋ฐ์ดํ„ฐ

from sklearn.datasets import fetch_openml
from sklearn.model_selection import train_test_split
from sklearn.neural_network import MLPClassifier

mnist = fetch_openml('mnist_784', version=1, as_frame=False)
X, y = mnist.data / 255.0, mnist.target.astype(int)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

mlp = MLPClassifier(hidden_layer_sizes=(128,64),
                    activation='relu',
                    solver='adam',
                    max_iter=100)
mlp.fit(X_train, y_train)
  • fetch_openml('mnist_784') : 28ร—28 ํ”ฝ์…€ โ†’ 784 ๋ฒกํ„ฐ

  • ์ •๊ทœํ™”: /255.0 โ†’ 0~1 ์Šค์ผ€์ผ๋ง(scaling).

    • ์›๋ž˜ ํ”ฝ์…€ ๊ฐ’์€ 0=๊ฒ€์ •, 255=ํฐ์ƒ‰.
    • ์‹ ๊ฒฝ๋ง ํ•™์Šต ์‹œ ์ž…๋ ฅ ๊ฐ’์ด ํฌ๋ฉด ๊ธฐ์šธ๊ธฐ ํญ๋ฐœ(gradient explosion) ๋ฌธ์ œ ์ƒ๊น€.
    • ์Šค์ผ€์ผ๋ง์„ ํ†ตํ•ด ํ•™์Šต ์•ˆ์ •์„ฑ๊ณผ ์†๋„๋ฅผ ๊ฐœ์„ .
  • ๋ผ๋ฒจ ๋ณ€ํ™˜: .astype(int)

  • ์€๋‹‰์ธต: ๊ณ ์ฐจ์› ๋ฐ์ดํ„ฐ โ†’ ํฐ ๋„คํŠธ์›Œํฌ(128โ†’64) ์„ค์ •
    hidden_layer_sizes ์— ์ „๋‹ฌํ•˜๋Š” ํŠœํ”Œ(tuple) ์˜ ๊ฐ ์›์†Œ๋Š” ๊ฐ ์€๋‹‰์ธต์˜ ๋‰ด๋Ÿฐ(์œ ๋‹›) ๊ฐœ์ˆ˜๋ฅผ ์˜๋ฏธ.

    (100, 50) ์€

    • ์ฒซ ๋ฒˆ์งธ ์€๋‹‰์ธต: 100๊ฐœ์˜ ๋‰ด๋Ÿฐ
    • ๋‘ ๋ฒˆ์งธ ์€๋‹‰์ธต: 50๊ฐœ์˜ ๋‰ด๋Ÿฐ โ†’ ์ฆ‰ 2๊ฐœ์˜ ์€๋‹‰์ธต์„ ๊ฐ€์ง„ ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

    (3,) ์€ ์€๋‹‰์ธต 1๊ฐœ, ๋‰ด๋Ÿฐ 3๊ฐœ. (5, 3, 2) ๋Š” ์€๋‹‰์ธต 3๊ฐœ(5โ†’3โ†’2).


7. ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ vs ๋žœ๋คํฌ๋ ˆ์ŠคํŠธ ๋น„๊ต

  • ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ โ†’ "์„ฑ๋ณ„์ด ์ƒ์กด์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์ด ์–ผ๋งˆ๋‚˜ ํฐ๊ฐ€?" (๊ณ„์ˆ˜ ํ•ด์„, ์˜ค์ฆˆ๋น„ Odds Ratio, AUC/Recall ์ค‘์ ): ์„ ํ˜• ๋ถ„๋ฅ˜ ๋ชจ๋ธ, ์˜ˆ์ธก ํ™•๋ฅ ์„ ์ง์ ‘ ์ œ๊ณต

    ๐Ÿ‘‰ ์ค‘์š”ํ•œ ํ‰๊ฐ€์ง€ํ‘œ

    1. ์ •ํ™•๋„(Accuracy)
      • ์ „์ฒด ์˜ˆ์ธก ์ค‘ ๋งž์ถ˜ ๋น„์œจ
      • ํด๋ž˜์Šค ๋ถˆ๊ท ํ˜•(์˜ˆ: ์ƒ์กด์ž๋ณด๋‹ค ์‚ฌ๋ง์ž๊ฐ€ ๋งŽ์Œ)์ด ์‹ฌํ•  ๋•Œ๋Š” ๋งน์ ์ด ์žˆ์Œ
    2. ์ •๋ฐ€๋„(Precision) / ์žฌํ˜„์œจ(Recall) / F1-score
      • ์ƒ์กด์ž ์˜ˆ์ธก ๋ฌธ์ œ์ฒ˜๋Ÿผ "์–‘์„ฑ ํด๋ž˜์Šค(1=์ƒ์กด)"๊ฐ€ ์ค‘์š”ํ•œ ๊ฒฝ์šฐ, Accuracy๋งŒ ๋ณด๋ฉด ์•ˆ ๋˜๊ณ  ์žฌํ˜„์œจ(Recall) ์ด ์ค‘์š”ํ•ด์š”.
      • ์ •๋ฐ€๋„: ๋ชจ๋ธ์ด "์ƒ์กด"์ด๋ผ๊ณ  ํ•œ ์‚ฌ๋žŒ ์ค‘ ์‹ค์ œ ์ƒ์กดํ•œ ๋น„์œจ
      • ์žฌํ˜„์œจ: ์‹ค์ œ ์ƒ์กดํ•œ ์‚ฌ๋žŒ ์ค‘ ๋ชจ๋ธ์ด ๋งž๊ฒŒ "์ƒ์กด"์ด๋ผ ํ•œ ๋น„์œจ
      • F1-score: Precision๊ณผ Recall์˜ ์กฐํ™”ํ‰๊ท 
  • ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ โ†’ "์„ฑ๋ณ„, ์š”๊ธˆ, ๋‚˜์ด, ๊ฐ€์กฑ ์ˆ˜ ์ค‘ ์–ด๋–ค ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€์žฅ ์ค‘์š”ํ•œ๊ฐ€?" (Feature Importance, Accuracy ์ค‘์ ): ์•™์ƒ๋ธ” ํŠธ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ชจ๋ธ, ๋ณ€์ˆ˜ ์ค‘์š”๋„๋ฅผ ์‚ฐ์ถœ

    ๐Ÿ‘‰ ์ค‘์š”ํ•œ ํ‰๊ฐ€์ง€ํ‘œ

    1. ์ •ํ™•๋„(Accuracy)
      • ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •ํ™•๋„๋ฅผ ๋†’์ด๊ธฐ ์œ„ํ•œ ๋ชจ๋ธ์ด๋ผ ๋งŽ์ด ์”€

๐Ÿ‘‰ ๋”ฐ๋ผ์„œ,

  • ์„ค๋ช…๋ ฅ ์ค‘์‹œ (๋ณ€์ˆ˜๊ฐ€ ์ƒ์กด ํ™•๋ฅ ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ ํ•ด์„) โ†’ ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ + Precision/Recall/AUC
  • ์˜ˆ์ธก๋ ฅ ์ค‘์‹œ (๋ณ€์ˆ˜ ์ค‘์š”๋„์™€ ๋ถ„๋ฅ˜ ์ •ํ™•๋„) โ†’ ๋žœ๋ค ํฌ๋ ˆ์ŠคํŠธ + Accuracy/AUC/Feature Importance

8. ์ด๋ฒˆ ์ฃผ ํ•™์Šต ํฌ์ธํŠธ ์ด์ •๋ฆฌ

โœ”๏ธŽ ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ:

  • [Pandas] ์กฐ๊ฑด ๊ฒ€์ƒ‰, ๊ฒฐ์ธก์น˜ ์ฒ˜๋ฆฌ, ๋ฐ์ดํ„ฐํ˜• ๋ณ€ํ™˜
  • [Numpy] ๋ฐฐ์—ด ์กฐ์ž‘, ๋ฐฐ์—ด ์—ฐ์‚ฐ(๋ธŒ๋กœ๋“œ์บ์ŠคํŒ…)

โœ”๏ธŽ ์‹ ๊ฒฝ๋ง ๊ธฐ์ดˆ: [์ž…๋ ฅ์ธต]์ž…๋ ฅโ†’ [์€๋‹‰์ธต] ๊ฐ€์ค‘์น˜โ†’ํ™œ์„ฑํ™” โ†’ [์ถœ๋ ฅ์ธต] ์ถœ๋ ฅ ์ˆœ์„œ

  • ํ™œ์„ฑํ™”ํ•จ์ˆ˜: ์‹œ๊ทธ๋ชจ์ด๋“œ ํ•จ์ˆ˜,ReLU, Tanh

โœ”๏ธŽ ์‚ฌ์ดํ‚ท๋Ÿฐ์„ ํ†ตํ•œ ์‹ ๊ฒฝ๋ง ๊ตฌํ˜„:

  • MLPClassifier: ์ž‘์€ ๋ฐ์ดํ„ฐ๋Š” ์ž‘์€ ๋„คํŠธ์›Œํฌ, ํฐ ๋ฐ์ดํ„ฐ๋Š” ํฐ ๋„คํŠธ์›Œํฌ + ์ •๊ทœํ™” ํ•„์ˆ˜
mlp = MLPClassifier(hidden_layer_sizes=(128, 64),  # ์€๋‹‰์ธต 2๊ฐœ (128 โ†’ 64)
                    activation='relu',
                    solver='adam', #๋ชจ๋ธ ํ•™์Šต ๋ฐฉ๋ฒ•
                    max_iter=100,   # ๋ฐ˜๋ณต ํšŸ์ˆ˜ (20 โ†’ 100 ์‹คํ—˜ ๊ฐ€๋Šฅ)
                    random_state=42, #์ดˆ๊ธฐ ๊ฐ€์ค‘์น˜ ๊ฐ’ ๊ณ ์ •
                    verbose=True)

โœ”๏ธŽ ๋กœ์ง€์Šคํ‹ฑ ํšŒ๊ท€ vs ๋žœ๋คํฌ๋ ˆ์ŠคํŠธ: ํ•ด์„๋ ฅ vs ์˜ˆ์ธก๋ ฅ

โ˜๏ธ ์ดํ‰: ์‹ค์Šตํ•ด๋ณด๋ฉด์„œ ๊ณ„์† ์ž์ฃผ ์“ฐ์ด๋Š” ํ•จ์ˆ˜/ํŒจํ‚ค์ง€๋“ค์„ ์ตํžˆ๊ณ  ๋ชจ๋ธ๋“ค์˜ ํŠน์„ฑ์„ ์ตํ˜€์„œ ์–ด๋–จ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ์ข‹์„์ง€ ๋ฐ”๋กœ ์•„๋Š” ๋Šฅ๋ ฅ์„ ๊ธฐ๋ฅด๋Š” ๊ฒŒ ์ค‘์š”ํ•  ๋“ฏ. ๋‹ค์Œ์ฃผ๋„ ํ™”์ดํŒ…~

0๊ฐœ์˜ ๋Œ“๊ธ€