머신러닝 & 딥러닝

Binary Classification문제 y값이 0or1(False or True를 (기준조건문).astype('int')로 squarshing)로 나오는 문제였다.

이번에는 Mulit-class Classification문제로서, 가장 기초적인 예가 categorical한 상품 분류(의류 / 가전제품/ 의약품)에 대한 것이다.

먼저 그림으로 살펴보자.

image

위 그림과 같이,
Binary classification문제( 0 or 1) 해결을 위해 만든 Single-Layer Neural Network를 똑같이 유지한 상태(input이 x1,x2,,xn,1로 1개)에서
카테고리 수만큼 h(x), L(y,h(x)), J(w,b) = Output를 만든 뒤, 각각의 Output( 0or1 ) 가운데  가장 높은 값을 선택하면 되는데,
실제 그라디언트 디센트 알고리즘을 태울 때는,
(1) y값(정답 0 or 1 or 2)을 One-hot-encoding( np.eye(3)[y] )을 통해 [1,0,0] [0,1,0] [0,0,1]형태로 y_hot 만들어놓고
(2) y_predict_hot까지를 [ 0.4, 0.9, 0.8]형태의 확률로 예측하게 만든다.
(3) w 업데이트에 있어서는 classification용 Log씌운 Loss function인 L(y,h(x))의 편미분결과(전과 같음)의  평균을 이용하는데
    이 때, y_predict -y가 아닌, 아직 롤백전인 one-hot-coding 형태[ , , ]인 ( y_predict_hot - y_hot )을 이용한다.
    만약 X.T.dot()을 썼다면, .mean()대신 / X.shape[0]을 나눠준다.
(4) accuracy를 구하기 위해서, argmax(axis=1)을 이용하여 y(정답)형태로 롤백 한 y_predict 와 y를 비교한다.
(3) 거기에 정답의형태로 롤백하기 위해,

image

Multi-class Classification에 있어서, 불러온 데이터로 그라디언트(SL.N.N)를 태우기 전에,
전처리해줘야할 것이 있는데 y(label)을 --> identity matrix를 이용한 One-hot encoding 과정이 필요하다.

  1. y(label)칼럼이 0, 1, 2 순서로 시작하고
  2. y의 종류(중복없이 갯수)만 알고 있다면, 바로 변환시킬 수 있다.
    image


또한, one-hot-encoding된 y값을 예측한 y_predict_hot은 .argmax(axis=1)을 통해 정답형태로 롤백해줘야 accuracy를 구할 수 있다.

image

실습


로컬 노트북 파일

임시요약

Multi-class classification

1) 데이터를 퍼올 땐 feature들의 데이터를 대문자 X, label 데이터를 소문자 y를 이용해 받아온다.

2) y값은 np.eye()를 통한 one-hot-encoding으로 변형시켜주어야한다. ---> y_hot

- y는 0,1,2 순으로 정답이 나와있어야 한다.
- y의 unique한 len을 알고 있어야하며, 그것을 np.eye(  )[y]인자로 넣어주어야한다.

3) y_predict_hot은  [ one-hot-encoding 된 y]의 형태로 학습된 y_hot에 대해서,  w와 b를 예측하므로,
   y_hot 의 1개 데이터가 = [ 0, 1, 0] 이었다면 -----> y_predict_hot = [ 0.3, 0.9, 0.5 ]형태로 나온다.

4) y_predict_hot은 argmax(axis=1)을 이용하여, y형태로 롤백된다. ---> y_predict
- argmax(aixs=1)은 3개 중 가장 높은 확률의 index를 산출해주는데, 그게 자동으로 가장 근접한 y(label)형태로 반환된다.

5) 반환된 y_predict와 y를 이용해서 조건문을 이용하여 비교하면, 150개 에 대해서 0 or 1로 나올 것이다. 그것의 평균을 정확도로 한다.

6) cost function의 편미분값으로 w를 업데이트 시켜주는 Graident 를 태울 때는, 아직 one-hot-encoding형태를 사용하여 차이를 구하는데
y_predict_hot - y_hot 으로 차이를 구한다.
- w의 경우, dot product를 이용했다면 --> .mean()대신 X.shape[0]을 통해 데이터의 개수로 나누어서 평균을 적용시킨다
- b의 경우, mean(axis=0)을 통해 150개 데이터에 대한 세로줄의 평균을 구해서 업데이트 한다.

7) y_predict 식의 검증이 끝났다면, 기존 데이터에 새로운 칼럼으로 추가해준다.



my) y는  np.eye( 라벨의 갯수) 로 원핫인코딩 --->  y_predict는 y_predict_hot에다가 argmax(axis=1)로 롤백




실습 - MNIST

어떤 문제를 Single-Layer Neural Network로 풀기로 마음 먹었다면,
X(feature)와 y(label) 데이터를 가져온 뒤,
그림을 그려봐야한다.!!!

