2020. 12. 30. 23:40ㆍ언어영역/Machine Learning
유튜버 '봉수골 개발자 이선비'의 텐서플로우 강의
'생활코드'와 같이 OpenTutorials에서 활동하시는 유튜버 이선비의 텐서플로우 강의를 수강했다. 온라인으로 쉽게 접할 수 없는 고급 지식들을 누구나 이해할 수 있게 설명해주는 이런 강의를 열어주시는 이선비님과 오픈튜토리얼즈에게 너무도 감사하다. 여러모로 도움이 되는 강의였는데, 다만 초심자를 위해 무엇을 뺄 지 고민하는 과정에서 개인적으로는 너무 많은 것들이 빠지지 않았나... 하는 생각이 들었다. 그러다보니 다 묶어서 땡 치고 넘어가는 기분. 더 깊게 공부하고싶은 입장에서는 강의를 듣다가 중간중간 '응?' 하면서 의아해하는 부분이 있었다. 이선비의 강좌 필기와 더불어 개인적으로 조사한 내용들도 추가해서 적어 두었다.
머신러닝에서 LOSS란 무엇인가
간단히 말해서 편차 제곱의 평균 즉 분산이다...라고 영상에서 설명하고 있다. 하지만 이는 Loss를 구하는 여러 방법 중 한 가지에 불과하다. 그렇다면 Loss란 무엇인가?
즉 예측의 오차를 나타낸다. 그리고 오차를 나타내는 데에는 여러가지 지표가 사용된다. 이는 구하고자 하는자료의 종류에 따라 구분된다. (...bskyvision.com/740에 따르면 손실함수와 Metric은 다르다고 한다. 공부해야지.) 아래는 그 예시이다.
Loss Funcion의 종류
- 회귀(수치 변수)형 모델에서 : 즉 수치로 나타낼 수 있는 모델에 대한 오차범위를 구하는 함수
- Sum Squared Error (SSE) : 편차의 제곱합 : 데이터량이 많아질수록 커지므로 일반적 상황에서 비교하기 곤란하다.
- Mean Squared Error (MSE) : 편차의 제곱의 평균 (=분산) : 가장 많이 쓰인다.
- Root Mean Squared Error (RMSE) : 루트 편차의 제곱의 평균 (=표준편차) : MSE에 루트를 씌운 값.
- Mean Average Error (MAE) : 편차 절댓값의 평균.
(MSE를 이용해서 F Value를 구할 수도 있다. 다음 게시물에서 설명한다.)
- 범주(이름 변수)형 모델에서 : 즉 이름으로 분류하는 모델에 대해 오차범위를 구하는 함수
- Cross Entropy Error (CEE) : 단순히 말해서 범주에 속할 확률을 구할때 오차를 구하는 함수이다. 자세한 내용은 다음 게시물에서 다루자.
- Binary Cross Entropy (BCE) : 두 개의 범주로 나뉘어 있을 때 사용한다. (OX나 남녀 등)
- Categorical Cross Entropy (CCE) : 두 개 이상의 범주로 나위어 있을 때 사용한다. (혈액형, 부서 등)
- Sparse Cross Entropy (SCE) : 정수 범주로 나뉘어 있을 때 사용한다. (1,2,3,4,5 ...)
- Cross Entropy Error (CEE) : 단순히 말해서 범주에 속할 확률을 구할때 오차를 구하는 함수이다. 자세한 내용은 다음 게시물에서 다루자.
여기서 더 많은 종류의 Loss Function을 찾아볼 수 있다.
독립변수와 종속변수의 관계
y=w1x1+w2x2+...+b
y는 종속변수, 각 x1~xn은 독립변수, w1~wn은 가중치, b는 편향이다. 이름이 모든 걸 설명해준다. 그리고 이 수식을 Perceptron이라고 한다.
퍼셉트론(Perceptron)은 프랑크 로젠블라트(Frank Rosenblatt)가 1957년에 제안한 초기 형태의 인공 신경망으로 다수의 입력으로부터 하나의 결과를 내보내는 알고리즘입니다.
아... 정보 고마워!
보스턴 집값 예측해보기 (예제)
링크는 여기 있다.
# 보스턴 집값 예측
- github csv url: https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv
#라이브러리 사용
import tensorflow as tf
import pandas as pd
# 1.과거의 데이터를 준비합니다.
파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
보스턴 = pd.read_csv(파일경로)
print(보스턴.columns)
보스턴.head()
print(보스턴.columns)는 보스턴 csv파일의 속성을 보여준다. 보스턴.head()는 보스턴 csv파일 미리보기이다.(앞부분 일부분을 보여준다.)
# 독립변수, 종속변수 분리
독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'b', 'lstat']]
종속 = 보스턴[['medv']]
print(독립.shape, 종속.shape)
.shape는 모양새가 어떻게 생겼는지에 대해서 나타내는데, 예로 print(독립.shape)를 치면 (506, 13)이라고 나온다. 데이터의 양이 506개이며 속성이 13개 있다는 의미이다.
# 2. 모델의 구조를 만듭니다
X = tf.keras.layers.Input(shape=[13])
Y = tf.keras.layers.Dense(1)(X)
model = tf.keras.models.Model(X, Y)
model.compile(loss='mse')
keras는 tensorflow의 인공지능 API이다.
layers, input, dense는 함의하는 의미가 뭔가 많다. Layer는 인공지능의 구조에서 나온 말이라고 한다. Dense같은 경우는 완전연결층을 의미한다고 하는데 이게 뭐 함수로 치면 일대일대응인가보다. input은 실제로 input을 의미하는 것 같고... 추가로 공부해야겠다.
# 3.데이터로 모델을 학습(FIT)합니다.
model.fit(독립, 종속, epochs=1000, verbose=0)
model.fit(독립, 종속, epochs=10)
fit은 학습시킨다는 걸 의미한다 에포크(Epoch)는 반복횟수를 의미한다. Verbose는 사전적인 의미가 '말이 많은'이란 뜻인데, 이 값이 0이면 조용히, 1이면 Progress Bar가, 2이면 반복(에포크)당 한 줄씩 표현된다.
# 4. 모델을 이용합니다
print(model.predict(독립[5:10]))
# 종속변수 확인
print(종속[5:10])
# 모델의 수식 확인
print(model.get_weights())
모델을 쓴다.
확실히 빼주셔서 감사드릴 것도 있고, 아쉬운 것들도 있었다. 중요한 건 유튜버가 뭘 뺐느냐가 아니라 내가 앞으로 뭘 더 공부해야할 지에 대한 개괄을 얻었다는 것이다. 간단히 정리하자면
- Loss Function과 Metric Function의 차이점
- F-Value를 구하는 방법과 P-Value
- Cross Entropy Error 의 구조와 작동 방식
- 인공신경망의 구조(퍼셉트론, Layer, Input, Dense)
이렇게 되겠다. 1월 4일 전까지 파이팅 하자!
'언어영역 > Machine Learning' 카테고리의 다른 글
TensorFlow101-14~16 Sigmoid와 Softmax의 차이점 (0) | 2021.01.02 |
---|---|
TensorFlow 101-13 회귀모형 인공지능의 원리 (0) | 2020.12.31 |
TensorFlow 101 공부 시작! (0) | 2020.12.26 |
머신 러닝 (①) 필기 (0) | 2020.12.26 |
머신 러닝 (①) 교양 ver. 후기 (0) | 2020.12.26 |