분류 전체보기 (17)
[FLASK] 저장해둔 h5모델 불러오기
  • 9,600여장을 50epochs 만큼 4categorical 학습 모델을 h5에 저장해둔 것을 사용했습니다. 우리멍청이 
  • keras background는 tensorflow로 설정돼있습니다.

  import lib


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import io                                                         # 파일 경로 접근시 필요한 python 내장 라이브러리
from PIL import Image                                            # Python Imaging Library. 파이썬 인터프리터에 다양한 이미지 파일 형식을 지원,
                                                                # 강력한 이미지처리와 그래픽 기능 제공 오픈소스 라이브러리
import numpy as np
from flask import Flask                                            # python web framework 
from flask import request                                        # 웹 요청 관련 모듈
from flask import render_template, redirect, url_for, request    # flask에서 필요한 모듈
from flask import jsonify                                        # import JSON을 해도되지만 여기서는 flask 내부에서 지원하는 jsonify를 사용
from tensorflow import keras
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Flatten
from keras.layers.convolutional import Conv2D
from keras.layers.convolutional import MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator
from keras.utils import Sequence                                # 이 모듈이 없으면 사용자가 만든 generator에서 'shape'가 없다고 하는 에러가 발생할 수 있음
import matplotlib.pyplot as plt
 
cs


  • 짜깁기하면서 중복되거나 필요없으리라 생각되는 패키지들은 삭제했으나 더 추릴수 있으면 추려쓰시길 바랍니다.

  Flask 객체


18
app = Flask(__name__)
cs
  • flask 사용할때는 무조건 이 객체를 생성해줘야 합니다. 이름도 웬만하면 app을 쓰는편입니다.

  Flask router 설정


