반응형
반응형

 

Join 속도 개선

Join 속도 개선 전에 먼저 현재 작성한 쿼리가 어떤지 파악해야합니다.

Mysql기반 EXPLAIN을 통해 쿼리에 대해 분석해보겠습니다.

** 추후 다른 DBMS에서 확인하는 방법을 추가 업데이트 하도록 하겠습니다.

 

EXPLAIN 사용방법

EXPLAIN
SELECT * FROM 테이블명 WHERE 조건

결과

type 설명

const 기본 키 또는 고유키에 의한 loockup(등가비교), 조인이 아닌 가장 외부의 테이블에 접근 하는 방식, 결과는 항상 1행이다. 단 기본 키, 고유 키를 사용하고 있으므로 범위 검색으로 지정하는 경우 const가 되지 않는다
system 테이블에 1행밖에 없는 경우의 특수한 접근 방식
ALL 전체 행 스캔, 테이블의 데이터 전체에 접근한다.
index 인덱스 스캔, 테이블의 특정 인덱스의 전체 엔트리에 접근한다.
eq_ref 조인이 내부 테이블로 접근할 때 기본키 또는 공유 키에 의한 lookup이 일어난다. const와 비슷하지만 조인의 내부 테이블에 접근한다는 점이 다르다
ref 고유 키가아닌 인덱스에 대한 등가비교, 여러 개 행에 접근할 가능성이 있다.
ref_or_null ref와 마찬가지로 인덱스 접근 시 맨 앞에 저장되어 있는 NULL의 엔트리를 검색한다.
range 인덱스 특정 범위의 행에 접근한다
fulltext fulltext 인덱스를 사용한 검색
index_merge 여러 개인스턴스를 사용해 행을 가져오고 그 결과를 통합한다.
unique_subquery IN 서브쿼리 접근에서 기본 키 또는 고유 키를 사용한다. 이 방식은 쓸데 없는 오버헤드를 줄여 상당히 빠르다.
index_subquery unique_sunquery와 거의 비슷하지만 고유한 인덱스를 사용하지 않는 점이 다르다. 이 접근 방식도 상당히 빠르다
  • ALL, eq_ref: 조인시 기본 키나 고유키를 사용하여 하나의 값으로 접근(최대 1행만을 정확하게 패치).
  • ref: 여러 개의 행을 패치할 가능성이 있는 접근.

 

컬럼 extra는 옵티마이저가 동작에 대한 힌트입니다.

extra 설명

Using where 접근 방식을 설명한 것으로, 테이블에서 행을 가져온 후 추가적으로 검색조건을 적용해 행의 범위를 축소한 것을 표시한다.
Using index 테이블에는 접근하지 않고 인덱스에서만 접근해서 쿼티를 해결하는 것을 의미한다. 커버링 인덱스로 처리됨 index only scan이라고도 부른다
Using index for group-by Using index와 유사하지만 GROUP BY가 포함되어 있는 쿼리를 커버링 인덱스로 해결할 수 있음을 나타낸다
Using filesort ORDER BY 인덱스로 해결하지 못하고, filesort(MySQL의 quick sort)로 행을 정렬한 것을 나타낸다.
Using temporary 암묵적으로 임시 테이블이 생성된 것을 표시한다.
Using where with pushed 엔진 컨디션 pushdown 최적화가 일어난 것을 표시한다. 현재는 NDB만 유효
Using index condition 인덱스 컨디션 pushdown(ICP) 최적화가 일어났음을 표시한다. ICP는 멀티 칼럼 인덱스에서 왼쪽부터 순서대로 칼럼을 지정하지 않는 경우에도 인덱스를 이용하는 실행 계획이다.
Using MRR 멀티 레인지 리드(MRR) 최적화가 사용되었음을 표시한다.
Using join buffer(Block Nested Loop) 조인에 적절한 인덱스가 없어 조인 버퍼를 이용했음을 표시한다.
Using join buffer(Batched Key Access) Batched Key Access(BKAJ) 알고리즘을 위한 조인 버퍼를 사용했음을 표시한다.

 

 

EXPLAIN을 통해 분석하여 검색 범위 및 옵티마이저 동작에 문제가 없는데도 속도가 느리다면 아래 사항에 대해서 검토 해보면 좋습니다.

