[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기

🛠 기타/Data & AI 99

LSTM을 활용한 스팸분류

데이터 전처리 데이터를 불러오고 전처리하는 과정이다. 데이터에 기본적인 필요없는 부분을 제거하고, 문장을 단어들로 나눈다. import pandas as pd import numpy as np from sklearn.model_selection import train_test_split spam_data = pd.read_csv("../data/spam.csv", encoding="latin1") # spam, ham 값을 숫자로 변환 spam_data['v1'] = spam_data['v1'].replace('spam', 1) spam_data['v1'] = spam_data['v1'].replace('ham', 0) # 정규표현식을 써서, 단어가 아니면 공백으로 spam_data['v2'] = spa..

합성곱 신경망(CNN) - 기본구조 이론

다층퍼셉트론의 문제점 다층 퍼셉트론은 입력과 출력 계층 사이에 은닉층을 가진다. 이 때 계층 간 연결은 양 쪽 퍼셉트론들이 서로 빠짐없이 연결되는 방식으로 이뤄진다. 이런 이유로 다층 퍼셉트론 신경망의 은닉 계층을 '완전 연결 계층'이라고 부른다. 완전 연결 계층의 가중치 행렬 형태는 입력 벡터 크기와 출력 벡터 크기에 따라 결정된다. 해당 크기는 두 벡터 크기의 곱이다. 즉, 많은 수의 픽셀 데이터를 가지는 이미지 데이터는 벡터 크기가 매우 크기 때문에 완전 연결 계층의 가중치 파라미터가 엄청난 크기를 갖게된다. 따라서 학습에 많은 양의 데이터가 요구되고, 메모리에도 부담이 갈 확률이 높다. 그 외에도 이미지에서 특정패턴을 찾을 때 다양한 위치에서 나타날 패턴을 인식하는데도 데이터가 더 많이 필요해질 ..

다층퍼셉트론 - 기본구조 구현

단층 퍼셉트론 - 회귀분석 구현 데이터를 기반으로 전복의 고리수를 예측하는 단층 퍼셉트론을 구현해보자. 주어진 데이터는 'Sex', 'Length', 'Diameter', 'Height', 'Whole weight', 'Shucked weight', 'Viscera weight', 'Shell weight', 그리.. inuplace.tistory.com 단층 퍼셉트론 - 이진판단 구현 https://inuplace.tistory.com/460?category=912534 단층 퍼셉트론 - 회귀분석 구현 데이터를 기반으로 전복의 고리수를 예측하는 단층 퍼셉트론을 구현해보자. 주어진 데이터는 'Sex', 'Length', 'Diameter', 'He.. inuplace.tistory.com 단층 퍼셉트론 ..

다층 퍼셉트론 - 기본구조 이론

다층 퍼셉트론 신경망 구조 다층 퍼셉트론은 복수의 퍼셉트론 계층을 순서를 두고 배치해 입력벡터로부터 은닉 계층을 거쳐 출력벡터를 얻어내는 신경망 구조이다. 은닉 계층이 생성하는 벡터를 은닉 벡터라고 한다. 각각의 계층은 단층 퍼셉트론과 같은 구조를 가진다. 하나의 계층에 속해있는 퍼셉트론은 서로 영향을 주고 받을 수 없다. 인접한 앞 계층의 출력이 뒷 계층의 입력으로 제공될 뿐이다. (완전 연결 방식) 단층 퍼셉트론 대비 기억용량 및 계산능력 부담이 크지만, 성능 향상을 기대할 수 있다. 은닉 계층 수와 폭 다층 퍼셉트론 최종 계층은 원래 데이터의 특징에 맞게 알맞은 형태의 출력 벡터를 생성하는 역할을 한다. (출력 계층) 반면 다른 은닉 계층은 이러한 제약이 없다. 신경망 설계자가 자유롭게 정할 수 있..

Keras Embedding (워드 임베딩)

원핫 벡터는 희소하고 고차원이라는 특징이 있다. 이에 반해 워드 임베딩을 통해 만들어진 벡터는 저차원이며 실수형이다. 원핫 벡터는 보통 20000차원 이상인데 반해 워드 임베딩 벡터는 256~1024차원으로 더 많은 정보를 적은 차원에 저장할 수 있다. 다른 작업에서 사전 훈련된 워드 임베딩을 사용할 수도 있고, 관심 대상인 문제로 직접 워드 임베딩을 구할 수도 있다. Embedding from keras.layers import Embedding # Embedding 층 embedding_layer = Embedding(1000, 64) Embedding이라는 층을 통해 워드 임베딩을 진행할 수 있다. 단어 인덱스를 밀집 벡터로 매핑하는 딕셔너리로 임베딩이 수행된다. 첫번째 파라미터는 토큰 갯수(단어 ..

Keras Tokenizer (단어 인덱스 부여 및 원-핫 인코딩)

Tokenizer 원-핫 인코딩 : 각각의 항목을 벡터차원으로 하고, 표현하고 싶은 항목의 인덱스에 1의 값을 다른 인덱스에는 모두 0을 표기하는 벡터 표현 방식이다. 원-핫 벡터 : 이렇게 표현된 벡터 keras의 Tokenizer 메소드로 이를 간단하게 변환할 수 있다. from keras.preprocessing.text import Tokenizer samples = ['The cat sat on the mat.', 'The dog ate my homework.'] # 가장 빈도가 높은 1,000개의 단어만 선택하도록하는 Tokenizer 객체 tokenizer = Tokenizer(num_words=1000) # 그에 맞게 단어 인덱스를 구축 tokenizer.fit_on_texts(sample..

TensorFlow 텐서플로우를 이용한 딥러닝

데이터 준비하기 import tensorflow as tf import numpy as np data = np.random.sample((100,2)) labels = np.random.sample((100,1)) # numpy 기반 데이터 활용 dataset = tf.data.Dataset.from_tensor_slices((data,labels)) # batch는 총 32개 dataset = dataset.batch(32) 특성 파라미터 2개를 가지고 종속값은 1개인 100개의 데이터를 생성하여 활용한다. 예시를 위한 랜덤 데이터셋이기 때문에 사실 실질적인 관계성을 찾기란 불가능에 가깝다. (학습용으로만 사용) batch 전 : batch 후 : Keras 딥러닝 모델을 만들기 위한 고수준 API 요..

TensorFlow 텐서 초기화

텐서 : 딥러닝에서는 그냥 '다차원 배열'의 의미로 받아들여도 된다. numpy 배열과 비슷하다. GPU와 같은 가속기 메모리에 상주할 수 있다. 이러한 텐서 데이터들이 서로 연산을 주고 받으며 흘러가면서 계산된다. 일반적으로 텐서는 불변성(immutable)이다. 생성 이후 변경할 수 없다. 상수 텐서 초기화 import tensorflow as tf # 값이 일정한 텐서 선언 tensor_a = tf.constant(value, dtype=None, shape=None, name=None) # 모든 값이 value tensor_a = tf.zeros(shape=None, name=None) # 모든 값이 0 tensor_a = tf.ones(shape=None, name=None) # 모든 값이 1 ..

[scikit-learn 라이브러리] KMeans (K-Means)

K - 평균 (K - means) 구현이 쉽고, 다른 군집 알고리즘에 비해 효율이 좋아 인기가 많은 알고리즘이다. 학계와 산업현장 모두에서 활용된다. 프로토 타입 기반 군집(각 클러스터가 하나의 프로토타입으로 표현됨)에 속한다. 프로토 타입 : 연속적 특성에서는 비슷한 데이터 포인트의 centroid(평균) / 범주형 특성에서는 medopid(가장 자주 등장하는 포인트) 몇개의 군집을 설정할 것인지 정해야한다는 다소 주관적인 사람의 판단이 개입된다. (K값 결정) K - 평균의 과정 1) 데이터 포인터에서 랜덤하게 k개의 센트로이드를 초기 클러스터 중심으로 선택한다. 2) 각 데이터를 가장 가까운 센트로이드에 할당한다. 3) 할당된 샘플들의 중심으로 센트로이드를 이동시킨다. 4) 클러스터 할당이 변하지 ..

[scikit-learn 라이브러리] PCA를 사용한 차원축소

주성분 분석 : PCA (Principal component analysis) 고차원의 데이터를 저차원으로 줄이기 위해 사용된다. 예를 들어 시각화를 진행하려고 할 때 우리는 13차원의 데이터를 시각화할 수 없다. 따라서 해당 데이터의 차원을 줄여서 확인해야만 한다. 필연적으로 데이터 손실이 일어나지만 이를 최소화한다. 혹은 고차원에 존재하면서 생긴 노이즈를 없애면서 데이터를 정제하는 일도 가능하다. 정규화와 사이킷런 라이브러리 활용 def normalize(X): for i in range(X.shape[1]): X[:, i] = X[:,i] - np.min(X[:,i]) X[:, i] = X[:,i] - np.max(X[:,i]) return X 데이터 행렬 X를 받고 그를 정규화하여 리턴하는 함수이..