19
20
21
22
23
24
25
26
27
28
29
30
31
32
@app.route("/exam"# 접속 ip혹은 도메인 뒤 붙는 라우터 이름
def predict():
    test_datagen = ImageDataGenerator(rescale=1./255)
    test_generator = test_datagen.flow_from_directory("/이미지 경로/exam",target_size=(100,100), batch_size=100, class_mode='categorical')
    new_model = keras.models.load_model('모델이름.h5')
    new_model.summary()
    loss, acc = new_model.evaluate_generator(test_generator, steps=5
    data = {"success": False} # dictionary 형태의 데이터를 만들어 놓고 (딕셔너리에 데이터 넣는 방법1 : dictionary_name = {key:value}) 
    
    data["loss_accuracy"= acc # 호출한 모델의 정확도를 넣습니다. (딕셔너리에 데이터 넣는 방법2 : dictionary_name[key] = value)
 
    data["success"= True # 같은 방식으로 가지고 있는 key의 value를 바꿀수 있습니다.
            
    return jsonify(str(acc)) # '/exam'으로 요청을 보낸곳으로 값을 반환하는데에 json형태로 만들어 보내는데 jsonify를 하려면 데이터가 str 형태여야 합니다.
cs

  • 우리가 계속 쓰고있는 h5파일에 저장돼있는 모델 불러오는 코드를 flask 라우터로 감싼 형태입니다.
  • 간단하게 URL 접근만 가능한 상태입니다. (GET방식)

  서버 실행문


34
35
36
37
38
39
if __name__ == "__main__"# terminal에서 python 인터프리터로 .py 파일을 실행하면 무조건 이 부분을 찾아 실행합니다.
                           # C의 main
    print(("* Loading Keras model and Flask starting server..."
        "please wait until server has fully started"))
    app.run(host="0.0.0.0"# app.run을 해줘야 flask 서버가 구동됩니다. 
                            # host="0.0.0.0"은 외부에서 해당 서버 ip 주소 접근이 가능하도록 하는 옵션입니다.
cs


  • host="0.0.0.0" 대신 직접적인 주소를 써줄수도 있고(대신 고정IP 설정이 돼있어야함) port='포트번호' 옵션으로 포트번호도 따로 설정 해 줄 수 있습니다.


  python 파일 실행


  • terminal에서 python 파일이름.py  커맨드로 flask 서버 소스를 실행합니다.


  • 이 메시지가 뜨면 해당 서버 ip:5000 으로 접속 할 수 있습니다. 


  외부 접속


  • 서버파일이 실행돼있는 상태에서 ip:5000(port)/exam(router) 로 접속하면 return하도록 설정해두었던 모델의 정확도를 얻을 수 있습니다.


<관련 페이지>

flask 관련 작성 포스트 - [Python3] requests로 웹서버에 데이터 전달하기


  Comments,     Trackbacks
[STUDY] 5월 3주차 - 이진분류, 성능분석, 오차행렬, 정밀도, 재현율

STUDY_05_3.ipynb

---------------------------------------------------------------------------------------------------------------------------

from sklearn.datasets import fetch_mldata


# 데이터 추가


# 이상하게 책에 있는 대로 fetch_openml 함수를 쓰니까 없는 함수라고 뜸

# 알아보니까 책 예전 버전에는 fetch_mldata를 썼는데 이 부분이 무슨 일인지 fetch_openml로 바뀜

# 일단 안 되니까 fetch_mldata 이걸로 데이터 불러봄

mnist = fetch_mldata('MNIST original')


print(mnist)

# - DESCR : 이 데이터가 무엇인지 설명함

# - data : 이미지의 픽셀마다 특성(0~255 사이의 픽셀이 gray값, 0이면 완전 검은색/255면 완전 흰색)

# - target : 레이블, 이미지가 어떤 숫자인지 나타내는 값(이것은 1이다, 이것은 4다.. 이렇게)

#  {

#       'DESCR': 'mldata.org dataset: mnist-original', 

#       'COL_NAMES': ['label', 'data'],

#       'target': array([0., 0., 0., ..., 9., 9., 9.]),

#       'data': array([[0, 0, 0, ..., 0, 0, 0],

#                      [0, 0, 0, ..., 0, 0, 0],

#                      [0, 0, 0, ..., 0, 0, 0],

#                      ...,

#                      [0, 0, 0, ..., 0, 0, 0],

#                      [0, 0, 0, ..., 0, 0, 0],

#                      [0, 0, 0, ..., 0, 0, 0]], dtype=uint8)

#  }


# 데이터 셋을 변수에 저장

# X : 이미지의 픽셀 데이터들

# y : 이미지가 어떤 숫자인지 나타내는 데이터들

X, y = mnist["data"], mnist["target"]

print(X.shape)

print(y.shape)


import matplotlib

import matplotlib.pyplot as plt


# 36000번째 픽셀 이미지를 보여준다

#  - 이미지 크기를 28X28 크기로 shape 지정

#  - binary 컬러 맵을 사용해서 그린다

#  - 각 픽셀은 nearest 보간 방식으로 사용해서 결정한다

#    > nearest 보간 방식 : 새로운 지점 또는 한 지점 값을 결정할 때 주변 분포한 값을 사용해 결정하는 것

some_digit = X[36000]

some_digit_image = some_digit.reshape(28, 28)

plt.imshow(some_digit_image,

           cmap = matplotlib.cm.binary,

           interpolation="nearest")


# 36000번째 값 레이블 확인

print(y[36000])


# 훈련-테스트 데이터 셋 분리

# - X_train : 0부터 59999 인덱스의 이미지 픽셀 데이터 (모델 훈련시킬 때 사용함)

# - X_test : 60000부터 69999 인덱스의 이미지 픽셀 데이터 (모델 테스트할 때 사용함)

# - Y_train : 0부터 59999 인덱스의 이미지가 무슨 숫자인지 나타내는 데이터 (모델 훈련시킬 때 사용함)

# - Y_test : 60000부터 69999 인덱스의 이미지가 무슨 숫자인지 나타내는 데이터 (모델 테스트할 때 사용함)

X_train = X[:60000]

X_test = X[60000:]

y_train = y[:60000]

y_test = y[60000:]


import numpy as np


# 훈련 데이터를 랜덤으로 섞음

# [numpy.random.permutation(x)]

#     <Parameters>

#         - x : int 값 혹은 배열

#               int 값이면 범위로 지장한 숫자를 랜덤하게 배열해서 반환함

#               배열 값이면 배열 인덱스를 랜덤하게 섞어서 반환함

#     <Example>

#       >>> np.random.permutation(10)  ----------->  array([1, 7, 4, 3, 0, 9, 2, 5, 8, 6])

#       >>> np.random.permutation([1, 4, 9, 12, 15])   ------------>  array([15,  1,  9,  4, 12])


shuffle_index = np.random.permutation(60000)

X_train, y_train = X_train[shuffle_index], y_train[shuffle_index]


# 이진 분류기 훈련 ---------> 이것은 5인가 아닌가

y_train_5 = (y_train == 5)

y_test_5 = (y_test == 5)


# 확률적 경사 하강법 분류기 만들기

# [경사하강법]

#     y = wx + b라는 함수 식이 있으면 가장 오차가 적게되는 w와 b를 구하는 방법이다.

#     특히 함수가 어렵고 복잡하여 수학적 접근 방법으로 풀기 어려운 문제에도 잘 동작.

#     2차원 cost 함수 위에서 경사도 0에 근접하도록 쭉쭉 내려갈때 쓰는 그거

# [확률적 경사하강법은 그냥 경사하강법이랑 뭐가 다르나]

#     경사 하강법은 모든 훈련 데이터에서 대해서 값을 평가하고 매개변수 업데이트를 진행 --> 속도 드림

#     확률적 경사하강법은 확률적으로 선택한 데이터에 대해서 값을 평가하고 매개변수를 업데이트 --> 속도 더 빠름

#     확률적 경사하강법은 일반 경사하강법이랑 방식은 같긴 한데

#     데이터 다 하는게 아니고 랜덤하게 하나 찝어서 cost 함수 위에서 올라갈지 말지를 정하니까 속도 빠름


from sklearn.linear_model import SGDClassifier


# [SGDClassifier]

#     <Parameter>

#        - max_iter : 최대로 통과할 수 있는 데이터의 수

#        - random_state : 데이터를 셔플 할 때 사용할 의사 난수 생성 프로그램의 시드

sgd_clf = SGDClassifier(max_iter=5, random_state=42)


# [fit]

#   <Parameter>

#        - X : 학습할 데이터

#        - y : 목표 값

sgd_clf.fit(X_train, y_train_5)


# 만든 확률적 경사하강법 분류기로 예측해보기

#     - 예측 실패하면 이렇게 나온다 -------> array([False])

#     - 예측 성공하면 이렇게 나온다 -------> array([ True])

sgd_clf.predict([some_digit])


# 교차검증을 써서 모델 성능 평가하기

# [k-fold 교차검증]

#    학습 데이터를  K개의 폴드로 나눠서 교차검증하는 방식이다.

from sklearn.model_selection import cross_val_score


# [cross_val_score]

#    - 첫번째 인자(sgd_clf) : 검증 할 모델

#    - 두번째 인자(X_train) : 검증 할 훈련 데이터

#    - 세번째 인자(y_train_5) : 예측하려고하는 대상 변수

#    - cv : 검증 fold 수(디폴트로는 3개)

#    - scoring : 모델 평가 지표(디폴트로는 "accuracy", 정확도)

# 호출 결과 이런 값이 나온다. 각 폴드 당 계산 된 모델 성능을 의미한다/ (매번 조금씩 다르다)

#    > array([0.9618 , 0.9629 , 0.96545])

cross_val_score(sgd_clf, X_train, y_train_5, cv=3, scoring="accuracy")


# 오차행렬 만들기

# [오차행렬]

#    클래스 A의 샘플이 B로 분류 된 횟수를 세어서 행렬로 나타낸 것

#       ex> 숫자 1 이미지가 2로 분류 된 횟수를 알고싶다 ----> 오차행렬의 1행 2열을 본다

#    오차 행렬을 만드려면 실제 타깃(여기서는 y_train_5)과 비교할 수 있도록 예측값을 만들어야 한다.

from sklearn.model_selection import cross_val_predict


# [cross_val_predict]

#    - 첫번째 인자(sgd_clf) : 대상 모델

#    - 두번째 인자(X_train) : 적용할 데이터

#    - 세번째 인자(y_train_5) : 예측하려고 하는 대상 변수

#    - cv : 폴드 수

#[cross_val_predict와 cross_val_score의 다른 점]

#    > cross_val_score함수는 평가 결과 점수를 반영하지만, corss_val_predict는 각 테스트 케이스의 결과를 반영한다

#    > cross_val_score 

#        -> 폴드 1의 첫번째 데이터 검증

#        -> 폴드 1의 두번째 데이터 검증

#        -> 폴드 안에 데이터 모두 검증 해서 폴드 1의 성능을 확률(0.0~1.0사이) 값으로 나타냄

#          > array([0.9618 , 0.9629 , 0.96545])    --->   3개 폴드 적용한 평가치

#    > cross_val_predict

#        -> 폴드 1의 첫번째 데이터 검증

#        -> 폴드 1의 두번째 데이터 검증 

#        -> 폴드 안에 데이터 각각 검증 한 값을 배열 안에다 저장함

#          > [False False False ... False False False]

y_train_pred = cross_val_predict(sgd_clf, X_train, y_train_5, cv=3)


# confusion_matrix 만들어서 오차행렬 만들기

from sklearn.metrics import confusion_matrix


# [confusion_matrix]

#    분류의 정확성을 평가하기위한 오차 행렬을 반환함

#    - 첫번째 인자(y_train_5) : 원래 정답

#    - 두번째 인자(y_train_pred) : 모델이 분류 한 정답

#    호출하면 이렇게 나온다

#        array([[54020,   559],

#               [ 1708,  3713]])

#    각 위치에 값들이 뜻하는 것

#        array([[5아닌데 5아니라고 잘 분류한 횟수,   5아닌데 5라고 잘못 분류한 수],

#                5맞는데 5아니라고 잘못 분류한 횟수, 5맞는데 5라고 잘 분류한 횟수])

confusion_matrix(y_train_5, y_train_pred)


# [정밀도]

# 정밀도 = TP/(TP+FP)

#        > TP : 진짜 양성의 수(5 맞는데 5라고 잘 분류한 횟수)

#        > FP : 거짓 양성의 수(5 아닌데 5라고 잘못 분류한 횟수)

#        ----> FP가 0 에 가까울 수록 정확도가 높다


# [재현율]

# 분류기가 정확하게 감지한 양성 샘플의 비율

# 재현율 = TP / (TP+FN)

#        > TP : 진짜 양성의 수(5 맞는데 5라고 잘 분류한 횟수)

#        > FN : 거짓 음성의 수(5인데 5 아니라고 잘못 분류한 횟수)

#        ----> 역시 FN가 0 에 가까울 수록 정확도가 높다


from sklearn.metrics import precision_score, recall_score


# 정밀도 출력

print(precision_score(y_train_5, y_train_pred))


# 재현율 출력

print(recall_score(y_train_5, y_train_pred))


# [F1 점수]

#    정밀도와 재현율의 조화평균

#    F1 점수 = TP * ( TP + ( (FN + FP) / 2 ) )

from sklearn.metrics import f1_score

print(f1_score(y_train_5, y_train_pred))


# [왜 굳이 정밀도와 재현도를 나눠가면서 계산하나]

#    도둑 방범 시스템

#       ---> 정확도는 낮더라도 재현률이 높으면

#            도둑 안들었을 때 도둑 들었다고 경비원이 귀찮게 호출 될 지언정(낮은 정밀도)

#           도둑 들었을 때 도둑 안들었다고 잘못 판별하는것은 막을 수 있다.(높은 재현율)


# [정밀도/재현율 트레이드오프]            

#    정밀도를 올리면 재현율이 줄고 재현율을 올리면 정밀도가 내려가는 현상



  Comments,     Trackbacks
K-Fold 교차 검증이란 뭔가

    [교차검증은 뭔가]

     

    - Cross-Validation 이라고도 함

     

    - 머신러닝 모델을 설계 할 때 필요한 파라미터를 Hyperparameter 가 필요한데 얘를 튜닝해주는 거

             -----> 하이퍼파라미터가 뭔지 모르겠지만 일단 w, b 같은거겠거니 하고 넘어감

       > 모델에 따라서 필요한  Hyperparameter 가 한 둘이 아닐것임

       > 그런데 이 Hyperparameter가 서로 영향을 주고받는다던지 엄청 많다던지 하면 튜닝하기가 엄청 복잡함

       > 요것을 튜닝해주는 방법이 여러가지인데 그 중에 하나가 교차검증이고 그 중에 K-Fold 교차검증이란 것이 있다고 한다.

     

    - 오버피팅을 막는 효과도 있음 (사실 이것이 교차검증하는 제일 중요한 이유)

       > 오버피팅이란 모델을 똑똑하게 만들 때 학습 데이터를 막 넣어서 똑똑하게 만드는데

          얘가 학습데이터에 너무 심취해서 학습 데이터는 판별을 엄청 잘하는데 실제 다른 이미지 들고와서 판별하라고 하면 잘 못하는 현상

            -> 모델을 여기저기 쓸 수 있게 해야하는데 학습 데이터만 판별을 잘하니까 무쓸모 됨.'

     

    - 데이터를 테스트 데이터랑 검증 데이터로 나눠서 테스트 데이터로 학습시키고 검증 데이터로 검증하는 방식

     

    [ K-Fold 교차 검증]

     

    - 이 교차 방식은 학습 데이터를  K개의 폴드로 나눠서 교차검증하는 방식이다.

     

    - 데이터는 다음과 같이 나눈다

      [데이터]

           |-----[학습데이터]

           |             |----- 폴드 1 데이터

           |             |----- 폴드 2 데이터

           |             |-----(....)

           |              |----- 폴드 k 데이터

          |-------[검증데이터] 

     

    - 학 데이터. K개 폴드 데이터로 나눔


    - 각 폴드별로 데이터 분류하는 방식은 랜덤


    - 여기서 1부터 k-1개까지  테스트 폴드라고 하고, 제 마지막꺼(k번째 폴드) 검증용 폴드라고 정한다.


    - 교차 검증 순서


    1. 튜닝할 hyperparameter 정하기

    2. 학습데이터] - 폴드1 데이터 학습시키기

    3. 폴드 k 데이터 검증하기

    4. 검증하며 하이퍼파라미터가 나 --->  과정을  모르겠음어떻게 하이퍼파라미터가 나오나. 일단 모르겠으니 나오는가보다 하고 넘어감

    5. 2번부터 4번까지 반복함. 1 폴드 했으니까 이제 2 폴드 학습시킥고  k폴드로 검증함

    6. 나머지 폴드에 대해서 반복함.  K 폴드로 나눴으니까 k-1 반복함(마지먹거는 검증용이니까 뺀다)

    7. 폴드 하나 학습시키고 검증할 때마다  세트 하이퍼파라미터가 나

    8. K-1 반복했으니까 하이퍼파라미 세트도 k-1 나올것임

    9. 각 하이퍼파라미터 세트에 대해 평균을 구한다

    10. 평균을 구 평균하이퍼파라미터를 검증데이터(k폴드에 있는 검증용 폴드 말고  첨에 학/검증 데이터 나  중에 그거)  검증한다.


[아직 모르는 것]
- 실제 파이썬 코드에서 어떻게 쓰나


  Comments,     Trackbacks
Window Bonobo.Git.Server 설치방법

Window Bonobo.Git.Server 설치 방법


1. GIT 설치                               https://git-scm.com

2. TortoiseGit 설치                     https://tortoisegit.org/

3. Bonobo.Git.Server 다운로드      https://bonobogitserver.com/




가장 먼저 IIS 설정하기

제어판 - 프로그램 제거 - windows 기능 켜기/끄기



그러면 C드라이버에 inetpub 폴더 생김

inetpub 폴더 안에 원하는 이름의 폴더를 생성한다.



생성한 폴더에 다운받은 Bonobo.Git.Server를 넣는다.



Bonobo.Git.Server 폴더의 권한을 설정한다.




IIS 관리자 실행하여 설정한다.



Bobobo.Git.Server를 우클릭하여 "응용프로그램으로 변환"을 한다.



응용 프로그램 풀을 닷넷4.5로 한다. 만약에 닷넷이 없으면

제어판 - 프로그램 제거 - windows 기능 켜기/끄기에서 ASP.Net 4.7에 체크를 안했으니 돌아가서 다시 체크하고 오셈



다시 IIS 권한 편집을 해줘야한다.




그리고 파란색 부분을 클릭하여 웹사이트에 접속한다. 아래와 같이 뜨면 성공 아니면 다시 시도해보셈

초기 아이디와 비번은 admin admin 이다.













Bonobo.Git.Server 설정하기

처음으로 프로젝트를 먼저 생성한다.



실제 다른 유저가 push할 때 사용할 URL




VisualStudio 2010에서 바로 comit 하기 위한 플로그인 GitSccProvider.vsix 을 설치하면 매우 편리함


  Comments,     Trackbacks
[PYTHON] .format() 을 이용한 포맷팅
  • {0:0.3f}.format(x) 가 뭔지 알아보는데에서 시작함

  .format()


1
print("원주율 : {0} , 우리 모델 정확도 : {1}%".format(3.14159299.8678678))
cs


  •  "원주율 ~ " : print() 함수로 출력하고자 하는 문자열, text
  • {0}, {1} :  format()의 인자 index
    • {0} = 3.141592
    • {1} = 99.8678678

  실행 결과




1
print("원주율 : {0:0.2f} , 우리 모델 정확도 : {1:0.4f}".format(3.14159299.8678678))
cs


  • {0:0.2f} : {0}번 index 값의 소수점 2번째 자리까지 출력하겠다.
    • {0:0.2f} = 3.14
  • {1:0.4f} : {1}번 index 값의 소수점 4번째 자리까지 출력하겠다.
    • {1:0.4f} = 99.8678


  실행 결과



1
print("원주율 : {:50}".format(3.141592))
cs

  • {:50} : format()의 인수를 2개이상 쓸수없고(오로지 1개) 50칸의 공백을 준뒤 출력하겠다.


  실행 결과



  Comments,     Trackbacks
[STUDY] 5월 2주차 - 머신러닝 시스템의 종류

[머신러닝 프로젝트의 기본 형태]

·         데이터를 분석한다.

·         모델을 선택한다.

·         훈련 데이터로 모델을 훈련시킨다.

·         새로운 데이터에 모델을 적용해 결과를 예측 한다.

 

 

1.     학습하는 동안의 감독 형태나 정보량에 따른 분류

a.     지도 학습

§  알고리즘에 주입하는 훈련 데이터에 레이블(정답)이 포함되는 학습

§  지도 학습의 전형

·         분류 (ex. 스팸 필터)

·         예측 : 예측 변수(특성, feature)를 사용해 타깃 변수 예측 (ex. 중고차 가격)

·         속성(attribute) : 데이터 타입 (ex. 주행거리)

·         특성(feature) : 속성 + (ex. 주행거리=15000)

·         분류 예측 : 특정 클래스에 속할 확률을 예측(ex. 로지스틱회귀)

·         지도 학습 알고리즘

·         k-최근접 이웃(KNN) : 특정 공간 내에서 입력과 제일 근접한 k개의 요소를 찾아 더 많은 갯수가 일치하는 것으로 분류하는 알고리즘

·         선형회귀 : 독립 변수와 종속 변수 간의 관계를 찾는 것

 ex : 통화량(독립변수1)과 실업률(독립변수2)이 물가(종속변수)에 미치는 영향 예측

·         로지스틱 회귀 : 특정 클래스에 속할 확률을 추정

·         서포트 벡터 머신 : 공간을 결정 경계로 어떻게 나누는가?


·         결정 트리와 랜덤 포레스트

·         결정트리 : 다양한 의사결정 경로와 결과를 나타내는 트리구조(ex. 스무고개)

·         랜덤포레스트 : 결정트리로 만들어진 예측 알고리즘

·         신경망

b.     비지도 학습

·   레이블이 없는 훈련 데이터로 학습하는 방법

·   비지도 학습 알고리즘

    • 군집

·         k-평균 : 주어진 데이터를 k개의 클러스터로 묶는 알고리즘

·         계층군집분석 : 각 그룹을 작은 그룹으로 세분화 하면서 분류

·         기댓값 최대화(EM 알고리즘) :  예상과 최대화를 반복해 개체 분류

·         무작위로 군집의 평균, 분산, 혼합 계수를 정한다

·         각 점이 군집에 속할 확률을 구한다(예측단계)

·         가능도가능도(likelihood)를 최대화 하도록 분포를 업데이트 한다(최대화단계)

·         더 이상 분포가 바뀌지 않을 때 까지 예측단계-최대화단계를 반복한다

·         시각화와 차원 축소

·         시각화 : 고차원 데이터를 도식화하는 것. 데이터 자체만으로 볼 수 없었던 데이터의 조직과 패턴을 파악할 수 있음.

·         차원 축소 : 너무 많은 정보를 잃지 않으면서 데이터를 간소화 하는 방법. 실행 속도가 빨라지고 모델의 성능이 좋아지는 것을 기대할 수 있음.

·         주성분 분석(PCA) : 데이터 하나 하나에 대한 성분을 분석하는 것이 아니라, 여러 데이터들이 모여 하나의 분포를 이룰 때 분포의 주 성분을 분석해 주는 방법(쉽게 말해 여러 개 모아놓고 한개로 퉁치는 방법인가?)

·         특성 추출 : 밀접한 상관관계가 있는 여러 특성을 한 특성으로 취급하는 것

ex) 차의 특성 중에 '주행거리' 특성과 '연식' 특성은 두개가 밀접한 관계(연식이 오래 됐을 수록 주행거리가 길다)가 있다는 것을 고려해서, 두 특성을 묶어 하나의 특성('주행거리-연식')으로 취급하는 것.

·         이상치 탐지 : 입력 된 데이터가 정상 데이터인지 이상치인지 판단

ex) 이상한 신용카드 거래 감지, 제조 결함 감지

·         연관 규칙 학습커널

·         지역적 선형 임베딩

·         t-SNE

·         연관규칙학습 : 여러 특성 간의 연관 관계를 찾는 것

ex) 연식과 주행거리는 비례한다/바비큐 소스를 많이 산 사람은 스테이크도 많이 구매한다.

·         어프라이어리

·         이클렛

c.     준지도 학습 : 레이블이 일부만 있는 데이터를 학습

·   지도 학습과 비지도 학습의 조합으로 구성됨.

ex) 심층 신뢰 신경망 : 세부 비지도 학습을 수행 한 후 그 결과를 전체 시스템에 지도 학습 방식으로 적용 및 조정함.

