Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
| 29 | 30 | 31 |
Tags
- wcss
- insert()
- string
- Machine Learning
- list
- data
- count()
- IN
- function
- sklearn
- 분류 결과표
- 반복문
- analizer
- DataAccess
- dendrogram
- 덴드로그램
- numpy
- elbow method
- Python
- del
- 최댓값
- matplotlib
- len()
- hierarchical_clustering
- pandas
- DataFrame
- Dictionary
- 최솟값
- append()
- nan
Archives
- Today
- Total
개발공부
텐서플로우로 분류(Classification)의 문제 모델링 하는 방법 실습 본문
고객 정보와 해당 고객이 금융상품을 갱신했는지 안했는지의 여부에 대한 데이터가 있다.
이 데이터를 가지고 갱신여부를 예측 (분류) 하는 딥러닝을 구성해보자.
먼저 csv파일을 판다스 데이터 프레임으로 읽어온다.
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
df = pd.read_csv('data/Churn_Modelling.csv')
df

NAN 값이 있는지 확인한다.
df.isnull().sum()

X 를 설정한다.
X = df.loc[:, 'CreditScore' : 'EstimatedSalary']
X

y를 설정한다.
y = df['Exited']
y

문자열 데이터는 숫자로 바꿔준다. (인코딩)
Gender는 레이블 인코딩한다.
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
X['Gender'] = encoder.fit_transform(X['Gender'])
X

Geography는 원 핫 인코딩 한다.
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
ct = ColumnTransformer( [ ('encoder', OneHotEncoder(), [1]) ],
remainder= 'passthrough')
X = ct.fit_transform(X)
X

X의 첫 컬럼은 없어도 그 뒤의 두개 컬럼만으로도 Geography를 구분할 수 있으니 제거한다.
X = X[:, 1: ]
X

피처 스케일링한다. MinMaxScaler를 이용해보자.
from sklearn.preprocessing import MinMaxScaler
sc_X = MinMaxScaler()
X = sc_X.fit_transform(X)
X

데이터를 학습용과 검증용으로 나눈다. ex (train - 80%, test - 20%)
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 )
이제 DNN 모델을 만들어보자.
import tensorflow as tf
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.engine import input_layer
# 빈 틀을 만든다.
model = Sequential()
# Dense == Layer, 레이어를 추가한다.
# units - 레이어한의 유닛 수
# activation - activation function
# input_shape - 들어오는 데이터의 컬럼 수
model.add(Dense(units = 6, activation = 'relu', input_shape = (11, )))
model.add( Dense(units = 8, activation = tf.nn.relu))
model.add( Dense(units=1, activation='sigmoid'))
# compile
model.compile(optimizer='adam', loss = 'binary_crossentropy', metrics=['accuracy'])
model.summary()

만든 모델을 학습시키자.
model.fit(X_train, y_train, epochs = 20, batch_size = 10)

test 데이터로 검증해보자.
model.evaluate(X_test, y_test)

컨퓨전 매트릭스로 확인해보자.
from sklearn.metrics import confusion_matrix, accuracy_score
y_pred = model.predict(X_test)
# 시그모이드 함수를 사용했기 때문에 0.5이상인 값은 1, 아닌것은 0으로 바꾼다.
y_pred = (y_pred > 0.5).astype(int)
cm =confusion_matrix(y_test, y_pred)
cm

정확도를 확인해보자
accuracy_score(y_test, y_pred)

이제 학습과 테스트가 끝났으니,
임의의 데이터를 가지고 결과를 예측해보자.
- Geography: France
- Credit Score: 600
- Gender: Male
- Age: 40
- Tenure: 3
- Balance: 60000
- Number of Products: 2
- Has Credit Card: Yes
- Is Active Member: Yes
- Estimated Salary: 50000
이를 X 와 매칭되게 바꾸면 아래와 같다.
new_data = np.array([600, 'France', 'Male', 40, 3, 60000, 2, 1, 1, 50000])
new_data = new_data.reshape(1,-1)
인코딩을 하자.
new_data[:, 2] = encoder.transform(new_data[:,2])
new_data

new_data = ct.transform(new_data)
new_data = new_data[:, 1: ]
new_data

피처 스케일링 하자.
new_data = sc_X.transform(new_data)
이제 예측해보자.
y_pred = model.predict(new_data)
y_pred

y_pred = (y_pred>0.5).astype(int)
y_pred

'Python > Deep Learning' 카테고리의 다른 글
| Validation, validation_split, validation data 코드 예제 (0) | 2022.06.13 |
|---|---|
| Learning Rate를 옵티마이저에서 셋팅하는 코드 (0) | 2022.06.13 |
| 텐서플로우를 이용한 그리드 서치하는 방법 (0) | 2022.06.13 |
| 텐서플로우로 리그레션(Regression) 문제 모델링 하는 방법 실습 (0) | 2022.06.10 |
| 텐서플로우에서 학습시 epochs 와 batch_size 이란? (0) | 2022.06.10 |