image

image


실습 노트북 파일

-> MNIST( multi-classification)을 Single-Layer N.N. 버전으로 풀기 복습 완료(로컬 노트북)

저번시간에 언급한 Single-Layer Neura Network에 대한 기본 알고리즘인 Gradient Descent를 공부했다.

전체적으로 Single-Layer Neura NetworkPerceptron과 같은 개념으로 보고, 아래와 같이 그림으로 나타낼 수 있다.
게다가 고전 알고리즘인 Linear Regression도 비슷한 개념으로 생각하자.

image

이러한 SLNN는 사실 Regression문제을 위한 Single-Layer Neural Network다.

그러면 Regression문제 이외에 다른 문제가 있을 까?


Regression문제 과 classification문제

기본적으로, 주어진 Data를 보고 Regression문제인지 Classification문제인지를 먼저 정의해야한다.
image

위 표를 참고하여, 우리가 받은 Data의 label높고 낮음이 중요-> Regression문제
위 표를 참고하여, 우리가 받은 Data의 label이 같냐 다르냐가 중요-> Classification문제

전통적인 알고리즘인 리니어, 로지스틱 회귀와 관련해서는

Regression알고리즘을 ---> Regression문제에 적용하여 푼 것 : Linear Regression
Regression알고리즘을 ---> Classification문제에 적용하여 푼 것 : Rogistic Regression


Binary Classification문제

Binary Classification문제는 y값의 범위가 0 or 1이다.

그러나 저번시간에 배운 Regression알고리즘(SLNN-gradient descent)h(x)(y_predict)값이
 -무한대 ~ +무한대까지 나오므로 binary classification문제에 적용을 할 수 없다.

그러므로, 저번시간의 Regression알고리즘인 SLNN-gradient descent을 ---(???)-----> classification알고리즘으로 바꿔주어야한다.

  • Regression알고리즘에서는 h(x)의 값으로 -무한대 ~ +무한대까지 나왔다.
    이제 중간에, 이 값(-무한대~+무한대)를 받아서 ---> 예측값(h(x), y_predict)값이 0 or 1이 나오도록 으깨주는 새로운 함수 f(x)를 집어넣는다.
    이러한 f(x)squarsh function이라고 하며, y값(h(x), y_predict)가 0or1으로 정의되므로
    binary classification문제를 풀 수 있는 classification알고리즘이 된다.
    image

  • Squarsh function로 0 or 1이 나오도록 으깨어서 Regression - SLNN알고리즘에 적용시 ----> classification알고리즘이 된다.
    하지만, 이 Squarsh function은 반드시 미분가능해야한다. ->
    그래야 f(x)로부터 정의되는 h(x), L(y,h(x)), J(w,b) 편미분하여 -> w를 업데이트 해 줄 수 있다.
    그러므로 Squarsh function의 전제조건은
    • x가 뭐가 들어가는 간에, 0과 1이 나와야한다.
    • 미분가능해야한다.
      그림2

  • 이 전제조건(미분가능하고 0or1이 나오는)을 만족하는 Squarsh function이 바로 f(x) = Sigmoid이다.

    {\displaystyle S(x)={\frac {1}{1+e^{-x}}}={\frac {e^{x}}{e^{x}+1}}.}

    def
    sigmoid(x):
         return 1 / ( 1 + np.exp(-x) )

    식은 아래와 같고, https://www.desmos.com/calculator 에서 그려면 그래프는 아래와 같다.
    image
    x가 무엇이 들어오든 0과 1사이로 Squarsh한다.
    soomth하므로, 미분이 가능하니 --> h(x), L(y, h(x)), J(w,b)모두 미분가능하다.

여기까지 요약해보면,
저번시간에는
Regression문제(h(x), y예측값이 -무한대+무한대)를 푸는 Single-Layer Neural Network가
저번시간에 학습한 Gradient Descent이다.


이번에는
Classification문제(h(x), y예측값이 0or1) 를 푸는 Single-Layer Neural Network를 짜기위해서
Gradient Descent 알고리즘 중 h(x)값이 0or1이 나오도록 미분가능한 sigmoid를 h(x)전에 f(x)로 씌워준 시킨 뒤, 합성해주었다. h( f(x) )