- left outer join 등 보다는 inner join 속도가 빠릅니다.

- 테이블에서 행의 순서를 가져올 때 분리해서 가져오는것도 생각해봐야합니다.(여러 테이블과 조인한 상태에서 테이블에 행을 가져오는건 속도 저하를 유발합니다.)

- 스칼라 서브 쿼리는 지양해야합니다.(실무에서 쿼리짜는 도중 스칼라 서브 쿼리를 사용했을 때 속도 차이가 많이 났습니다.)

반응형

'DB > MySQL' 카테고리의 다른 글

MySQL 계정에 DB 권한 부여  (0) 2024.09.05
MySQL Query 최대 용량  (1) 2024.09.05
EXISTS 사용 방법  (0) 2023.07.15
반응형

mini batch란?

미니 배치(Mini-batch)는 데이터를 작은 그룹으로 나누어 신경망 모델의 학습을 수행하는 방법입니다. 일반적으로 전체 데이터셋을 한 번에 사용하여 학습하는 것보다 미니 배치를 사용하는 것이 계산 효율성과 일반화 성능 측면에서 유리합니다.

 

mini batch 학습 단계

  1. 데이터셋 분할: 전체 데이터셋을 작은 배치로 나눕니다. 배치는 주로 2 거듭제곱 개수로 설정됩니다(: 32, 64, 128 ).
  2. 순전파: 미니 배치에 대해 순전파를 수행하여 예측값을 계산합니다. 입력 데이터와 예측값을 기반으로 손실 함수를 계산합니다.
  3. 역전파: 손실 함수를 사용하여 역전파를 수행하여 가중치와 편향에 대한 그래디언트(gradient) 계산합니다.
  4. 매개변수 업데이트: 계산된 그래디언트를 사용하여 가중치와 편향을 업데이트합니다. 이를 위해 최적화 알고리즘(: 확률적 경사 하강법) 사용합니다.
  5. 위의 2~4단계를 반복: 나머지 미니 배치에 대해서도 순전파, 역전파, 매개변수 업데이트를 반복하여 모든 미니 배치에 대한 학습을 완료합니다.

 

mini batch 장점

  • 계산 효율성: 전체 데이터셋을 한 번에 처리하는 것보다 작은 배치로 처리하는 것이 계산 속도를 향상시킵니다. 특히 GPU와 같은 병렬 컴퓨팅 환경에서 효과적입니다.
  • 일반화 성능: 미니 배치 학습은 모델이 더 일반화되도록 도움을 줍니다. 미니 배치를 사용하면 데이터의 다양성을 높이고, 모델이 더 일반적인 패턴을 학습하도록 돕습니다.
  • 경사 하강법의 안정성: 미니 배치 학습은 학습 과정에서 그래디언트의 평균을 사용하기 때문에 노이즈에 대한 영향을 줄일 있습니다. 이는 학습 과정의 안정성을 향상시킵니다.
반응형

'머신러닝 & 딥러닝 > 용어' 카테고리의 다른 글

Bounding box coordinates(in 딥러닝)  (0) 2023.04.09
반응형
반응형

SVM이란

SVM은 "Support Vector Machine(서포트 벡터 머신)"의 약자로, 패턴 인식, 분류 및 회귀 분석 등의 머신러닝 문제에 널리 사용되는 지도 학습 알고리즘입니다.

SVM은 주어진 데이터를 고차원 공간으로 매핑하여 데이터를 분류하는 결정 경계를 찾는 기법입니다. 이를 위해 SVM은 데이터 포인트들을 서로 구분하는 최대 마진(Margin)을 갖는 결정 경계를 찾는 것을 목표로 합니다. 이 최대 마진을 갖는 결정 경계는 데이터를 더욱 정확하게 분류할 수 있는 경계라고 볼 수 있습니다.