ex) 구글 포토 호스팅

·         비지도학습 : 각 사진으로부터 같은 인물로 추정되는 이미지 군집

·         지도 학습 : 한 인물 이미지로부터 '이름' 특성이 있는 데이터

d.     강화학습 : 에이전트(학습을 수행하는 시스템)가 환경을 관찰, 행동하고 결과로 보상과 벌점을 받는 것을 반복하면서 에이전트의 정책이 최상의 전략이 되도록 학습하는 것.

 

2.     실시간 학습 여부

a.     배치 학습(=오프라인 학습)

·         시스템 훈련을 먼저 수행하고 학습 적용 (학습 먼저 하고 나중에는 적용만 한다)

·         시스템이 점진적으로 학습할 수 없음. (한번 학습하면 끝임)

·         시간과 자원을 많이 소모하므로 보통 오프라인에서 수행된다.

·         가용한 데이터를 모두 사용해 훈련시켜야 한다.

·         새로운 데이터에 대해 학습하려면 이전 데이터를 포함해서 시스템의 새로운 버전을 처음부터 학습시켜야 한다.

b.     온라인 학습

·         데이터를 순차적으로 한 개씩 또는 미니배치라 부르는 작은 묶음 단위로 주입하여 시스템을 훈련시킨다.

·         학습 단계가 빠르다. (데이터를 받는 족족 학습시킨다)