하지만 여기까지만 하면 문제가 발생한다.

  • sigmoid를 입힌 Loss function은 그래프상으로 울퉁불퉁해져서, 접선의 기울기가 0이지만 happy하지 않는 또다른 지점(Local obtimer)이 생겨, 정답(y_predict - y = 0)이 아님에도 불구하고 w를 업데이트 안시켜주는 현상이 생길 수 있다.
    image
    이렇게 울퉁불퉁한 h(x)를 graident로 태우면, L(y,h(x))는 느리거나 수렴하지 않을 수 있다.

  • sigmoid에 있는 e^x 때문에 결국에는 울퉁불퉁해진다. 이 울퉁불퉁한 것을 없애서 happ한 Loss function을 만들어주기 위해
    sigmoid에 Log를 입혀 e^x를 없애 울퉁불퉁함을 없애준다.
    그렇다면, sigmoid가 들어감에도 불구하고 Loss가 soomth해지기 위해 Log가 들어가야하므로
    Log가 들어가는 새로운 Log function을 정의해보자.

    즉, Binary Classification문제(0or1)을 풀기위한 Single-Layer Neural Network 알고리즘으로서
    기존의 Graident Descent에서 sigmoid를 입힌 h(x)를 정의하고, 울퉁불퉁한 부분을 위해 Log를 입힌 Loss function
    그게 Cross-Entropy 이다.
    image


  • Cross-entropy의 경우에도, 역시 Loss function은 0일 때, happy / 무한대일때, unhappy하다.
    증명은 아래 그림을 참고하자.
    image


여기까지 요약하자면,

classification문제에서도 사용할 수 있는 Gradient Descent(SLNN)알고리즘을 만들기위해

1. y값이 0or1이 나오도록 squarsh function인 sigmoid를 입히고

2. 울퉁불퉁하여 미분이 되지않는 것을 방지하기 위해 Log를 입힌 Loss function이 cross-entropy이다.

이렇게 만든 Loss function은 Graident를 태울 수 있다.


우리가 실제로 쓰는 함수는 Loss function이 아니라 cost function이다.
cross-entropy(모든loss function)에서 0 or 무한대가 나오는 것을 증명을 통해 확인할 수 있는데,
만약 우리의 데이터 중에 하나라도 unhappy한 데이터로 인해 무한대가 나온다면,
전체 데이터에 대한 loss function인 cost function이 무한대가 나올 것이다.

그렇게 된다면 너무 불합리한 알고리즘이 될 수 있다.

실제 코드에서 cross-entropy를 사용할 때는,
예측값y_predict에서는 0 or 1이 나오는 것이 아니라 확률로 나온다.
그리고 그 확률을 0.5이하시 -> 0으로, 0.5 초과시 -> 1으로 분류해버릴 것이다. 이러한 것을 클리핑or쓰레숄더라고 하는데,
이렇게 한다면, Loss function에서는 y가 0or1만 가지게 될 것이므로, 무한대의 문제가 안생긴다.


  • 실제로 Graident Descent를 돌리기 위한 w를 업데이트 하기 위해서는 cost function 편미분( 결국에는 loss function편미분)을 한 것이 필요하다.
    - 그 과정에서는 Loss function의 편미분을 구한다.
    - 그 과정에서는 h(x) = sigmoid( z(x) )의 미분이 들어간다 * sigmoid 미분 = sigmoid( 1 - sigmoid )
    - Binary Classification문제를 풀기위해만든 SLNN의 알고리즘loss function인 Cross-entropy 편미분 결과는
      Regression문제를 풀기위한 SLNN의 알고리즘(Gradient Descent)의 loss function의 편미분 결과와 동일하고 코드도 같다.
      imageimage
    image
    image


실습

실습한 로컬 노트북 파일




이론