SVM은 다음과 같은 주요 특징을 갖습니다:

  1. 선형 분류와 비선형 분류: SVM은 선형 분류 문제에서 뛰어난 성능을 발휘할 수 있습니다. 그러나 데이터가 선형적으로 분리되지 않는 경우에도 커널 트릭(kernel trick)을 사용하여 비선형 결정 경계를 생성할 수 있습니다. 커널 트릭은 데이터를 고차원 공간으로 매핑하여 선형 분류를 수행하는 것보다 효율적인 방법입니다.
  2. 서포트 벡터: SVM은 분류 경계와 가장 가까이 위치한 데이터 포인트들을 "서포트 벡터"라고 부릅니다. 이 서포트 벡터들이 결정 경계를 정의하는 데 중요한 역할을 합니다. SVM은 오직 서포트 벡터들만을 사용하여 결정 경계를 구성하고, 이를 통해 계산 및 예측 과정에서 효율성을 높입니다.
  3. 커널 함수: SVM은 커널 함수를 사용하여 데이터를 고차원 공간으로 매핑합니다. 커널 함수는 입력 데이터의 특성을 적절하게 변환하여 선형 불가능한 문제를 해결할 수 있도록 돕습니다. 대표적인 커널 함수로는 선형 커널, 다항식 커널, 가우시안(RBF) 커널 등이 있습니다.

SVM 데이터의 분류 외에도 회귀 분석에도 사용될 있습니다. SVM 회귀는 주어진 데이터 포인트들이 일정한 마진 내에서 얼마나 위치하는지를 고려하여 회귀 분석을 수행합니다.

 

 

 

추가 지식

- 최대 마진(Maximum Margin) SVM 데이터를 분류하는 결정 경계와 클래스 간의 가장 넓은 간격을 의미합니다.

반응형

'머신러닝 & 딥러닝' 카테고리의 다른 글

Feature space  (0) 2023.05.14
Failed to get CPU frequency: 0 Hz  (0) 2023.05.06
tf.config.set_visible_devices()  (0) 2023.05.06
[library] seaborn  (0) 2023.04.28
AUC란?  (0) 2023.04.26
반응형
반응형

Feature space이란?

머신러닝에서 "feature space(특성 공간)"란 데이터의 특성을 나타내는 변수들로 이루어진 공간을 의미합니다. 각 데이터 포인트는 이 특성 공간 상의 한 점으로 표현됩니다.

데이터의 특성은 문제에 따라 다르지만, 일반적으로 숫자, 범주형 값, 텍스트, 이미지 등으로 표현됩니다. 이러한 특성들은 모델이 패턴을 학습하고 예측을 수행하는 데 사용됩니다.

예를 들어, 이미지 분류 문제에서 각 이미지는 특성 공간 상의 한 점으로 표현됩니다. 이 특성 공간은 이미지의 각 픽셀 값을 차원으로 갖는 공간일 수 있습니다. 따라서 64x64 크기의 이미지는 4,096 차원의 특성 공간으로 표현될 수 있습니다.

Feature space의 차원 수는 데이터셋에 따라 다를 수 있으며, 머신러닝 알고리즘의 성능과 학습의 복잡도에 영향을 줄 수 있습니다. 때로는 feature space의 차원을 줄이는 차원 축소 기법을 사용하기도 합니다. 이를 통해 고차원 데이터를 저차원의 특성 공간으로 매핑하여 계산 및 시각화의 효율성을 높일 수 있습니다.

 

Feature space 그림 설명

위의 그림은 2차원 feature space를 나타냅니다. 여기에는 두 개의 특성, Feature 1과 Feature 2가 있습니다. 각각의 데이터 포인트는 특성 공간 상의 한 점으로 표현됩니다.

예를 들어, (3, 2)는 Feature 1의 값이 3이고 Feature 2의 값이 2인 데이터 포인트를 나타냅니다. 마찬가지로, (1, 4), (5, 6), (2, 1)은 각각 다른 데이터 포인트를 나타냅니다.

머신러닝 모델은 이러한 데이터 포인트들을 분석하여 패턴을 학습하고 예측을 수행합니다. Feature space에서는 데이터 포인트들 간의 상대적인 위치와 패턴을 이해하여 결정 경계를 학습할 수 있습니다. 이렇게 feature space를 이해하면, 머신러닝 모델이 어떻게 데이터를 분류하고 예측하는지 더 잘 이해할 수 있습니다.

 

Feature space에서 feature 간의 distance 측정 방법