·         빠른 변화에 적응해야 하는 시스템에 적합하다.

·         컴퓨터 자원이 한정적인 경우 적합하다.

·         학습률 : 변화하는 데이터에 얼마나 빠르게 적응할 것인지 결정하는 파라미터

·         학습률이 높으면 시스템이 데이터에 빠르게 적응하지만 예전 데이터를 금방 잊는다.

·         학습률이 낮으면 시스템의 관성이 더 커져서 더 느리게 학습되지만 새로운 데이터가 오류가 있을 경우 영향을 덜 받는다.

·         나쁜 데이터가 주입되었을 때 시스템 성능이 점진적으로 감소한다는 특징이 있다.

3.     학습 기반 별 분류

a.     사례 기반 학습

·         시스템이 사례를 기억함으로써 학습한다

ex) 사용자가 스팸메일이라고 지정하면 그 것을 기억한다.

·         새로운 데이터는 입력 된 사례들과의 유사도를 통해 예측을 적용한다.

b.     모델 기반 학습

·   데이터로 모델을 만들어서 모델을 써서 예측하는 방법.

·   모델 선택 : 예측 결과를 반환 할 모델을 선택하는 것.

ex) 월급 액수와 행복도 간의 상관관계를 예측 모델로 선택한다.

    (행복도) = w * (월급) + b

    -> w, b를 모델 파라미터라 한다.