image

  • 머신러닝이란?

    - 우리가 쓰기위해 만든 보편적인 알고리즘

    - 한국어로는 기계학습이라한다. 영어에 익숙해야져야한다. 그래야 자료를 많이 볼 수 있따.

    - 머신러닝은 크게 3가지로 갈린다.

    • Supervised learning(지도학습)
      - label(암인지 아닌지)를 맞추는데 도움을 주는 것을  feature(성별, 나이, 혹은 픽셀)라 한다.
      - x(feature) 과 y(label)이 있다. 즉, 맞추어야하는 정답에 해당하는 y값(label)이 있으면 supervised learning으로 풀어야한다.
      맞추어야하는 정답에 해당하는 y값(label)이 없다면  unsupervised learning으로 풀어야한다.
      - 현장(일상생활)에서는, unsupervised learning이 많이 쓰일 것이다.
        왜냐하면, supervised learning하나의 feature당 하나의 label이 딱딱 있어야한다.
        하지만, cctv/블랙박스의 많은 사진들 중 각각의 사진마다 하나의 사람을 태깅할 수 없기 때문이다. 즉, x와 y가 정확히 태깅되어있는 데이터를 쉽게얻을 수 없기 때문이다. 반면에 unsupervised learning은 각각의 feature에 해당하는 label이 있어야하는 것이 아니기 때문에, 상대적으로 알고리즘을 적용하기 쉽다.
      - 그러나 실제(현장)로는 supervised learning이 많이 쓰인다.  연구하기도 쉽고 성과가 잘나오기 때문이다.
        즉, 일상생활에서는 unsupervised learning이 많아야하지만, 연구와 실제(현장)는 supervised learning가 많이 쓰이고 있다|
        하지만 요즘 연구의 추세는 unsupervised learning에 대한 연구를 많이 시도하고 있다.
      - 간단히 말하자면, y값이 있으면 supervised / 없으면 unsupervised다.
        연구를 위해서 말해보자면, y값(supervised)이 있어서 잘했는지 못했는지 가이드를 해주는 컨셉이 supervised이고,
        y값이 없는데도 스스로 가이드해서 학습이 가능한 것은 unsupervised다.

    • 1. Supervised learning(지도학습)의 분류

      •  Tree 모델(Decision Tree)
      • Regression 모델 : 이게 딥러닝의 main
        • Linear Regression
        • Logistic Regression
        • support vector motion
        • Artficial Neural Network(ANN, 인공 신경 망)
        • CNN
        • RNN
    •  2. Unsupervised learning(비지도학습)

         - x(feature)만 있고 y(label)는 없다. 
         - x와 y가 정확하게 맞추어져있는 태깅되어있는 반드시 없어도 되므로 적용하기 쉬우나.. 연구에 있어서는 supervised가 많음
            y가 많으므로. 그러나 지금은 un~으로 가는 중 왜냐하면
         - 가이드가 지도해줄 y값이 없는데도 불구하고 스스로 아이가 학습하는 것. 아이가 중력/가속도를 스스로 알아낸다.
    • 3. Reinforcement learning(강화학습) :

         - 알파고가 아니면 다룰 일이 없다. 앞으로 응용할 때도 없음. 응용할 곳이 별로 없다.


  • 딥러닝?

    - 마케팅적인 요소가 적혀있다.  그래서 연구쪽에서는 인공신경망이라고 말한다.

    • - 딥러닝이란? 머신러닝 알고리즘(3)Supervised learning Regression모델 을 먼저 알아보자.
         1) Linear Regression 모델-  y값이 -무한대 ~ +무한대의 범위를 가지는 Regression문제를 푸는 알고리즘,
         2) Logistic Regression 모델 - y값이 0 or 1이 나오는 Classification문제를 푸는 알고리즘,
           - 1)과 2)는 전통적인 Regression모델이다. 이제 3)부터는 요즘시대에 말하는 딥러닝 알고리즘을 담고 있는 Regression모델
         3) Atficial Neural Network(A. N. N) - 사람 뇌의 Neural Network를 모방한 컴퓨터의 알고리즘 모델
           - A.N.N.은 가장 처음 나온 Single-Layer N.N. -> Multi-Layer N.N. -> Convolutional N.N. -> ... 로 발전하였다.
           - A.N.N. 을 사용하여 Regression 문제와 Classification 문제를 푸는 것이 목표이며
            A.N.N. 중 hidden-Layer가 3개이상 들어간 Multi-Layer N.N. 로  Regression/Classification문제를 푸는 것딥러닝이라 한다.
              1) y값이 -무한대 ~ +무한대의 범위를 가지는 Regression문제
              2) y값이 0 or 1이 나오는 Classification문제
    • - 이번시간에는 하나인 Artificial Neural network 중 가장 간단한 Single-Layer Neural Network를 먼저 공부해보자.


  • Artficial Neural Network


이번시간엔 A. N. N. 중 가장 간단한 Single-Layer Neural Network를 배울 것이다.
- 딥러닝, 알고리즘의 특성을 나타낼 수 있는 가상의 가장 심플한 dataset을 만드는 것이 중요하다.
  ANN의 datasetSupervised Learning으로서 기본적으로 featurelabel이 기본적으로 필요하다
- ANN은 Supervised Learning으로서 feature와 label이 있다고 했다.
- 실습은  1) Single Layer Neural Network에 관련된 RandomSearch / h-step Search / Gradient Descent 모델을 학습할 것이다.


image
image

실습 - 생략

로컬 노트북에 저장된 파일

이론2 - Gradient Descent 자세히 알아보기

머신러닝 3가지 중에 Supervised Learning은 x들과 더불어 y(답)이 있는 학습방법이다.

그 중 Regression 모델인 ANN, RNN, CNN, 선형회귀, 로지스틱회귀 등이 있지만, 그 중 ANN을 다루고 있다.

  • Artficial Neural Network
    1. Single-Layer Neural Network
    2. Multi-Layer Neural Network
    3. Convolutional Nerual Network

