ν€μλ
- κ΅μ°¨ κ²μ¦(Cross_Validation)
- Grid_Search, Random_Search
- Scikit-learn/Keras Tuner
νλΌλ―Έν° vs νμ΄νΌνλΌλ―Έν°
- νλΌλ―Έν° : 맀κ°λ³μ, λͺ¨λΈ λ΄λΆμμ κ²°μ λλ λ³μ, λ°μ΄ν°λ‘λΆν° κ²°μ λλ κ° ex) νκ· , νμ€νΈμ°¨, νκ·κ³μ, κ°μ€μΉ, νΈν₯ λ±
- νμ΄νΌ νλΌλ―Έν° : λͺ¨λΈλ§ μ μ¬λμ΄ μ§μ μΈν ν΄μ£Όλ κ°, μ’ λ₯κ° κ΅μ₯ν λ§μ ex) νμ΅λ₯ , epoch, μ΅ν°λ§μ΄μ , νμ±ν ν¨μ λ±
μ¦, μ¬λμ΄ κ²°μ νλλ μνλλμ λ°λΌ λλμ΄μ§λλ€.
μ°Έκ³
Cross Validation(K fold)
- λ¨Έμ λ¬λμμ κ΅μ°¨κ²μ¦(Cross-Validation ; CV)μ μ΄μ©νμ¬ μ΅μ μ νμ΄νΌνλΌλ―Έν°λ₯Ό νμνλ―, λΉμ°ν λ¨Έμ λ¬λ λ²μ£Όμ μνλ λ₯λ¬λλ κ°λ₯(μ€νλ € λ λ§μ νμ΄νΌνλΌλ―Έν°κ° μ‘΄μ¬)
K fold μ Stratified K fold
from sklearn.model_selection import KFold, StratifiedKFold
kf = KFold(n_splits = 10)
skf = StratifiedKFold(n_splits = 10, random_state = 42, shuffle = True) # shuffle=True νλ©΄ μμ λ°μ΄ν°λ₯Ό μκ³ λμ splitν¨
- K fold : κ·Έλ₯ μΌλ°μ μΈ κ΅μ°¨κ²μ¦, μ£Όμ΄μ§ μμ λ§κ² 10κ°λ‘ λλ μ κ΅μ°¨κ²μ¦μ μννλ€. νκ·λͺ¨λΈμμ μ μ©νλ€.
- Stratified K fold : κ΅μ°¨κ²μ¦μΈλ°, νκ²μ ν΄λμ€ λΆν¬λ₯Ό κ³ λ €ν΄μ foldλ₯Ό 10κ°λ‘ λλλ€. λΆλ₯λͺ¨λΈμμ μ μ©νλ€.(μ μ΄μ νκ²κ°μ΄ μ°μμ μΈ νκ·λ¬Έμ μμλ μ μ©ν μ μμ)
κ΅μ°¨κ²μ¦ μμ
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
model.add(Dense(32, activation='relu'))
model.add(Dense(32, activation='relu'))
model.add(Dense(1))
x_train = pd.DataFrame(x_train)
y_train = pd.DataFrame(y_train)
for train_index, val_index in kf.split(np.zeros(x_train.shape[0])):
training_data = x_train.iloc[train_index, :]
training_data_label = y_train.iloc[train_index]
validation_data = x_train.iloc[val_index, :]
validation_data_label = y_train.iloc[val_index]
model.compile(loss='mean_squared_error', optimizer='adam')
model.fit(x_train, y_train,
epochs=10,
batch_size=32,
validation_data = (validation_data, validation_data_label),
)
results = model.evaluate(x_test, y_test, batch_size=32)
print("test loss, test mse:", results)
HyperParameter Tuning
νμ΄νΌνλΌλ―Έν° νλ λ°©λ²
- Babysitting or Grad Student Descent == μμμ
- Grid Search : νμ΄νΌνλΌλ―Έν° λ³ μ£Όμ΄μ§ κ°λ€μ μ‘°ν©μ λͺ¨λ κ³ λ €νμ¬ νμ΅νλ λ°©λ². μ£Όμ΄μ§ κ°μ λ리면 κ΅μ₯ν μ€λ μκ°μ΄ 걸리λ λ¨μ . λ°λΌμ 1~2κ° μ λμ νμ΄νΌνλΌλ―Έν°λ₯Ό μ°Ύλλ° μ μ©
- Random Search : νμ΄νΌνλΌλ―Έν° λ³λ‘ μΌμ ν λ²μλ₯Ό μ£Όκ³ κ·Έ λ²μ λ΄μμ 무μμλ‘ μΆμΆνμ¬ μ‘°ν©μ λ§λ€μ΄ νμ΅.(μ‘°ν© κ°―μλ₯Ό μ ν΄μ£Όλ©΄ λ± κ·Έλ§νΌλ§ νμ΅) μλμ μΌλ‘ μ€μν νμ΄νΌνλΌλ―Έν°λ λ νμνκ³ λ μ€μν νλΌλ―Έν°μ λν΄μλ λ μνν¨
μμ λ°©μλ€μ νμ κ²°κ³Όλ₯Ό λ³Έ ν, κ·Έ μ 보λ₯Ό λ€μ μλ‘μ΄ νμμ λ°μνμ¬ μ±λ₯μ λμ
- Bayesian Methods : μ΄μ νμ κ²°κ³Όμ μ 보λ₯Ό μλ‘μ΄ νμμ νμ©. λ°λΌμ νμ΄νΌνλΌλ―Έν° νμ ν¨μ¨μ λμΌ μ μλ€.
Keras Tunerλ₯Ό μ¬μ©ν νμ΄νΌνλΌλ―Έν° νλ
μμ) μ 체μ μΈ μ½λ κ΅¬μ‘°λ§ λ³Ό κ²
from tensorflow import keras
from tensorflow.keras.layers import Dense, Flatten
import tensorflow as tf
!pip install -U keras-tuner
import kerastuner as kt
def model_builder(hp):
model=keras.Sequential()
model.add(Flatten(input_shape=(28, 28)))
hp_units=hp.Int('units', min_value=32, max_value=512, step=32)
model.add(Dense(units=hp_units, activation='relu'))
model.add(Dense(10, activation='softmax'))
hp_learning_rate=hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
model.compile(
optimizer=keras.optimizers.Adam(learning_rate=hp_learning_rate),
loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
return model
tuner=kt.Hyperband(
model_builder,
objective='val_accuracy',
max_epochs=10,
directory='my_dir',
project_name='intro_to_kt')
tuner.search(
X_train, y_train,
epochs=10,
validation_data=(X_test, y_test))
μΆκ°) ν μ μμ κ²°κ³Όκ° λμ μμ΄ μ΅μ νλ κ²°κ³Όλ§ λ¨κ² ν΄μ£Όλ κ²
import IPython
# μλ μ
μμ κ²°κ³Όκ°μ λμ μλκ³ κ°±μ νλ©΄μ κΉλνκ² μ΅μ νλ κ°λ§ 보μ¬μ§κ² ν΄μ£Όλ κ²
class ClearTrainingOutput(tf.keras.callbacks.Callback):
def on_train_end(*args, **kwargs):
IPython.display.clear_output(wait = True)
'πΏ Data > λΆνΈμΊ ν' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[TIL]76. NLP(Natural Language Processing) (0) | 2022.03.02 |
---|---|
[TIL]75. μ κ²½λ§ κ°λ μ 리 (0) | 2022.03.01 |
[TIL]73. λ λμ μ κ²½λ§ νμ΅μ μν λ°©λ² (0) | 2022.02.24 |
[TIL]72. μ κ²½λ§ νμ΅ (0) | 2022.02.23 |
[TIL]71. μΈκ³΅ μ κ²½λ§ (0) | 2022.02.22 |