·         효용 함수(utility function) : 모델의 성능이 얼마나 좋은지 측정하는 함수

·         비용 함수(cost function) : 모델의 성능이 얼마나 나쁜지 측정하는 함수

·         모델 훈련 : 선택한 모델이 높은 효용 함수 결과, 혹은 낮은 비용 함수 결과를 나타내도록 모델 파라미터(w, b) 값을 찾는 것.

 

  Comments,     Trackbacks
[STUDY] 5월 1주차 - 선형대수/파이썬(+Numpy)

[선형대수]

 행렬 벡터를 통해 표현되는 선형 방정식 선형 함수를 다루는 수학의 분야

 

    1. 내적(스칼라곱) : 각각의 성분끼리 곱을 모두 더하는
      • 머신 러닝에서 내적은 필요한 것일까?
        • 벡터가 이루는 각을 성분 값들로 부터 구할 있다


 

  1. 행렬
    1. 속성
      • 영행렬
      • 정방행렬
      • 대각성분, 대각행렬, 단위행렬
      • 정칙행렬 : 역행렬이 존재하는 행렬
      • 역행렬
      • 전치행렬, 대칭행렬
      1. 스칼라곱
      2. 행렬


  • 결합 법칙이 성립한다.
  • 분배 법칙이 성립한다.
  • 행렬 곱의 역행렬 : AB역행렬 = (B역행렬)X(A역행렬)

 

 