Single-Layer Neural Networkperceptron은 동일한 개념이라고 생각하자.
image

  • y(답)과 x(feature들) 있는 어떠한 데이터가 주어졌다고 가정하자. (x는 여러개 일 수 있지만 하나라고 가정)
    이러한 데이터는 Supervised learning을 적용할 수 있고, 그 중에 Regression 모델을 쓴다고 했을 때,
    A.N.N 중 가장 간단한 S.L.N.N.로 Regression문제를 풀 때는, feature에서 -> label예측값을 도출해내는 weight와 bias를 구해야한다.
    이러한 과정을 Optimalization이라고 한다.
    이러한 최적화 기법에는 여러가지 방식(Random Search, h-step Search, Gradient Descent)이 있지만,
    그 가운데 가장 효율적으로, A.N.N.을 학습시켜 weight와 bias를 구하는 알고리즘Gradient Descent이다..
    - 기본적으로 앞으로 학습하는 모든 A.N.N.은 이 Gradient Descent를 사용해서 학습시킬 것이다.
    - Gradient의 핵심은 loss, cost function을 편미분하여 w와 b의 업데이트량을 구할 수 있는 알고리즘이다.
    - 제대로 학습되었다면 좋은w(배점, weight)와 b(bias)를 찾아내서 -> 다음data에 대한 y를 예측할 수 있다.
  • 이러한 S.L.N.N.로서 문제를 풀 때, w와 b를 잘 찾아냈는지를 나타내는 함수Loss function이다.
    그리고 y_predict(예측값)에 해당하는 함수가 hypothesis function이다
    Loss function이 하나의 데이터에 관한 얘기라면, Cost function전체 데이터에 관한 Loss function이다

  • 즉, 답을 알고 있는 data를 보고서, w와b를 예측하여, 다음의 답을 예측할 때
    Single-Layer Neural Network를 사용해서 풀고자 한다면,
    • 가장 먼저해야할 것Hypothesis function -> Loss function -> Cost function을 정의하는 것이다.
    • 다음은 Cost function을 w에 대해 편미분하여 -> 더 나은 w(점프거리)를 대략적으로 알아서 업데이트 시켜주는 것이다.
      - 결과적으로는 Loss function만 편미분 해주면, 알아서 나온다.
    • 마지막으로 epoch-loop 수 learning_rate를 통해  좀더 정확하게 w를 업데이트 해준다.

  • Loss function(y, h(x)) -( w에 대한 2차함수) 편미분하여
    Gradient Descent 알고리즘 속에서 갱신해줘야할 w의 방향성과 양을 대략적으로 알 수 있다고 했는데
    그림으로 표현해보면 아래와 같다.
    - L(y,h(x))를 편미분한 것이 w의 점프거리 갱신량과 대략적으로 비슷하다
    - 그래프상 접선의 기울기0이라면, 갱신할 것도 없이 w와 거의 같다. 기울기가 가파르다갱신량이 많은 안좋은 경우다..
    - 정확한 w의 갱신량은 epoch을 통한 loop와 learning_rate가 결정해 줄 것이다.
    image

    Loss function에 대해 정리하자면
    Regression문제를 - S.L.N.N.로 이용해서 풀 때,
    정의한 Loss function( L(y,h(x) = 1/2 ( h(x)-y)^2 )는  0이면 error가 0이라서 좋고, 무한대로 나오면 error가 큰 안좋은 경우다
    그러므로 w를 계속 업데이트 시켜서 h(x)-y = 0이 나오도록 만들어야 하는데,
    Loss function의 편미분한 값w를 찾아가는 점프거리를 반복해서 갱신해주는 방향성과 양(w변화량)을 의미한다.
    그래프상으로 접선의 기울기이다.

    참고) Regression문제에 쓰이는 Loss function을 MSE(mean square error) = 1/2 ( y_predict - y)^2 이라 한다.
    앞으로나올 classification문제에 쓰이는 Loss functiond을 Cross-entropy라 = -y*log(h(x)) - (1-y)log(1-h(x)) 한다.

  • Cost function은 결국에는 Loss function을 미분하면 되지만, 증명해보자.
    image

  • 결과적으로 코드상의 매칭은
    h(x) = wx+b  ---> y_predict
    image

    L(y,h(x))의 편미분  ---> w 의 변화량(점프거리 갱신)의 대략적인 것
    image

    J(w,b)의 편미분 ---> w의 변화량(learning_rate = 람다 제외)
    image



실제 데이터를 S.L.N.N.로 분석해보기

실습 노트북(로컬용)

