벌써 인공지능 공부를 시작한지 12일이 지났다. 이 기간 동안 여러가지를 건드려보면서(?) 인공지능 공부를 어디부터 시작해야하나 조금씩 감을 잡기 시작했는데 계속 이론만 공부하니 조금 지루해져서 직접 한번 코드를 작성해보는 게 좋겠다 싶어서 오늘 인공지능 공부 시간에는 직접 코드를 작성해보고 코드를 해석해보고 부족한 부분이 있다면 그걸 채울 공부 계획을 짜보려고 한다.
일단 오늘 내가 본 영상은 이 영상! 클론 코딩 해볼 예정이다. (clone coding: 다른 사람의 코드를 그대로 내가 받아 적으면서 배우는 방법, 영상 링크는 맨 아래에 걸어둘게요!)
일단 오늘 만들어 볼 AI 주제는 “종양의 크기, 텍스쳐, 촉감, 오목함, 대칭 정도 등의 정보를 주고 종양이 암(악성)인지 아니면 암이 아닌지(양성) 진단하기”이다.
데이터 셋은 여기에서 다운 받을 수 있다(진짜 의료 자료라고 한다, 다운로드 방법은 오른쪽 download zip을 눌러서 zip파일로 다운로드 받아서 zip파일 열면 안에 cancer.csv파일이 있다.).
데이터 셋을 다운받았다면 이젠 AI를 본격적으로 만들어 볼 준비가 되었다!
그럼 1. google colaboratory라고 구글에 쳐서 ‘Welcome To Colaboratory – Colaboratory – Google’을 클릭한다. 그리고 어떤 창이 열리면 맨 아래의 2. ‘새 노트’를 클릭한다(나는 이미 저 사람이 적어놓은 코드를 한번 열어봤고 내 것도 만들기 시작한 상태에서 스크린샷을 찍어서 저렇게 ‘최근 사용’에 이미 만들어 놓은 노트가 있지만 아마 처음이라면 저 맨 위 ‘Colaboratory에 오신 것을 환영합니다’ 이 말만 있을 듯하다.)
저렇게 새로운 노트를 만들면 이제 코딩을 할 준비가 된 거다 ㅎㅎ.
이제 아까 데이터를 컴퓨터에 다운받을 데이터(cancer.csv)를 google colaboratory(‘구글 콜랩’이라고 줄여서 부르겠음)에 올린다.
데이터가 올라갔다면 이제 구글 콜랩에서 이 데이터를 요리할 수 있게 파이썬 라이브러리 pandas import해주고 데이터 셋도 판다스로 읽어준다(여기서부터 구글 콜랩에 코딩 시작).
import pandas as pd
dataset = pd.read_csv(‘cancer.csv’)
이렇게 코드를 쓰고 shift + enter 누르거나 옆의 재생(▶︎)부분을 누르면 바로 그 코드가 실행된다. 구글 콜랩은 코드 줄마다 실행된다. 새 줄, 새 코드를 쓰려면 위의 ‘+ 코드’ 부분을 누르면 된다.
암튼 코딩으로 다시 돌아와서, 데이터를 결과 값이랑 input 값으로 나눠준다.
이게 무슨 말이냐면 우리가 알고자 하는 것은 종양이 암이냐 아니냐(결과 선택지) 하는 거고 그걸 알기 위해 우리가 컴퓨터에게 준 자료들은 ‘반지름, 촉감, 둘레 등의 값(input)’이었다. 컴퓨터를 학습시키려면 input과 결과 선택지로 데이터를 따로 넣어 주어야하기 때문에 이 두개를 나눠서 분류해준다.
x = dataset.drop(columns=[“diagnosis(1=m, 0=b)”])
y = dataset[“diagnosis(1=m, 0=b)”]
이 부분이 이해가 안 가는 사람이라면 내가 쓴 ‘신경망이란 무엇인가?’ 글의 그림만 좀 더 보고 오길 바란다 (input과 결과 선택지를 어떻게 컴퓨터에게 제공하는지. 신경망의 기초다. 글은 여기에).
다음엔 저 x와 y 값을 세분화시켜준다. 우리는 지금 테스트 데이터와 트레이닝 데이터가 하나의 데이터로 같이 묶여있기 때문에 지금 저 x와 y로 나눈 값을 테스트 데이터와 트레이닝 데이터로 다시 한번 나눠준다.
(*트레이닝 데이터는 컴퓨터를 학습시키는데 쓰이고 테스트 데이터는 컴퓨터를 다 학습시킨 후 지금 이 컴퓨터가 제대로 학습했나 확인할 때 컴퓨터에게 넣어주는 데이터로 쓰인다, 아래의 sklearn.model_selection은 머신러닝에서 많이 쓰이는 라이브러리로 여기선 데이터를 split하는데 쓰였다. test_size = 0.2는 전체 데이터에서 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)
그 다음엔 tensorflow keras를 사용해서 컴퓨터를 학습시킨다(드디어!!). 우리가 만드는 모델은 neural network이므로 input layer, hidden layer, output layer를 모두 모델에 구축해준다.
(아래의 model.add 부분, 위에서 아래 순서대로 input layer, hidden layer, output layer의 코드를 나타낸다. 우리의 결과 값 선택지는 하나의 뉴런 안에 두개의 결과(악성 종양이면 뉴런 activate, 양성 종양이면 뉴런 activate 안됨)를 보여줄 수 있기 때문에 output layer의 뉴런 수가 한 개이다. 뉴런이 activate 된다는 건 activation 값이 1에 가까워진다는 것, sigmoid 함수는 뉴런의 activation 값이 0에서 1 사이로 나오도록 뉴런 값을 조정해주는 역할)
마지막에는 adam이라는 compiler를 이용해 loss function를 활용, binary_crossentropy로 컴퓨터를 학습시킨다. 우리는 종양이 양성인지 악성인지 아는 게 중요하므로 binary_crossentropy를 이용한다(binary = 0 또는 1 이라는 의미).
import tensorflow as tf
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation=’sigmoid’))
model.add(tf.keras.layers.Dense(256, activation=’sigmoid’))
model.add(tf.keras.layers.Dense(1, activation=’sigmoid’))
model.compile(optimizer=’adam’, loss=’binary_crossentropy’, metrics=[‘accuracy’])
여기까지가 우리가 학습시킬 모델을 구축한 거고 이젠 이 모델에 우리가 컴퓨터를 학습시키려고 선별한 데이터(training data)를 입력해준다.
아래의 epochs는 우리의 데이터(cancer.csv)로 얼마나 많이 이 모델을 반복 학습시킬 건지 그 횟수를 말하는 것.
model.fit(x_train, y_train, epochs=1000)
이제 학습이 끝났으면 모델이 얼마나 잘 학습됐는지 테스트 데이터를 넣어보며 얼마나 우리가 구축한 모델이 정확한지 확인해본다.
model.evaluate(x_test, y_test)
여기까지가 내가 Khanrad 유튜버의 영상을 클론 코딩해보며 나의 첫 AI를 만들어본 결과이다. 내가 이번 주에 ‘신경망이란 무엇인가’ 글을 썼고 미리 공부를 해놨기 때문에 이해하는 게 많이 어렵지는 않았다(그리고 실질적으로 코딩해보니 재미있었다! *^-^*) 또 다른 쉬운 AI를 만들어보며 자세한 것들, 세부적인 부분은 더 이해를 해보고 자세히 들여다 볼 예정이다. 그럼 오늘의 공부 끝! ㅎㅎ
<코딩만 모아 놓은 것>
import pandas as pd
dataset = pd.read_csv(‘cancer.csv’)
x = dataset.drop(columns=[“diagnosis(1=m, 0=b)”])
y = dataset[“diagnosis(1=m, 0=b)”]
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)
import tensorflow as tf
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(256, input_shape=(x_train.shape[1],), activation=’sigmoid’))
model.add(tf.keras.layers.Dense(256, activation=’sigmoid’))
model.add(tf.keras.layers.Dense(1, activation=’sigmoid’))
model.compile(optimizer=’adam’, loss=’binary_crossentropy’, metrics=[‘accuracy’])
model.fit(x_train, y_train, epochs=1000)
model.evaluate(x_test, y_test)
*아래는 제가 이 글에서 클론 코딩한 ‘파이썬으로 15분 안에 첫 AI 만들어보기’ 영상입니당~