ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [생활코딩 - 머신러닝 야학] 텐서플로우 day 3,4
    공부일기/머신러닝 야학 2020. 8. 25. 22:22

    https://opentutorials.org/module/4966

     

    1 - 10. 보스턴 집값 예측

     

     

    1 - 11. 수식과 퍼셉트론

    13개의 입력으로 부터 한개의 출력을 만들어내는 구조를 만든다. 한개의 출력을 만드는 구조의 완전한 표현은 y = w1x1 + w2x2 + ... + w13x13 + b 수식이다(예제 기준). 컴퓨터는 입력되는 수식의 y와 x를 보고 w와 b를 찾게 된다. 뉴런이 실제 두뇌세포의 이름이면, 이 뉴런역할을 하는 모형의 이름을 퍼셉트론이라고 한다. w는 가중치, b는 편향이라고 부른다. 

     

     

    1 - 12. 보스턴 집값 예측(실습)

    # 파일 읽어오기
    파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/boston.csv'
    보스턴 = pd.read_csv(파일경로)
    
    # 모양 확인하기
    print(보스턴.shape)
    
    # 독립 변수와 종속변수 분리 후 출력하기
    독립 = 보스턴[['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax',
           'ptratio', 'b', 'lstat']]
    종속 = 보스턴[['medv']]
    print(독립.shape, 종속.shape)
    
    
    # 모델 만들기
    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')
    
    # 학습 시키기
    model.fit(독립, 종속, epochs=1000, verbose=0)
    model.fit(독립, 종속, epochs=10)
    
    # 예측 하고 비교하기
    model.predict(독립[0:5])
    종속[0:5]
    
    # 수식 구하기
    model.get_weights()

    데이터를 읽어오고, 독립 변수와 종속 변수로 나눈 후 모델을 만들고 학습시킨 뒤 예측하고 비교하는 과정은 앞서 배운 레몬에이드 예제와 같았다. 다만 다른 부분은 보스턴 예제의 경우 원인이 되는 독립 변수가 13개나 된다는 점이었다. 그래서 그런지 로스율이 24이하로 잘 떨어지지 않았고, 레몬에이드 예제 만큼이나 정확하게 예측이 되질 않았다. 강의에서도 회귀에서 정답률을 100%까지 올리는건 거의 불가능하다고 했다. 아마 다양한 모델들을 결합해야 그나마 가까이 갈 수 있지 않을까 싶다.

     

     

    1 - 13. 학습의 실제

    라이브러리를 사용해 컴퓨터가 학습하는 과정을 신기해하고 있을 때 워크북을 통해 어떤 과정을 거치는지 작게나마 예측해볼 수 있었다. 초기 설정값으로 로스율을 구하고 미분을 해서 로스율을 줄여나가는... 과정이었는데 이걸 스스로 학습(물론 코딩이 돼있는 부분이지만)해서 값을 줄여 나간다는 게 다시 한 번 신기했다. 

     

     

    1 - 14. 아이리스 품종 분류

    종속 변수가 숫자이고 양적데이터로 구분되면 회귀모델을 사용하며 종속 변수가 문자나 이름이고 범주형데이터로 구분되면 분류모델을 사용한다. 

     

     

    1 - 15. 원핫인코딩

    범주형 데이터를 1과 0의 데이터로 바꿔주는 과정을 원핫인코딩이라고 한다. 딥러닝 모델을 사용하기 위해서는 모든 범주형 모델을 원핫인코딩 해줘야 하며 이 때 사용 되는 코드는 pd.get_dummies() 이다. 이 코드는 데이터 내의 범주형 데이터만 골라서 전부 원핫인코딩된 결과를 만들어 낸다. 다시 종속변수와 독립변수를 분리하면 데이터의 준비는 끝난다.

     

     

    1 - 16. softmax

    비율로 예측하기 위해 activation 활성화 함수 중 분류모델의 sotfmax 함수를 사용한다. sotfmax() 함수로 수식을 감싸게 되면 0과 1사이의 값을 받게 된다. compile하는 부분에서 metrics를 사용하게 되면 정확도를 나타내주는데, 이는 사람이 보기 더 편하게 만들어 준다. 

     

     

    1 - 17. 아이리스 품종 분류(실습)

    # 머신러닝을 위한 라이브러리 불러오기
    import pandas as pd
    import tensorflow as tf
    
    # 데이터 불러오고 읽기
    파일경로 = 'https://raw.githubusercontent.com/blackdew/tensorflow1/master/csv/iris.csv'
    iris = pd.read_csv(파일경로)
    iris.head()
    
    # 분류를 위한 인코딩함수 추가 및 확인
    incod = pd.get_dummies(iris)
    incod.head()
    
    # 독립변수와 종속변수 나누기
    in_v = incod[['꽃잎길이', '꽃잎폭', '꽃받침길이', '꽃받침폭']]
    de_v = incod[['품종_setosa', '품종_versicolor', '품종_virginica']]
    
    # 모델 만들기
    X = tf.keras.layers.Input(shape=[4])
    Y = tf.keras.layers.Dense(3, activation='softmax')(X)
    model = tf.keras.models.Model(X, Y)
    model.compile(loss='categorical_crossentropy', metrics='accuracy')
    
    # 학습하기
    model.fit(in_v, de_v, epochs=10)
    ## 학습할 때 accuracy만 보게 되면 오르지 않는 경우도 있으나 loss값이 줄어드는 것을 확인하고 
    ## 몇 번 더 학습을 시키키다 보면 accuracy 값도 올라가는 것을 볼 수 있다.
    
    # 모델을 이용해 예측이 맞는지 확인하기
    model.predict(in_v[-5:])
    print([de_v[-5:]])
    
    # 수식 구하기
    model.get_weights()

     

     

Designed by Tistory.