어떠한 데이터를 보고서, label 칼럼에 대한 label(predict) 칼럼을 생성할 것이다.
예를 들어, 보스턴 집값에 대한 데이터를 가지고, 집값을 예측하는 알고리즘을 Gradien Desecent(Single-Layer Neural Network)로 만들어서 예측하자.

  1. numpy와 pandas 패키지를 import한다.
  2. Dataset데이터프레임으로 만든다.
    - 데이터 중에 칼럼명만 나열된 칼럼이 있다면, 가져와서 columns인자로 같이 DataFrame으로 만든다.
    - 데이터 중 target인 label데이터가 따로 있다면, label만 받아와서 DataFrame의 칼럼으로 추가해준다.
    - 만든 데이터는 shape와 head()를 확인한다.
  3. Gradient Descent 기본 코드를 가져와 적용해보자.
    image

    - 데이터의 각 feature에 해당하는 칼럼들을 x1, x2로 받자. 각 데이터 수만큼 리스트로 들어갈 것이다.
    - for문에 들어가기 전에,
      num_epoch과  learning_rate는 기본적으로 시작
      w는 feature수만큼 랜덤균등분포로 -1.0 ~ 1.0으로 생성
      b는 1개만 랜덤균등분포로 -1.0 ~ 1.0으로 하나 생성
    - for문 안에서는 돌면서 더 해피한 값으로 갱신들어야 할 것인
      y_predict 계산식이 있다. feature수만큼 수정해준다.
      error(예측값- 정답에 절대값씌운 평균)식은 그대로다.
      if error < 기준error값: break의 기준error값도 수정해준다.
      *기준error값은 해당 데이터의 y(label)을 기준으로 생각해준다.
      *만약, 집값 예측이라면, error기준이 5로 주어도, 5000달러(500만원)으로서 에러범위로서는 충분하다.
      if epoch 갯수별 print는 0 : 해당epoch과 1: error 수치만 띄워주도록한다.
      w값과 b 갱신식을 만들어준다. feature수에 맞게만 만들어주면 된다.
    image

  4. 만일 epoch 100, learning_rate 100으로 시작했는데, error가 줄지않고 늘면서 발산한다면,
    - 가장 만만한 것은 learning_rate를 줄여주는 것이다.
      *너무 줄이면, w가 없데이트가 안됨->y예측값 그대로->error도 그대로-> 발산 그대로-> 올려줘야함. 다른 것을 수정하더라도 error가 멈쳐있으면 learning_rate를 올려줘야함.
    - 1.0 -> 0.1 ->  0.01 -> ...-> 0.00001 식으로 나누기10씩 소수점을 넣어준다.
    - 0을 늘려줬는데, 발산하면 다시 0을 줄인다.
    - 그다음 마지막 자리수를 1->2->3으로 늘여준다.
    - 그다음 epoch을 10000, 100000 씩으로 늘여준다.
    - epoch만큼 print 단위와, 자리수배열을 예쁘게 만들어준다.
      
    * 딥러닝은 data에 따라 configuration(hyper-parameter)이 천차만별로 바뀌기때문에 tensorflow코드만 가져온다고해서 실행이 되지않는다. 그러므로 이론을 자세히 공부한 상태에서 응용이 가능하다.

  5. 이제 원하는 기준error수준으로 label이 예측가능해지면, 결과값을 뽑아낸다.
    - y_predict식을 가져와서 예측값을 데이터수만큼 확인해본다.
    - dataFrame을 .copy()해서 result라는 새로운df에 옮겨담는다.
    - y_predict를 데이터의 label예측 칼럼(predict)으로 추가해준다.


Single-Layer Neural Network도 실전에 이용할 수 있다.
real데이터에서도 어느정도 성능이 보장된다.


dot product

지금은 13개의 feature밖에 안되지만, 만약 feature가 300개가 넘어가면 y_predict 식을 작성하기가 쉽지가 않다. 그 때 쓰는 것이 dot product이다.
image

위의 그림를 보면, y_predict 계산식에서 가로는 x, 세로는 w가 될 것이다.

  • feature의 수만큼 생성했던 w를, 한번에 생성해도 된다.(size=13인자)
  • X에서는 feature들만 모아놓았기 때문에, y_predict = X(506 ,13).dot(w(13,1))+b 로 한번에 계산된다.
  • w를 업데이트해줄 때, 기존은  w = w - learning_rate * ( (y_predict - y)*x).mean()
    - feature 데이터만 모아놓은 X에 dot()을 적용하여, 순서대로 앞의 y_predict-y와 곱해져야한다.
    - X(506, 13)를 X.T로서 (13, 506)로 바꾸고,
    - y_predict - y(506, 1)을 dot하여 (13, 506)dot(506,1) -> (13,1)의 w데이터가 각각 업데이트 될 것이다.
    - 이제 .mean()의 개념을 도입하기 위해서, for문전에 num_data = X.shape[0]을 통해 X의 (506, 13)중 데이터의 수를 의미하는 506을 가져와서 나눠준다.

  • 만약, 공식상에서 나온 행렬의 곱에 dot product를 적용시킬 때, shape가 맞지 않아서 계산이 안된다면,
    1) 뒤에놈을 .T로 변형시키고
    2) 그놈을 앞으로 빼서 .T.dot( ) 해주면 된다.

    예를 들어, X(506데이터, 13feature수) * w(feature수13, output수 1)는 바로 X.dot(w)로 적용이 되지만
    w의 업데이트량을 의미하는 y_predict - y ( 506, 1 ) * X(506, 13) 의 계산에서는
    1) X.T(13, 506) -- y_predict-y(506, 1) 로 뒤에것을 T.로 뒤집고
    2) X.T.dot( y_predict -y ) 로 앞으로 빼서 dot을 적용시킨다.


