반응형

머신러닝

unsupervised learning

 

K-means algorithm

군집화 문제를 풀기 위한 자율 학습 알고리즘의 일종입니다.

이 알고리즘은 간단한 방법으로 주어진 데이터를 지정된 군집(cluster) 개수 (K)로 그룹화합니다 

한 군집 내의 데이터들은 동일한 성질을 가지며 다른 그룹과는 구별됩니다.

즉 한 군집 내의 모든 원소들은 군집 밖의 데이터보다 서로 더 닮아 있습니다.

 

centroid  -> k개의 점

이들은 각기 다른 그룹의 중심점을 나타내며 데이터들은 K개의 군집 중 하나에만 속할 수 있다.

한 군집 내의 모든 데이터들은 다른 어떤 중심들보다 자기 군집 중심과의 거리가 더 가깝습니다. 

 

초기단계 (0단계): K 개 중심의 초기 집합을 결정

할당단계 (1단계): 각 데이터를 가장 가까운 군집에 할당

업데이트 단계 (2단계) : 각 그룹에 대해 새로운 중심을 계선

 

20211209

k-평균 알고리즘

k-means 알고리즘

1. 우선 전체를 k개의 그룹으로 나눕니다. 

2. 각 점에 무작위로 그룹을 할당한 다음 그룹 각각의 중심(보통은 무게 중심)과의 (유클리드 거리 등)를 계산합니다. 

3. 어떤 그룹에 속해 있는 점이 다른 그룹과 거리가 더 가깝다면 해당 점을 거리가 가까운 그룹으로 변경합니다. 

4. 이러한 작업을 반복해서 가까운 점 끼리 묶어 k개의 그룹으로 나눕니다. 

 

20211210

중심점만 기준으로 삼다가 잘못 된 그룹으로 할당할 수 있는 문제나 계산 시간이 길어지는 등의 문제가 있습니다 

최초에 정하는 K값은 감으로 결정할 때가 많지만 계산으로 구해서 결정할 수 도 있다 .

K를 결정할 때는 혼합 디리클레 모델을 사용합니다. 

베이즈 모델 기반의 접근 방식으로 디리클레 분포가 다항분포의 결합 사전분포라는 점을 이용합니다. 

 

출처 :

텐서플로 첫걸음

처음 배우는 인공지능

반응형

'개념 정리' 카테고리의 다른 글

활성화함수_20210916  (0) 2021.10.11
MNIST 데이터셋_20210915  (0) 2021.10.07
학습률_20210913  (0) 2021.10.07
경사하강법_20210912  (0) 2021.10.06
평균제곱오차_20210911  (0) 2021.10.06
반응형

소스코드.py
0.00MB

01. 자율 학습

자율 학습

unsupervised learning: 정답 정보가 없는 상태에서 학습을 통해 모델을 만드는 것입니다.

 

클러스터 분석과 k-평균 알고리즘

01. 자율 학습

 

자율 학습

 

unsupervised learning: 정답 정보가 없는 상태에서 학습을 통해 모델을 만드는 것입니다.

 

클러스터 분석과 k-평균 알고리즘

클러스터 분석 cluster analysis: 자율학습의 대표적인 접근 방법

평면상에 그려져 있는 점들을 그룹으로 만듭니다.그룹으로 만들 때는 점들 사이가 어느 정도 떨어져 있는지를 지표로 삼습니다.

 

k-평균 알고리즘 과정

우선 전체를 k개의 그룹으로 나눕니다.

각 점에 무작위로 그룹을 할당한 다음 그룹 각각의 중심(보통은 무게 중심)과의 거리(유클리드 거리 등)를 계산합니다.

어떤 그룹에 속해 있는 점이 다른 그룹과 거리가 더 가깝다면 해당 점을 거리가 가까운 그룹으로 변경합니다.

이러한 작업을 반복해서 가까운 점끼리 묶어 k개의 그룹으로 나눕니다.

 

그룹의 중심점만 기준으로 삼다가 잘못된 그룹으로 할당할 수 있는 문제나 계산 시간이 길어지는 등의 문제가 있습니다.

최초에 정하는 k값은 감으로 결정할 때가 많지만 계산으로 구해서 결정할 수 도 있습니다.

k를 결정할 때는 혼합 디리클레 모델을 사용합니다.

혼합 디리클레 모델은 베이즈 모델 기반의 접근 방식으로 디리클레 분포가 다항분포의 결합 사전 분포라는 점을 이용합니다.

 

주성분 분석 principal component analysis

데이터 처리 방식

고차원의 데이터를 저차원으로 정리해 차원 압축(차원 감소)을 실행합니다.

주성분 분석 외에 고차원 데이터를 차원 압축하는 방법으로 t-SNE가 있습니다. t-SNE는 정규분포를 따르는 확률로 고차원 거리를 계산해 고차원으로 옮깁니다.

 