[파이썬]

  • 인터프리트 언어

 

  1. 데이터형
    1. 문자열형(str)
      • 문자열은 '+' 연결할 있고 '*' 반복할 있다.
    1. 숫자형(int, float)
    2. 부울형(bool)
    3. 변수
      • 변수의 형태는 변수가 정의될 정해지며 모든 형의 값을 대입할 있다.
      • 어떤 값도 들어있지 않은 상태로 정의할 때는 'None' 사용한다.
      • 이미 정의 변수에 전혀 다른 형의 값을 대입하면 오류 발생할 있음

 

  1. 데이터 구조
    1. 리스트(list)
      • '배열' 유사한 성질을 가진 데이터형
      • 리스트의 요소의 형을 반드시 일치시키지 않아도 된다.
    2. 딕셔너리(dict)
      • (key) (value) 쌍으로 데이터를 정의한다.

 

  1. 기본 구문
    1. if : if-elif-else
    2. while : 조건에 따라 반복 실행
    3. for : 횟수에 따라 반복 실행
    4. 함수 : def 키워드 사용
    5. 클래스 : class 키워드 사용
    6. 라이브러리
      • import 라이브러리명 as 별칭
      • from 라이브러리명 import 메서드명
        • 메서드 이름 앞에 아무것도 붙이지 않고 사용할 있다

