원하는 데이터를 얻기 위해 가공한 데이터들의 column값들이
입력되며
가중치에 의해 변형되어 합산되고
액티베이션함수에 의해서
다음 뉴런에게로 전파된다
액티베이션 함수에는 이런것들이 있다
그리고 그렇게 전달받은 히든레이어들은 그걸 다시아웃풋 레이어로 다시 전달한다
히든레이어는 몇개가 될지 모른다
사용자가 설정하는데로 정해지기 때문에 1개일수도 100개 일수도 있다
다만 1개 일때보다 100개일때
데이터처리가 늦을것이며 정확해질것이다
보통의 딥러닝은 이런식으로 진행되며 좌측 인풋레이어에서 데이터를 입력받아
우측 아웃풋레이어까지 가중치와 함수에 의해 수정의 수정을 거치며 답을 도출해내고
다시 좌측으로 한칸한칸 돌아가며 다시 수정의 수정을 거치게 된다
이것을 1회 하는것을 epochs라고 한다
이렇게 해서 하려는 목표는 가중치의 값을 구하는것이며
가중치를 구하는것은 아주 정밀한 오차를 구하기 위함이다
이 중 정밀한 오차를 구하기 위한 방법으로써
그라디언트 디센트 라는 방법을 사용하는데
기울기를 찾아 오차율이 높다면 오차율을 낮추기 위해 한걸음 한걸음 나아가는 방식이다
이 때 낮은 오차율을 찾기 위해 가중치(보폭)을 줄인다면
가장 낮은 오차를 찾기전에 데이터를 다 쓸것이며
그렇다고 빠르게 찾겠다고 가중치(보폭)을 늘린다면
가장 낮은 오차를 건너 뛰게되어 더 오래걸릴 수도 있다
그러니 적당한 가중치를 설정하는것이 좋겠다
이런 데이터가 있다고 할때
Exited 여부를 예측하는 딥러닝 머신을 만들어보자
우선 예측이 필요하니 Exited는 y로 설정하고
나머지중 X는
0,1 콜럼은 도움이 안되니 제외하고 모두로 설정하면 되겠다
y = df['Exited']
X = df.loc[ : , 'CreditScore' : 'EstimatedSalary']
그 후에 X의 데이터들을 보니
문자열이 있으니 처리를 해줘야겠다
df['Geography'].unique()
array(['France', 'Spain', 'Germany'], dtype=object)
df['Gender'].unique()
array(['Female', 'Male'], dtype=object)
국가는 원 핫 인코딩을 해주면 되겠고 성별은 레이블 인코딩을 해주면 되겠다
from sklearn.preprocessing import LabelEncoder
label_encoder = LabelEncoder()
X['Gender'] = label_encoder.fit_transform(X['Gender'])
X['Gender']
0 0
1 0
2 0
3 0
4 0
..
9995 1
9996 1
9997 0
9998 1
9999 0
Name: Gender, Length: 10000, dtype: int64
성별은 레이블인코딩으로 0 과 1로 만들었고
from sklearn.compose import ColumnTransformer
from sklearn.preprocessing import OneHotEncoder
ct = ColumnTransformer( [('encoding', OneHotEncoder(), [1])], remainder='passthrough' )
X = ct.fit_transform(X)
array([[1.0000000e+00, 0.0000000e+00, 0.0000000e+00, ..., 1.0000000e+00,
1.0000000e+00, 1.0134888e+05],
[0.0000000e+00, 0.0000000e+00, 1.0000000e+00, ..., 0.0000000e+00,
1.0000000e+00, 1.1254258e+05],
[1.0000000e+00, 0.0000000e+00, 0.0000000e+00, ..., 1.0000000e+00,
0.0000000e+00, 1.1393157e+05],
...,
[1.0000000e+00, 0.0000000e+00, 0.0000000e+00, ..., 0.0000000e+00,
1.0000000e+00, 4.2085580e+04],
[0.0000000e+00, 1.0000000e+00, 0.0000000e+00, ..., 1.0000000e+00,
0.0000000e+00, 9.2888520e+04],
[1.0000000e+00, 0.0000000e+00, 0.0000000e+00, ..., 1.0000000e+00,
0.0000000e+00, 3.8190780e+04]])
국가는 원 핫 인코딩으로 3개의 콜럼으로 만들 었 으 나
Dummy Variable Trap을 적용하자
딥러닝에서는 컬럼 하나가 연산에 아주 크게 작용하므로
원 핫 인코딩 한 결과에서 가장 왼쪽의 컬럼은 삭제해도 데이터를 표현하는데는 아무 문제가 없다
즉 France, Germany, Spain 3개의 컬럼으로 원 핫 인코딩 되는데
1 0 0
0 1 0
0 0 1
이렇게 표현 되는 것에서 France 컬럼을 제거한
0 0 => France
1 0 => Germany
0 1 => Spain
처럼 알아 볼 수 있기 때문에 삭제를 하도록 한다
X = pd.DataFrame(X).drop(0,axis=1).values
이후 또 빠른 연산을 위해 피쳐스케일링을 한다
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
X = scaler.fit_transform(X)
훈련용 데이터와 테스트용의 데이터로 나눈다
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)
딥 러닝 시작
이제부터 시작이다
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
텐서플로우를 활용한다
model = Sequential()
시퀀셜을 사용하여 모델을 만들어준다
model.add( Dense(units = 8, activation = 'relu',input_shape = (11, ) ) )
모델에 add( )를 사용하여
파라미터 안에 Dense를 입력해준다
Dense는 히든레이어 안의 계층을 의미한다 그리고 첫번째 add는 첫번째 히든레이어다
units= 는 몇개의 입력받는 뉴런을 만들것인지
activation은 가장 많이 사용되는 relu를 사용해주고
input_shape는 11개의 콜럼들이 입력된다고 적어준다
model.add( Dense( 6, 'relu' ) )
2번째 계층은 값들만 적어줘도 된다
model.add( Dense( 1, 'sigmoid' ) )
아웃풋 레이어에서는 1개의 뉴런만이 존재하며 sigmoid함수를 사용하기로 한다
이로서 모델링이 끝났다
모델링이 끝나면 컴파일(Compile)을 해야한다
컴파일이란
옵티마이저(Optimizer) 셋팅
로스펑션(loss function 오차함수, 손실함수) 셋팅
검증방법 셋팅
model.compile(optimizer = 'adam', loss='binary_crossentropy', metrics = ['accuracy'] )
optimizer는 가장 보편적인것이 adam
2개로 분류하는 문제의 loss는 'binary_crossentropy' 로 설정한다
메트릭스는 어떤것으로 판별할것인지 선택하는것
정확도인 accuracy를 선택한다
컴파일이 끝났다면 테스트를 해보자
model.fit(X_train, y_train, batch_size = 10, epochs = 20 )
batch_size는 원래는 데이터가 1개씩 들어갔다 나오고 1개씩 들어갔다 나오고 하는 것을
한번에 들어가는 데이터의 갯수를 n개의 숫자로 설정하는것이다
이번 테스트에선 10개의 데이터가 한번에 들어가도록 한다
epochs는 데이터가 아웃풋으로 가서 다시 인풋까지 돌아오며 테스트를 하는데
이 행위를 n번 하도록 하여
좀 더 낮은 오차율
좀 더 높은 정확도를 찾도록 한다
loss는 낮을수록, accuracy는 높을수록 좋다
학습이 끝나면 평가 를 해야한다
model.evaluate( X_test, y_test )
'Python > DeepLearning' 카테고리의 다른 글
딥러닝 - 이미지 분류 2) 모델 생성 및 확인 (0) | 2024.04.18 |
---|---|
딥러닝 - 이미지 분류 1) Data Preprocessing (0) | 2024.04.18 |
딥러닝 - 조건 성립 정지법 callbacks.EarlyStopping (0) | 2024.04.17 |
딥러닝 - GridSearch 그리드서치 (베스트 모델 찾기) (0) | 2024.04.17 |
딥러닝 - New 데이터의 예측법 (1) | 2024.04.17 |