특잇값 분해: SVD

주성분을 분석할 때는 행렬로 데이터를 나타낸 후 공분산 행렬을 계산해 고윳갑솨 고유 벡터를 구합니다.

 

독립 성분 분석 Independent compositin analysis ICA : 통계 독립성을 극대화하는 예측 성분을 찾는 것

자기조직화지도 Self organization Map ,som : 자율학습의 출력 결과를 이용해 클러스터 분석한 것은 자기조직화의 연관이 커서 자기조직화지도라고 합니다.

 

 

02. 지도학습

정답 정보가 들어 있는 데이터를 기준으로 모델을 만드는 지도학습이라고 합니다. supervised Learning

 

서포트 백터 머신: support vector machine svm은 데이터 분포를 나누는 기준을 결정하는 지도학습모델중 하나입니다.

베이즈 필터와 단순 베이즈 분류 : 베이즈 정리는 학습과의 친화성이 높아 지도 학습 알고리즘에 이용합니다. 특히 베이즈 필터중에서 단순(나이브) 베이즈 분류 Naive Bayes Classification가 유명합니다.

베이즈 필터를 이용하는 대표적인 예는 스팸 메일 판정이나 문서의 카테고리 분류입니다.

 

ID3: 

정답 데이터를 이용해 결정 트리를 만드는 알고리즘의 하나가 ID3가 있습니다. ID3는 의사 결정 트리를 기반으로 모든 데이터를 제대로 분류할 때까지 노드를 추가합니다.

 

랜덤포레스트

서포트 백터 머신과 함께 데이터의 분포를 분류하는 유명한 방법은 랜덤포레스트입니다.

랜덤 프레스트는 무작위로 뽑은 데이터를 이용해 학습하면서 많은 결정 트리를 구축하며 의사 결정 트리를 만들 때 마다 결정 트리 구성을 약간씩 변화시킵니다.

 

타당성 검증 validation:

모델을 만들 때는 모델이 얼마나 정확한 결고를 계산하는지를 객관적으로 측정해야 합니다.

 

식별 모델의 평가와 ROC곡선

roc곡선 Receiver operating characteristic은 식별 모델의 성능을 평가하는 방법입니다.

 

홀드 아웃 검증과 교차 검증

홀드 아웃 검증 holdout method: 데이터를 훈련 데이터와 테스트 데이터를 사용하지 않는 검증 방법입니다.

k겹 교차 검증 k-fold croos-validation : 데이터를 K개의 그룹으로 나눈 후 그룹 하나를 제외한 나머지 데이터를 훈련 데이터로 설정합니다.

LOOCV(LEAVE-ONT-OUT CROSS -VALIDATION) :K켭 교차 검증에서 K가 데이터 개수와 같을 때를 뜻합니다. 데이터 수가 적을 때 사용합니다.

 

03. 텐서플로를 이용한 K-평균 예제

필요한 모델 불러오기

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns

데이터 정의하기

num_dots = 1000
num_clusters = 3
num_epochs = 100

데이터 정의

dots = []
for i in range(num_dots):
    if np.random.random() > 0.66:
        dots.append([np.random.normal(0.0, 1.0) , np.random.normal(2.0, 0.5)])
    elif np.random.random() > 0.33:
        dots.append([np.random.normal(2.0, 1.3) , np.random.normal(-1.0, 0.6)])
    else:
        dots.append([np.random.normal(-1.0, 0.8) , np.random.normal(-2.0, 1.2)])

pandas 라이브러리를 이용해 좌표를 데이터 프레임 형태로 저장합니다.

df = pd.DataFrame({"x":[v[0] for v in dots] , "y":[v[1] for v in dots]})
df.head(10)

마지막으로 seaborn라이브러리를 이용해 데이터를 시각화 해봅니다.

sns.lmplot("x","y", data = df, fit_reg = False, size = 7)
plt.show()

시각화 결과

k-평균 그래프 생성하기

vectors = tf.constant(dots)
vectors.get_shape()

TensorShape([Dimension(1000), Dimension(2)])

 

tf.Variable 사용하여 무작위로 섞기

centroids = tf.Variable(tf.slice(tf.random_shuffle(vectors), [0,0] , [num_clusters, -1]))
centroids.get_shape()

TensorShape([Dimension(3), Dimension(2)])

 

차원

expanded_vectors = tf.expand_dims(vectors, 0)
expanded_centroids = tf.expand_dims(centroids, 1)

print(expanded_vectors.get_shape())
print(expanded_centroids.get_shape())

(1, 1000, 2)

(3, 1, 2)

distance = tf.reduce_sum(tf.square(tf.subtract(expanded_vectors, expanded_centroids)) , 2)
assignments = tf.argmin(distance, 0)
assignments.get_shape()