: math.sin(a) -> sin(a)

  • 라이브러리에서 제공하는 모든 메서들을 임포트하려면

: from import *

 

  1. Numpy
    • 수치계산에 사용되는 파이썬 라이브러리
    • import numpy as np

 

  1. Numpy  배열
    • I = np.array( [ [1,0] , [0,1] ] )
    • 선형대수를 비롯한 여러 수치계산을 효율적으로 구현할 있음

 

  1. 벡터 행렬 계산
    • 벡터의 : A + B
    • 벡터의 요소곱 : A * B
    • 벡터의 내적 : np.dot(A, B)
    • 행렬 : A + B
    • 행렬 요소곱 : A * B
    • 행렬의 : np.dot(A, B)

 

  1. 다차원 배열 생성
    • 성분이 모두 0 배열 : np.zeros(성분의 )
    • 성분이 모두 1 배열 : np.ones(성분의 )
    • 일정 범위의 수를 포함하는 배열
      • np.arange(시작값, 끝값, 간격)
      • np.arange(4) = array( [0,1,2,3] )
      • np.arange(4, 10) = array( [4, 5, 6, 7, 8, 9] )
      • np.arange(4, 10, 3) = array( [4, 7] )
    • n X m 차원 배열로 바꾸기 : reshape(n, m)
      • B = np.arange(1, 7).reshape(2, 3)

   = array( [ [1, 2, 3],

 [4, 5, 6] ] )

 

  1. 슬라이스
    • 배열의 성분이나 배열의 일구 구하기
    • 배열의 일부 구하기a[ 인덱스 : 마지막인덱스 + 1]
      • a[1:5] = array( [1, 2, 3, 4] )
      • a[:5] = array( [0, 1, 2, 3, 4] ) : 인덱스 생략시 0부터
      • a[1:5:2] = array( [1,3] ) : 세번째 인수로 간격 설정 가능
      • a[::-1] = array( [9, 8, 6, 5, 4, 3, 2, 1, 0] ) : 본래의 배열을 거꾸로 반환
  2. 브로드캐스트
    • Numpy에서는 서로 다른 배열끼리도 계산 가능
    • 차원이 작은 쪽이 차원이 쪽에 크기를 맞춘 후에 계산됨


 

  1. 딥러닝을 위한 라이브러리
    1. 텐서플로우
      • 모델을 수식에 따라 구현할 있어서 직관적이다.
      • 모델 일부틑 이미 메서드로 만들어져 있다.
      • 모델 학습 데이터를 가공하는 처리도 메서드로 만들어져 있다.
    2. 케라스
      • 텐서플로우를 래핑한 라이브러리
      • 모델 설계할 개발자가 수식에 맞춰 구현해야 경우에 대해서도 메서드가 마련되어 있음
    3. 테아노(Theano)
      • 수치 계산 속도를 높여주는 파이썬 라이브러리
      • 실행 C언어 코드가 생성되고 컴파일되므로 실행 속도가 빠르다
      • 자동 미분 가능
      • 벡터나 행렬, 스칼라를 나타내는 변수는 모두 '심볼'이라는 것으로 취급

 


  Comments,     Trackbacks
[사이트] keras serving 관련

keras를 사용하는 이유  소개 - Why use Keras?

 : 서비스하는 여러가지방법


keras X flask - Building a simple Keras + deep learning REST API

 : gRPC 대신 python flask 이용한(http) 통신 방법 


Keras 모델을 REST API로 배포해보기

 : 한글 번역 포스팅


'참고자료' 카테고리의 다른 글

OPENCV Ai 활용예제  (0) 2019.07.12
[사이트]tensorflow serving , mnist 포맷 설명  (0) 2019.04.30
  Comments,     Trackbacks
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
TODAY TOTAL