image

데이터분석 공부나 한의학 임상에 대해 더 배우고 싶어서 서울에 올라온지 얼마 안되서

큰 컨퍼런스가 열리는 것을 확인하고 참석을 위해 사전등록을 했다.

image
image
image

첫날은 인공지능과 디지털 헬스케어에 대한 전체적인 컨퍼런스이고

둘째 날 부터는 워크샵들이 관심이 갔다.

먼저, 강연 듣기전 각 세션에서 업체들 이 소개하는 부스를 살펴보았는데,

  1. 딥러닝을 통해, 사람들과 가위바위보 하는 팀
  2. 손으로 드론을 제어하는 팀 (가장 흥미..진진)
  3. VR체험

순으로 인기가 많았던 것 같다.
image

imageimage

image


각종 인사들의 축사 뒤에, 본격적인 첫날 강의가 이루어졌다.

image

14:10 ~ 14:30 서울아산병원, 김남국 교수

애니악이라는 컴퓨터 계산기에 네트워크가 붙으면서 정보처리기가 되었다.

거기에 CONNECTIVITY가 붙어서 자동화기기가 되었다.

그 과정에서 보안 등이 문제가 되면서 블록체인이 수면위로 떠올랐다.


헬스케어와 관련된 빅데이터는 항상 논란이 되었다.

CLINICAL DATA는 전체 데이터중 10%

더 나아가 GENOMIC EVULOTION에 의해 GENOMICS DATA는 30% 정도가 된다.

데이터도 의료환경도 개발되고 있다. 이런데에 있어서는 효율적인 R&D가 중요하다.

- IoT 체온계 -> kinsa라는 미국 스타트업에서 3주간의 데이터를 분석하여 influenza 예측이 가능하다
- Google Trends -> 마찬가지로 3주간의 데이터를 가지고 influenza 예측이 가능하다
- 새로운 정보에 대해서는 조심스러운 접근이 필요하다


IBM의 opportuniy를 보면
- 8 trillion exam 중에 2trillion 은 wastes in healthcare industry 이다.

우리나라도 Vuno - Bone aging - > 비보험수가로서 인허가가 나서 수익을 가질 수 있는 정도이다.

AI+Hearthcare의 CAGR : 연간42% 성장률을 보인다.


Digital Hospital
- 의사의 일만 줄인것 이 아니라 응급의료 파견 서비스 등을 통해 암환자 입원역략 60%증가, 응급시 ㄹ대기자 25%감소 수술대기자 25:감소

EMR + IoT -> 의사(대부분은 간호사)의 일이 감소한다.
- 종이차트 -> 사무실에서 EHR에 일일이 수치 입력하던 것에서
- 데이터를 환자의 손목밴드에서 자동업로드 등의 방법
- 아이들의 wareless band를 발목에 착용하여 체온상승 관찰

Patient Empowerment 관점에서
- 환자들이 똑똑해짐. 환자를 능동적인 객체로 끌여들여 진찰할 필요가 있다.
- IoT, 블록체인 등을 relocation하자

구글은 2008년 의료데이터를 모으려했으나 실패
- 병원에서 환자에게 주는 benefit / 동기가 부족
- 환자는 정보관리의 능력이 없음.

우리나라의 Mediblock은 시도를 했으나,,
- 결국은 데이터를 모아야하는데 기술력 부족
- regid한 데이터이므로 암호를 잃어버리면 아무도 acess 불가

딥러닝
- 데이터 + 정답을 주면 expert 프로그래머가 멋지게 짜던 것에서
   이제는 딥러닝을 통해 컴퓨터가 프로그램을 짜고 예측한다.
- Better decision에서는 IBM의 왓슨이 가능하다.
- 챗봇을 통해 쉽게 의료지식을 물어볼 수 있다.

그러나 지금은 Medical Imaging에서 가장 포텐션이 크다.
- 지금은 보통 의사보다는 잘하지만, 아주 expert한 의사보다는 떨어지는 수준

DeepRadiology.com -> block chain power

AI apps Platform -> Philips, Siemen etc

병원입장에서 보면?
- 고사양 장비, 의사의 개입 등 많은 문제가 있다.
- 막상 현장에서 쓰고 있는 것은 거의 없다.