TensorShape([Dimension(1000)])

 

means = tf.concat([tf.reduce_mean(tf.gather(vectors, tf.reshape(tf.where(tf.equal(assignments,c)), [1,-1])),reduction_indices = [1])
    for c in range(num_clusters)],0)
centroids_updated = tf.assign(centroids, means)
with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for step in range(num_epochs):
        _, centroid_values, assignment_values = sess.run([centroids_updated, centroids, assignments])
print("중심점")
print(centroid_values)

시각화해 보여주기

data = {"x":[],"y":[],"cluster":[]}
for i in range(len(assignment_values)):
    data["x"].append(dots[i][0])
    data["y"].append(dots[i][1])
    data["cluster"].append(assignment_values[i])
df = pd.DataFrame(data)
sns.lmplot("x","y", data = df, fit_reg = False, size = 7, hue = "cluster", legend= False)
plt.show()

출처 : 처음 배우는 인공지능

반응형
반응형

선형회귀분석 Linear regression: 독립변수 x, 상수형 b와 종속변수 y 사이의 관계를 모델링하는 방법입니다.

두 변수 사이의 관계일 경우 단순회귀라고 하며 여러 개의 변수를 다루는 다중회귀도 있습니다.

 

비용함수 cost function: 반복이 일어 날 때마다 개선되고 있는지 확인하기 위해 얼마나 좋은(나쁜) 직선인지를 

추정하는 것입니다.

비용함수는 오차함수 error function라고도 합니다.

 

평균제곱오차 mean square error: 실제 값과 알고리즘이 반복마다 추정한 값 사이의 거리를 오차로 하는 것의

평균입니다.

 

경사 하강법  gradient descent: 함수값을 최소화 하는 최적화 알고리즘은 경사 하강법이 하는 역할입니다.

 

기울기 gradient: 음의 방향 쪽으로 진행하면서 반복적으로 최적화를 수행합니다.

 

학습 속도 learning rate 는 텐서플로가 각 반복 때마다 얼마나 크게 이동할 것인가를 제어합니다.

학습 속도를 너무 크게 하면 최솟값을 지나쳐 버릴 수 있습니다.

학습 속도를 너무 작게 하면 최솟값에 다다르는 데 많은 반복이 필요하게 됩니다.

 

군집화

 

supervised learning 지도학습 :

입력 데이터와 출력값(레이블)을 함께 사용한것

 

군집화 clustering 자율학습 이다.

k-평균 알고리즘: 데이터를 다른 묶음과 구분되도록 유사한 것끼리 자동으로 그룹화할 때 가장 많이

사용되는 유명한 알고리즘이다. 한 군집 내의 데이터들은 동일한 성질을 가지며 다른 그룹과는 

구별됩니다.

알고리즘의 결과는 중심centroid이라고 부르는 k개의 점 dot으로서 , 이들은 각기 다른 그룹의 

중심점을 나타내며 데이터들은 K개의 군집 중 하나에만 속할 수 있습니다.

 

기본자료구조 : 텐서

텐서는 동적 크기를 찾는 다차원 데이터 배열로 볼 수 있으며 불리언이나 문자열 , 여러종류의 숫자 

같은 정적 자료형을 가집니다.

텐서의 차원을 표현하기 위해 shape, rank, dimension number

 

 

자율학습 unsupervised learning:

 

 

다층 계층 신경망

합성공 신경망 convolution neural network(CNN 또는 ConvNet이라고도 부릅니다) 이란 딥러닝의 특별한 케이스이며 컴퓨터 비전 분야에 아주 커다란 영향을 주어왔습니다.

합성공 신경망의 주요 목적은 테두리 , 선, 색 등 이미지의 시각적 특징 characteristic이나 특징 feature을 감지하는 것입니다.

 

fully connect

 

스트라이드 stride: 한번에 얼마큼 움직일지를 결정하는 이 매개변수 

패딩 padding: 채울 테두리의 크기를 지정하는 매개변수 

 

 

드룹아웃 dropout이라는 기법을 통해 신경망에서 필요한 매개변수 수를 줄이는 것입니다. 이는 노드를 삭제하여 입력과 출력 사이의 연결을 제거하는 것입니다.

 

병렬처리

"/cpu:0":서버의 CPU를 지정함

"/gpu:0":서버의 첫 번째 GPU를 지정함

"/gpu:1":서버의 두 번째 GPU를 저정함, 세 번째 이후는 2,3,4, ... 식입니다.

 

부록 A: 한국어판 : 순환 신경망과 LSTM

A.1 순환 신경망 알고리즘

