AI

[AI 도전기 14일차] Tensorflow 2 - 대학 합격 예측하기 실습

alsruds 2024. 4. 11. 01:01

 

 

강의의 최종 실습에 도착했다 *.~

 

🎬 대학 합격 예측 AI 만들기 🎬


 

🛠️ 강의용 csv 데이터 파일 다운받기 (텐서플로우를 실행하는 곳과 같은 파일에 있어야 한다)

 

YouTube

 

www.youtube.com

 

 

📍 시나리오

 

 

· admit : 0 불합격

· admit : 1 합격

· rank : 1 이 가장 높은 레벨

 

 

 

 

 

 

 

 

EX) 영어 760점, 학점 3.0, 지원한 대학교 랭킹이 2인 사람이 이 학교에 붙을 확률을 구해보자

 

- 텐서플로우 (keras) 가 알아서 학습해준다

- 파이썬 파일과 같은 폴더에 csv 데이터 파일을 준비해야한다

 

 

1. Keras 로 모델 만들기

1-1 딥러닝 model 디자인하기

일반적인 딥러닝 hidden layer : tf.keras.layers.Dense()

 

 

🤚 마지막 노드는 무조건 1개 !! (출력 레이어)

 

 

 

 

 

 

 

 

파라미터에 활성함수 넣기

 

🤚 최종 확률값 출력을 위해 마지막 노드는 sigmoid 함수를 활성 함수로 지정하기 !!

 

 

1-2 model compile 하기

 

· 보통 optimizer 는 adam 을 사용한다

 

 

 

 

 

 

 

 

 

1-3 model 학습(fit) 시키기

epoch : 학습 횟수

 

· x 데이터 : 정답 예측에 필요한 input

· y 데이터 : 정답

 

 

2. 데이터 준비하기

2-1 데이터 파일 열기

import pandas as pd

pd.read_csv('csv 파일 이름')

 

 

2-2 데이터 전처리

→ 비어있는 부분은 평균값을 넣거나 행을 삭제한다

 

· 확인하는 방법

# 비어있는 행의 개수 확인
data.isnull().sum()

# NaN/빈칸 있는 행 제거
data.dropna()

# 빈칸 채우기
data.fillna(100)

 

· 그 외 유용한 함수

# gpa 열 출력
data['gpa']

# 해당 열의 최솟값
data[’gpa’].min()

# 해당 열의 최댓값
data[’gpa’].max()

# 해당 열의 데이터 개수
data[’gpa’].count()

 

· Y 데이터 만들기

# y = [정답1, 정답2, 정답3 ..]
yData = data['admit'].values

→ 'admit' 세로 열에 있는 데이터 출력

 

· X 데이터 만들기

# x = [[데이터1],[데이터2],[데이터3]]
xData = []

for i, rows in data.iterrow():
  xData.append([ rows['gre'], rows['gpa'], rows['rank'] ])

data.iterrow() : data 라는 데이터 프레임을 가로 한 줄씩 출력하기

 

 

3. 학습시키기 & 예측해보기

· 일반 리스트를 numpy array 로 변환해야 fit 에 넣을 수 있다

 

3-1 학습시키기

model.fit( np.array(xData), np.array(yData), epochs=10 )

→ 출력값 : Epoch(몇 번째 epoch 인지), ms/step(epoch당 소요시간), loss(현재 총손실), accuracy(모델 정답률)

→ epoch ↑이면 성능 ↑ (accuracy ↑)

 

 

3-2 예측하기

model.predict([ [750, 3.70, 3], [400, 2.2, 1] ])

 

 

🍓 내 실습 🍓

· 전체 코드

### 데이터 준비하기
import pandas as pd

# 1. 데이터 파일 열기
data = pd.read_csv('/content/gpascore.csv')
# print(data)

# 2. 데이터 전처리
data = data.dropna()

yData = data['admit'].values
xData = []

for i, rows in data.iterrows():
  xData.append([ rows['gre'], rows['gpa'], rows['rank']])


### keras 로 model 만들기
import numpy as np
import tensorflow as tf

# 1. 딥러닝 model 디자인하기
model = tf.keras.models.Sequential([
    tf.keras.layers.Dense(64, activation='tanh'),
    tf.keras.layers.Dense(128, activation='tanh'),
    tf.keras.layers.Dense(1, activation='sigmoid')
])

# 2. model compile 하기
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

# 3. model 학습시키기
model.fit( np.array(xData), np.array(yData), epochs=1000 )


### 예측해보기
predictData = model.predict([[750, 3.70, 3], [400, 2.2, 1]])
print(predictData)

 

· 출력 결과

 

→ 흠... 똑같은 데이터인데 난 왜 이렇게 나와?ㅋ>?