- 인간이 잘 못하는, 의사들의 잡일(응급판독, 수술후 제대로 되었는지 절단 여부)에 대해 인공지능이 하면 좀 더 잘할 것 같다.
- 인공지능(cnn)이 미리 판독하고, 의사가 판단하는... 수가가 없더라도 더 많은 진료를 할 수 있어 수가가 높아진다.
- Surgical Imaging field -> CT 등을 인공지능이 알아서 자르고 판독함
- Surgery Video -> 신경 접근 등에 대한 경고를 해준다던지... 이러한 기술
- 대장내시경도 왠만한 의사보다는 잘하지만, expert 보다는 잘 못하는
- Spine surgert에서 의사는 Two port endoscopy로 양손 중 한손으로 엔도스코피를 보고 있는데, 인공지능이 그 한손을 대체 해 준다면 혁신이 될 것이다.


다양한 Issue가 있다. 법적..윤리적.. 등
- FDA는 시범사업이 거의 끝나간다.
- FDA는 안저소견에 있어서, 의사를 도와주는 컨셉에서 -> 의사대신이 인공지능이 판단하는 식으로의 인허가가 제공되고 있다.

3분 진료 (환자의 설명부족)-> 15분 진료(의사의 효율부족)
- 3분 진료에 있어서, 환자에게 충분히 설명시켜줄 인공지능을 이용하는 방향으로 가야한다.


세션1.

정보통신 산업진흥원, 이준영팀장 - 4차 산업혁명 시대 정밀의료의 미래

- 우리가 원하는 의료서비스는? 의료질 향상과 의료비 감소

현 의료서비스의 아쉬움

  1. 보편적 의료의 한계
  2. 오진율 증가(암 오진률 61%)
  3. 의료서비스 질 저하
  4. 의료비 증가

해결책
-궁극적으로는 ICT(정보통신)이다.
-국내 병원 및 기업의대응

  1. 수도권 대형병원 중심으로 자체 유전체 연구소 개설 및 병원-기업간 공동연구 진행 중
    - 삼성SDS- 삼성아산병원
  2. 기업-병원간 협력
  3. IBM 왓슨 국내 병원 도입 현황
    - 가천대 길병원, 부산대병원, 대구대, 계명대, 건양대, 조선대, 화순전남대병원 도입

> 한국 만의 암환자의 유전특성에 대한 기술이 필요하다.

우리의 현실

  • 최고의 ICT역량 보유(HIS : 병원의 병원정보시스템 / PACS : 영상정보관리 시스템)


Iot + 의료 -> IoMT 개발 -> 정밀의료 네트웤 기반은 갖춘 상태다.

AI는 의료에 적합한 기술인가?

한국형 정밀 의료 서비스 : 닥터.앤서 : AI의사
- 빅5 포함 25개 병원 + ICT기업 19개 기업 참여 , 3년간 357억

8개 질환 단게별 지능형 의료SW(사진)
image

의료정보를 활용한 클라우드 기반 정밀의료 병원정보시스템 사업시간(17~19년)

뷰노.. 첫 식약청 허가.. 그러나 AI개발자의 고민도 많다.

서울아산병원 닥터.앤서 프로젝트 담당의 김영학 교수

K-DASH : AI기반 정밀의료 솔루션 추진단

25병원 + 19기업 = 병원기업 협력

한국형 정밀의료 서비스 -> 닥터앤서의 목표

  • 심혈관(심뇌혈관질환, 심장질환), 뇌(치매, 뇌전증, 소아희귀난치성 유전질환), 암(유방암, 대장암, 전립선암)을 중점으로 8개 중점질환 정밀의료 서비스개발
  • 모델링을 통한 환자질환 예측개발

현황

  • 21개의 SW이 목표
  • 3년간 357억 투입 예정
  • 올해와 내년에 3개의 SW에 대해 직접 서비스 예정
  • 대장암은 우리나라의 데이터가 가장 많다.
  • 세포진단을 통해 치매진단
  • 뇌전증(간질) 질환
  • 소아희귀난치성 유전질환은 유전체 데이터를 활용하는 것이 특징
  • 일찍이 없었던 협력.. 프로젝트..
  • 현재는 2개월 차..  내년에는 소프트웨어로 구현시범
  • 최초 클라우드 활용(안전, 효율적으로 여러병원이 참여)
  • SW기업은 총 17개 기업 ( 중견기업+스타트 기업)
  • 카카오 브레인과 클라우드 구축image

참여기업 예, VUNO

  • 문재인 대통령의 치매 국가 책임제
  • VUNO의 치매 분석 프로그램 -> 문서화
    image

삼성SDS 조일영, 이민영 수석

P-HIS : 정밀의료 병원정보시스템

클라우드 기반 병원정보시스템 (CLOUD-EHR)에 대한 시각

  • 기회 : 고품질 서비스, 초기 투자비용 절감, 강력한 보안
  • 도전 : 표준기능의 활용, 병원별 독립성 보장, 데이터의 활용성

데이터의 표준화, 구조화
-  수기 서식-> 서식생성기 -> 서식 생성을 통해 표준화


이상... 2쨋날 워크샵은 총무가 허락해주는 데로 결제해서 들어봐야지

+ Recent posts