보통의 신경망 알고리즘으로는 이전의 맥락을 이해하면서 현재의 단어를 이해하는 것 같은 데이터의 맥락을 학습 시킬 수가 없스빈다. 그래서 이런 단점을 해결하고자 순환 신경망 recurrent neural network(RNN)알고리즘이 개발되었습니다. 

RNN 에서 순환한다는 의미는 다음 그림에서 볼 수 있듯이 신경망의 뉴런에서 나온 정보가 다시 재상용 되도록 순환되기 때문입니다.

 

어떤 시간 (t)의 뉴런에는 그 이전 시간(t-1) 에 생성된 뉴런의 상태가 주입되어 새로운 상태가 만들어지고 , 그 데이터는 다시 그 이후 시간(t+1)에 입력되는 구조입니다. 순환 신경망에서는 종종 이런 뉴런을 메모리 셀 memory cell혹은 그냥 셀 cell이라고 부릅니다. 

 

셀에서 만드는 상태 데이터는 보통 은닉상태 라고 부릅니다.

 

A.2 LSTM순환 신경망 알고리즘

기본적인 순환 신경망은 단기기억 short-term memory을 지정할 수 있다

 

하지만 학생이라는 정보가 꽤 멀리 떨어져 있다면 기본적인 순환 신경망 알고리즘으로 이 정보를 멀리까지 실어나르기는 어렵습니다. 이런 단점을 계산하기 위해서 LSTM long short-term memory순환 신경망 알고리즘이 등장하였습니다.

말 그대로 단기기억을 더 길게 유지시켜주는 이 알고리즘은 기본 순환 신경망 알고리즘의 효과를 크게 향상시켜주므로 여러 분야에 걸쳐 널리 사용되고 있습니다.

 

LSTM 순환 신경망은 은닉 상태와 셀 상태 cell state두가지를 계산합니다.

은닉 상태는 상위 계층의 입력 값으로 전달되고 다음번 계산을 위해서도 전달되지만 셀 상태 (c)는 상위 계층으로는 전달되지 않습니다. 

 

LSTM순환 신경망은 새로운 셀 상태를 계산하기 위해 삭제 게이트와 입력게이트 두가지를 이용합니다.

삭제 게이트는 이전 셀 상태의 값 중 삭제해야 할 정보를 학습시키기 위한것이고 

입력 게이트는 새롭게 추가해야 할 정보를 학습하게 도와줍니다.

삭제 게이트는 이전 셀 상태와 P에 시그모이드 활성화 함수를 적용한 것을 곱하여 계산합니다.

입력 게이트는 p에 시그모이드 활성화 함수를 적용한 것과 p에 하이퍼볼릭 탄젠트 활성화 함수를 적용한 것을 곱하여 구합니다.

죄종적으로 현재 셀 상태는 삭제 게이트 결과 와 입력 게이트 결과를 더해서 구합니다.

 

 

은닉 상태의 계산은 위에서 구한 현재의 셀 상태에 하이퍼블릭 탄젠트 활성화 함수를 적용하고 p에 시그모이드 활성화 함수를적용한 것을 곱합니다.

 

계산된 값으로 다음번에 셀의 상태를 계산하기 위해서 저장되었다가 전달됩니다.

 

 

A.3 오버피팅 문제 

드롭아웃 : 합성곱 신경망을 포함하여 일반적인 피드포워드 신경망에서 모델이 학습 데이터에 과다하게 치중되어 만들어지는 것을 막아주는 좋은 방법입니다.

 

A.4 언어 모델링

 

A.5 클래스 설정 

 

A.6 학습데이터 

미니배치 알고리즘은 전체 데이터를 무작위로 섞은 후에 추출하는 것이 보통이지만 순환 신경망에서는 순차적인 데이터 처리를 해야 하기 때문에 미니배치 데이터를 추출하는 방법을 조금 다르게 해야 한다. 일반적으로 전체 데이터에서 문장 단위로 나누어 임의의 순서대로 섞을 수 있으나 이 예제에서는 20개의 배치를 나누어 조금씩 읽어오는 방법을 사용했습니다.

 

 

A.7 모델 생성 클래스

 

A.8 반복함수

 

A.9 결과

학습의 결과는 언어 모델링에서 자주 사용하는 혼잡도 perplexity를 계산하여 평가합니다.

 

GRU gated recurrent unit순환 신경망 

GRU 순환 신경망은 입력 게이트와 삭제 게이트를 하나의 업데이트 게이트로 묶고 셀 상태 와 은닉 상태를 합친것이 특징입니다. 

 

 

출처 : 텐서플로 첫걸음

반응형

'Deep learning > 개념' 카테고리의 다른 글

Optimizer  (0) 2021.03.27
Activation Function  (0) 2021.03.27
DBN  (0) 2021.03.27
알고리즘 개념  (0) 2021.03.21
top-1 and top-5  (0) 2020.08.18

+ Recent posts