본문 바로가기

분류 전체보기

(174)
머신러닝 강좌 #32] 차원 축소 : PCA(Principal Component Analysis) PCA는 가장 대표적인 차원 축소 기법입니다. PCA는 여러 변수 간에 존재하는 상관관계를 이용해 이를 대표하는 주성분(Principal Component)을 추출해 차원을 축소하는 기법입니다. PCA로 차원을 축소할 때는 기존 데이터의 정보 유실이 최소화되는 것이 당연합니다. 이를 위해서 PCA는 가장 높은 분산을 가지는 데이터의 축을 찾아 이 축으로 차원을 축소하는데, 이것이 PCA의 주성분입니다. PCA, 즉 주성분 분석은 이처럼 원본 데이터의 피처 개수에 비해 매우 작은 주성분으로 원본 데이터의 총 변동성으로 대부분 설명할 수 있는 분석법입니다. 정리하면 PCA는 입력 데이터의 공분산 행렬이 고유벡터와 고유값으로 분해될 수 있으며, 이렇게 분해된 고유벡터를 이용해 입력 데이터를 선형 변환하는 방식..
머신러닝 강좌 #31] 차원 축소 / Dimension Reduction 차원축소는 매우 많은 피처로 구성된 다차원 데이터 세트의 차원을 축소해 새로운 차원의 데이터 세트를 생성하는 것입니다. 일반적으로 차원이 증가할수록 데이터 포인트 간의 거리가 기하급수적으로 멀어지게 되고, 희소(sparse)한 구조를 가지게 됩니다. 수백 개 이상의 피처로 구성된 데이터 세트의 경우 상대적으로 적은 차원에서 학습된 모델보다 예측 신뢰도가 떨어집니다. 또한 피처가 많을 경우 개별 피처간에 상관관계가 높을 가능성이 큽니다. 선형 회귀와 같은 선형 모델에서는 입력 변수 간의 상관관계가 높을 경우 이로 인한 다중 공정성 문제로 모델의 예측 성능이 저하됩니다. 이렇게 매우 많은 다차원의 피처를 차원 축소해 피처 수를 줄이면 더 직관적으로 데이터를 해석할 수 있습니다. 가령 수십 개 이상의 피처가 ..
머신러닝 강좌 #30] 회귀실습 - 캐글 주택 가격: 고급 회귀 기법
머신러닝 강좌 #29] 회귀실습 - 자전거 대여 수요 예측 전체실습: Jupyter http://localhost:8888/notebooks/Lecture_ML/perfect/5%EC%9E%A5/5.9%20Regression%EC%8B%A4%EC%8A%B5-Bike%20Sharing%20Demand.ipynb data: https://www.kaggle.com/c/bike-sharing-demand
3. 소규모 데이터셋에서 밑바닥부터 컨브넷을 훈련하기 · 매우 적은 데이터를 사용해 이미지 분류 모델을 훈련하는 일은 흔한 경우입니다. 여러분이 전문적인 컴퓨터 비전 작업을 한다면 실제로 이런 상황을 마주치게 될 가능성이 높습니다. 보통 '적은' 샘플이란 수백 개에서 수만 개 사이를 의미합니다. 실용적인 예제로 4,000개의 강아지와 고양이 사진(2,000개는 강아지, 2,000개는 고양이)으로 구성된 데이터셋에서 강아지와 고양이 이미지를 분류해 보겠습니다. 훈련을 위해 2,000개의 사진을 사용하고 검증과 테스트에 각각 1,000개의 사진을 사용하겠습니다. 이 절에서 문제를 해결하기 위해 기본적인 전략 하나를 살펴볼 것입니다. 보유한 소규모 데이터셋을 사용해 처음부터 새로운 모델을 훈련하는 것입니다. 2,000개의 훈련 샘플에서 작은 컨브넷을 어떤 규제 ..
2. 합성곱 연산의 방법 완전 연결 층과 합성곱 층 사이의 근본적인 차이는 다음과 같습니다. Dense층은 입력 특성 공간에 있는 전력 패턴(예를 들어 MNIST 숫자 이미지에서는 모든 픽셀에 걸친 패턴)을 학습하지만 합성곱 층은 지역 패턴을 학습합니다. 이미지일 경우 작은 2D 윈도우로 입력에서 패턴을 찾습니다. 이 핵심 특징은 컨브넷에 두 가지 흥미로운 성질을 제공합니다. 학습된 패턴은 평행 이동 불변성을 가집니다. 컨브넷이 이미지의 오른쪽 아래 모서리에서 어떤 패턴을 학습했다면 다른 곳(예를 들어 왼쪽 위 모서리)에서도 이 패턴을 인식할 수 있습니다. 완전 연결 네트워크는 새로운 위치에 나타난 것은 새로운 패턴으로 학습해야 합니다. 이런 성질은 컨브넷이 이미지를 효율적으로 처리하게 만들어 줍니다.(근본적으로 우리가 보는 세..
1.합성곱 신경망 소개 컨브넷 정의와 컨브넷이 컴퓨터 비전 관련 작업에 잘 맛는 이유에 대해 이론적 배경을 알아봅시다. 컨브넷이 (image_height, image_width, image_channels) 크기의 입력 텐서를 사용한다는 점이 중요합니다(배치 차원은 포함하지 않습니다). 이 예제에서는 MNIST 이미지 포맷인 (28, 28, 1) 크기의 입력을 처리하도록 컨브넷을 설정해야 합니다. 이 때문에 첫 번째 층의 매개변수로 input_shape=(28, 28, 1)을 전달합니다. from keras import layers from keras import models model = models.Sequential() model.add(layers.Conv2D(32, (3, 3), activation='relu', in..
4.가중치 규제 추가에 대해 : L1규제, L2규제, 드롭아웃 / 정리하기 L1규제, L2규제 어떤 훈련 네트워크 구조가 주어졌을 때 데이터를 설명할 수 있는 가중치 값의 집합은 여러 개(여러 개의 모델)입니다. 간단한 모델이 복잡한 모델보다 덜 과대적합될 가능성이 높습니다. 간단한 모델이라 함은 파라미터 값 분포의 엔트로피가 작은 모델이나 적은 수의 파라미터를 가진 모델입니다. 그러므로 과대적합을 완화하기 위한 일반적인 방법은 네트워크의 복잡도에 제한을 두어 가중치가 작은 값을 가지도록 강제하는 것입니다. 가중치 값의 분포가 더 균일하게 됩니다. 이를 가중치 규제(weight regularization)라고 하며, 네트워크의 손실 함수에 큰 가중치에 연관된 비용을 추가합니다. 두 가지 형태의 비용이 있습니다. L1규제: 가중치의 절댓값에 비례하는 비용이 추가됩니다. L2규제:..
3.데이터 전처리, 특성 공학, 특성 학습 1.신경망을 위한 데이터 전처리 데이터 전처리목적은 주어진 원본 데이터를 신경망에 적용하기 쉽도록 만드는 것입니다. 벡터화, 정규화, 누락된 값 다루기, 특성 추출 등이 포함됩니다. 1. 벡터화: 신경망에서 모든 입력 타깃은 부동 소수 데이터로 이루어진 텐서여야 합니다.(또는 특정 경우에 정수로 이루어진 텐서입니다.). 사운드, 이미지, 텍스트 등 처리해야 할 것이 무엇이든지 먼저 텐서로 변환해야 합니다.이 단계를 데이터 벡터화라고 합니다. 2. 값 정규화: 일반적으로 비교적 큰 값(예를 들어 네트워크의 가중치 초깃값보다 훨씬 큰 여러 자릿수를 가진 정수)이나 균일하지 않은 데이터(예를 들어 한 특성의 범위는 0~1이고 다른 특성은 100~200인 데이터)를 신경망에 주입하는 것은 위험합니다. 이렇게 하..
1. 신경망을 위한 데이터 표현: 텐서 0D부터 5D까지 2. 첫번째 신경망 실습 :mnist 실습 Note: 클래스와 레이블에 관한 노트 머신 러닝에서 분류 문제의 범주(category)를 클래스(class)라고 합니다. 데이터 포인트는 샘플(sample)이라고 합니다. 특정 샘플의 클래스는 레이블(label)이라고 합 nicola-ml.tistory.com 위의 실습을 보면 텐서라 부르는 다차원 넘파이 배열에 데이터를 저장하는 것부터 시작합니다. 최근의 모든 머신 러닝 시스템은 일반적으로 텐서를 기본 데이터 구조로 사용합니다. 핵심적으로 텐서는 데이터를 위한 컨테이너(container)입니다. 대부분 수치형 데이터를 다루므로 숫자를 위한 컨테이너입니다. 1.1. 스칼라(0D 텐서) 하나의 숫자만 담고 있는 텐서를 스칼라(scalar)(또는 스칼라 텐서, 0..
2. 첫번째 신경망 실습 :mnist 실습 Note: 클래스와 레이블에 관한 노트 머신 러닝에서 분류 문제의 범주(category)를 클래스(class)라고 합니다. 데이터 포인트는 샘플(sample)이라고 합니다. 특정 샘플의 클래스는 레이블(label)이라고 합니다. MNIST 데이터셋을 이용한 첫 번째 실습을 해보겠습니다. - 코드 보기 from keras.datasets import mnist (train_images, train_labels), (test_images, test_labels) = mnist.load_data() train_x 가 모델이 학습해야 할 훈련 세트(training set)를 구성합니다. 모델은 test_x로 구성된 테스트 세트(test set)에서 테스트될 것입니다. 이미지는 넘파이 배열로 인코딩 되어 있고 레..
1. 딥러닝이란 무엇인가? 작동 원리에 대한 이해 딥러닝이란 무엇인가?____________________________ 딥러닝은 머신 러닝의 특정한 한 분야로서 연속된 층(layer)에서 점진적으로 의미 있는 표현을 배우는 데 강점이 있으며, 데이터로부터 표현을 학습하는 새로운 방식입니다. 딥러닝의 딥(deep)란 단어는 연속된 층으로 표현을 학습한다는 개념을 나타냅니다. 데이터로부터 모델을 만드는 데 얼마나 많은 층을 사용했는지가 그 모델의 깊이가 됩니다. 딥러닝에서는 기본 층을 겹겹이 쌓아 올려 구성한 신경망이라는 모델을 사용하여 표현 층을 학습합니다. ↓ 위의 그림과 같이 최종 출력에 대해 점점 더 많은 정보를 가지지만 원본 이미지와는 점점 더 다른 표현하는 숫자 이미지가 변환됩니다. 심층 신경망을 정보가 연속된 필터를 통과하면서 순도 높게 (즉..
5. 온도예측 실습과 함께 알아보는 순환 신경망의 고급 사용법 : 드럽아웃, 스테킹 순환층, 양방향 RNN 4. 온도예측 실습과 함께 알아보는 순환 신경망의 고급 사용법 순환 신경망의 성능과 일반화 능력을 향상시키기 위한 세 가지 고급 기술을 살펴보겠습니다. 순환 드롭아웃(recurrent dropout): 순환 층에서 과대적합을 방지하기 위해 케라스에 내장되어 있는 드롭 nicola-ml.tistory.com 상기 포스팅과 연결된 문서입니다. 그렇다고 이 문제에 머신 러닝이 적합하지 않다는 뜻은 아닙니다. 앞선 모델은 시계열 데이터를 펼쳤기 때문에 입력 데이터에서 시간 개념을 잃어버렸습니다. 그 대신 인과 관계와 순서가 의미 있는 시퀀스 데이터를 그대로 사용해 보겠습니다. 이런 시퀀스 데이터에 아주 잘 들어맞는 순환 시퀀스 처리 모델을 시도해 보겠습니다. 이 모델은 앞선 모델과 데이터 포인터의 시간 순서를 ..
4. 온도예측 실습과 함께 알아보는 순환 신경망의 고급 사용법 순환 신경망의 성능과 일반화 능력을 향상시키기 위한 세 가지 고급 기술을 살펴보겠습니다. 순환 드롭아웃(recurrent dropout): 순환 층에서 과대적합을 방지하기 위해 케라스에 내장되어 있는 드롭아웃을 사용합니다. 스태킹 순환 층(stacking recurrent layer): 네트워크의 표현 능력(representational power)을 증가시킵니다. (그 대신 계산 비용이 많이 듭니다.) 양방향 순환 층(bidirectional recurrent layer): 순환 네트워크에 같은 정보를 다른 방향으로 주입하여 정학도를 높이고 기억을 좀 더 오래 유지시킵니다. 기온 예측 문제 본 예제에서는 막스 플랑크 생물지구화학 연구소의 지상 관측소에서 수집한 데이터를 대상으로 기온 예측에 대한 문제를..
3. 순환 신경망의 이해와 SimpleRNN과 LSTM의 차이 완전 연결 네트워크나 컨브넷처럼 지금까지 본 모든 신경망의 특징은 메모리가 없다는 것입니다. 네트워크에 주입되는 입력은 개별적으로 처리되며 입력 간에 유지되는 상태가 없습니다. 이런 네트워크로 시퀀스나 시계열 데이터 포인트를 처리하려면 네트워크에 전체 시퀀스를 주입해야 합니다. 즉 전체 시퀀스를 하나의 데이터 포인트로 변환해야 합니다. 예를 들어 IMDB문제에서 영화 리뷰 하나를 큰 벡터 하나로 변환하여 처리했습니다. 이런 네트워크를 피드포워드 네트워크라고 합니다. 순환신경망(RNN)은 같은 원리를 적용한 것입니다. 시퀀스의 원소를 순회하면서 지금까지 처리한 정보를 상태(state)에 저장합니다. 사실 RNN은 내부에 루프(loop)를 가진 신경망의 한 종류입니다. RNN의 상태는 2개의 다른 시퀀스를 ..
2. 모든 내용을 적용하기: 원본 텍스에서 단어 임베딩까지 문장들을 벡터의 시퀀스로 임베딩하고 펼친 후 그 위에 Dense층을 훈련합니다. 여기서는 사전 훈련된 단어 임베딩을 사용하겠습니다. 케라스에 포함된 IMDB데이터는 미리 토큰화가 되어 있습니다. 이를 사용하는 대신 원본 텍스트 데이터를 내려받아 처음부터 시작하겠습니다. 데이터 다운로드(https://mng.bz/0tIo) 하시면 됩니다. 데이터 전처리 다운로드 받은 데이터를 훈련용 리뷰 하나를 문자열 하나로 만들어 훈련 데이터를 문자열의 리스트로 구성해 보겠습니다. 리뷰 레이블(긍정/부정)도 labels리스트로 만들겠습니다. IMDB 원본 데이터 전처리하기 import os imdb_dir = './AI_Tensorflow/data/aclImdb' train_dir = os.path.join(imdb_d..