1. 유클리디안 거리(Euclidean distance): 유클리디안 거리는 feature space에서 가장 흔히 사용되는 거리 측정 방법입니다. 두 점 A(x1, y1)와 B(x2, y2) 사이의 유클리디안 거리는 아래와 같이 계산됩니다.

distance = sqrt((1 - 3)^2 + (4 - 2)^2) = sqrt(4 + 4) = sqrt(8) ≈ 2.83

 

예를 들어, 2차원 feature space에서 (3, 2)와 (1, 4) 사이의 거리를 계산하려면 다음과 같이 계산합니다:

distance = sqrt((x2 - x1)^2 + (y2 - y1)^2)

 

2. 맨하탄 거리(Manhattan distance): 맨하탄 거리는 두 점 사이의 가로 및 세로 방향의 거리를 합산하여 계산하는 방법입니다. 맨하탄 거리는 두 점 사이의 "도시 블록" 거리라고도 불립니다. 두 점 A(x1, y1)와 B(x2, y2) 사이의 맨하탄 거리는 아래와 같이 계산됩니다.

distance = |1 - 3| + |4 - 2| = 2 + 2 = 4

 

예를 들어, 2차원 feature space에서 (3, 2)와 (1, 4) 사이의 거리를 맨하탄 거리로 계산하면 다음과 같습니다:

distance = |x2 - x1| + |y2 - y1|

 

3. 코사인 유사도(Cosine similarity): 코사인 유사도는 벡터 간의 방향성을 고려하여 거리를 측정하는 방법입니다. 특히, 희소한(high-dimensional sparse) 벡터에 유용하게 사용됩니다. 두 벡터 A와 B 사이의 코사인 유사도는 아래와 같이 계산됩니다.

similarity = dot(A, B) / (norm(A) * norm(B))

 

여기서 **dot(A, B)**는 벡터 A와 B의 내적(dot product)을 나타내며, **norm(A)**와 **norm(B)**는 각각 벡터 A와 B의 노름(norm)을 나타냅니다.

 

추가 지식

sqrt():  x의 제곱근의 비음수 값을 계산합니다. 리턴 값으로는 제곱근 결과를 리턴합니다. x가 음수인 경우, 함수는 errno EDOM으로 설정하고 0을 리턴합니다.

반응형

'머신러닝 & 딥러닝' 카테고리의 다른 글

SVM  (0) 2023.05.14
Failed to get CPU frequency: 0 Hz  (0) 2023.05.06
tf.config.set_visible_devices()  (0) 2023.05.06
[library] seaborn  (0) 2023.04.28
AUC란?  (0) 2023.04.26
반응형
반응형

AOP이란?

AOP(Aspect Oriented Programming)이란 공통 관심 사항을 코드로 구현하고, 그걸 모듈화 해서 사용하는 프로그래밍 기법입니다.

반응형
반응형
반응형

REST란?

REST는 웹과 같은 분산 하이퍼 미디어 환경에서 자원의 존재 또는 상태 정보를 표준화된 HTTP 메서드로 주고 받는 웹 아키텍처입니다.

쉽게 말해 정해진 대로 HTTP 메서드를 통해 내용을 전달한다는 내용입니다.

반응형
반응형
반응형

SOAP이란?

SOAP는 Simple Objectr Access Protocol로써 웹 서비스에서 기본적인 메서지를 전달하는 기반이 되는 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메세지를 컴퓨터 네트워크상에서 교환하는 프로토콜입니다.

매우 중요한 개념입니다.

반응형
반응형
반응형

문제

먼저 GitHub에서 repository 생성하고 나면 자동으로 main branch가 생성이 됩니다.

이후, 터미널에서 git init하면 master branch로 시작되어 commit 이후 push하게 되면 GitHub에서 master branch 내용을 main branch로 넘기는 과정에서 error가 발생하게 됩니다.

 

해결

아래 내용을 순서대로 진행하면 됩니다.

> git checkout master

> git branch main master -f

> git checkout main

> git push origin main -f
반응형

'IT' 카테고리의 다른 글

REST란?  (0) 2023.05.11
SOAP이란?  (0) 2023.05.11
Jupyter Notebook not trusted  (0) 2023.05.06
'list' object is not callable  (0) 2023.04.23
fatal: 관계 없는 커밋 내역의 병합을 거부합니다  (0) 2023.04.20

+ Recent posts