숨 log/STUDY (4)
[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
[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
최근 작성 글
최근 작성 댓글
최근 작성 트랙백
프로필
공지사항
글 보관함
캘린더
«   2024/04   »
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
TODAY TOTAL