군집화 알고리즘 (K-Means Clustering)
·
[AI] - Machine Learning
이번 포스트에서는 저번 포스트에서 다루었던 군집화 알고리즘 중 대표적인 방법인 K-Means Clustering에 대해 알아보겠다. K-Means Clustering 알고리즘은 이름에서 알 수 있다시피 K개의 군집을 정하며, 데이터들의 평균 중심(거리의 평균)을 각 군집의 중심점으로 삼는다. STEP 1 : 군집의 갯수만큼 임의의 위치에 중심점을 정한다.STEP 2 : 각 데이터를 가장 가까운 중심점에 해당하는 군집에 소속시킨다.STEP 3 : 각 군집에 속해있는 데이터들의 평균 거리를 갖는 중심위치로 군집의 중심점을 이동시킨다. STEP 2~3의 과정을 반복하고, 중심점의 위치에 변화가 없을 경우 군집화 과정을 멈춘다. 알고리즘 자체는 단순하지만, 피처 수가 많아지면 기하급수적으로 느려지는 현상이 있..
Recurrent Neural Network (RNN) - Code
·
[AI] - Neural Network
이번 포스트에서는 지난 포스트에서 다루었던 RNN의 이론을 바탕으로 코드로 직접 구현해본다. RNN의 은닉층 연산에 대해 간단히 복습을 해보자. $h_{t} = tanh(W_{x}x_{t} + W_{h}h_{t-1} + b)$ 위 식은 이전 메모리 셀의 은닉 상태($h_{t-1}$)와 현재 시퀀스의 입력 데이터($x_{t}$)를 바탕으로 현재 메모리 셀의 은닉 상태를 연산하는 식을 의미한다. $D_{h}$ : 은닉층의 크기$d$ : 입력 벡터의 크기 (피처 수, 단어의 종류 수) Numpy를 통한 구현import numpy as np# sequence data : N x T x D (샘플 수 x 시퀀스 수 x 차원 수)time_steps = 10 # T (시퀀스 수)input_dim = 4 # ..
단방향 연결 리스트 (Single Linked List)
·
[CS] - Data Structure
지난 포스트에서는 데크에 대해서 다루었다. 데크의 직접 구현 부분에서는 연결 리스트를 사용하여 구현했다. 그래서 실은 순서가 뒤집히지 않았나 싶지만.. collections 라이브러를 통해서도 데크를 사용할 수 있기에 이번 포스트를 읽고 지난 포스트를 다시 보기를 권장한다. 각설하고, 이번 포스트에서는 연결 리스트에 대해서 다루겠다. 연결리스트의 키워드를 세 가지 뽑으라면 필자는 이렇게 말할 것이다. 노드, 삽입, 수정 리스트나 스택, 큐에서는 보관하고 있는 데이터가 raw data (원시 데이터 - 이를테면, 정수형) 였다. 하지만, 연결 리스트에 사용되는 데이터의 (클래스) 타입은 Node 이다. 왜 굳이 클래스를 사용하는가? 그것은 단순히 원시 데이터 이외에도 다음 노드를 가르킬 포인터(next)..
데크 (Deque)
·
[CS] - Data Structure
저번 포스트에서는 나서스의 스택에 스택과 큐에 대해 알아보았다. 이번 포스트에서는 큐의 연장선상 개념(?)인 데크에 대해서 알아보겠다. 데크는 풀네임 영어로 Double Ended Queue를 의미한다. 즉, 양방향으로 끝이 존재하는 큐를 뜻한다. 이번에도 역시 그림을 그려보자. 큐와 모양 자체는 똑같다! 하지만, 큐는 한뱡으로 들어가고 나갈 수 없는 방면에 데크는 양끝에 데이터가 들어오고 나갈 수 있는 특징이 있다. 그렇다면 데크를 왜 사용하는지 알아보자. 이는 파이썬의 리스트 자료형과 비교하면 알 수 있다. 우리가 리스트에 insert하는 과정을 그림으로 그리면 다음과 같다. 먼저 insert를 하기 위한 공간 하나를 할당해주어야 한다. 그 다음 기존에 존재하던 자료의 갯수(N개, 위 그림에서는 ..
스택과 큐 (Stack and Queue)
·
[CS] - Data Structure
스택과 큐라고 하면 무엇이 떠오르는가? 지금은.. 나서스의 스택을 안떠올렸으면 좋겠다. (스택의 의미가 아닌것은 아니지만..) 이 포스트를 통해 스택의 개념을 익히면 나서스가 왜 스택을 쌓는다고 표현할지 알것이다. 우선 직관적으로 접근하기 위해서는 그림을 그려보자. 스택과 큐를 유리컵에 비유하자면, 스택은 바닥이 막혀있는 유리컵이고 큐는 바닥이 뚫려있는 유리컵이다. 그리고 우리가 물건을 넣은 모습은 다음과 같다. 둘다 물건을 위에서 집어넣었다고 생각해보자. 그럼 물건을 어떻게 꺼낼까? 스택은 마지막에 넣은 물건을 먼저 꺼내야하고, 큐는 가장 처음에 넣었던 물건을 먼저 꺼낼 수 있다. [정리]스택은 선입후출(FILO: First In Last Out, 먼저 들어온게 마지막에 나감)큐는 선입선출(F..
데코레이터 (Decorator)
·
[Language] - Python
개요데코레이터를 이해하기 이전에 함수형 프로그래밍에 대한 (함수를 일급시민으로 취급하는) 개념을 먼저 살피고 오면 좋다. 데코레이터는 사전적으로 장식자라는 의미를 가지고 있으며, 장식의 대상이 되는 함수를 데코레이터 함수의 인자로 전달하여 내부적으로 실행방식을 래핑(Wrap)한다. 데코레이터 사용법은 대상이 되는 함수 위에 @데코레이터명 을 쓰면 된다. 예를 들면, @staticmethod, @classmethod, @property 등 다양한 데코레이터들이 있고, 사용자가 임의로 데코레이터를 정의할 수도 있다. 클로저 (Closure)def closure(msg): def wrapper(): print(msg) return wrapperfunc = closure("Hello,..
[Utils] QCheckBoxUtils
·
[Framework] - PyQT
from PyQt5.QtCore import Qtfrom PyQt5.QtWidgets import QWidgetfrom PyQt5.QtWidgets import QHBoxLayoutfrom PyQt5.QtWidgets import QCheckBoxclass QCheckBoxUtils: @staticmethod def check_box_aligned_center(): widget = QWidget() layout = QHBoxLayout() check_box = QCheckBox() layout.setAlignment(Qt.AlignCenter) layout.addWidget(check_box) widget.setLayo..
싱글턴 패턴 응용
·
[CS] - Design Pattern
이번 포스트는 파이썬으로 작성한점 양해 부탁드립니다.아래의 포스트를 읽고 오는 것을 권장한다.https://dev-ryuon.tistory.com/53" data-og-host="dev-ryuon.tistory.com" data-og-source-url="https://dev-ryuon.tistory.com/53" data-og-image="https://blog.kakaocdn.net/dna/GlOxB/hyK7uIixdH/AAAAAAAAAAAAAAAAAAAAAPdDmZ3q6EHTA9GiBf-2RQ-1nOe1MlNsfMJTcAJaCNr2/img.png?credential=yqXZFxpELC7KVnFOS48ylbz2pIh7yKj8&expires=1767193199&allow_ip=&allow_referer=&signature=3vtP70KBpL0ZFuyOcHQvsNloXNk%3D data-og-url="https://dev-ryuon.tistory.com/53"> # 17. __new__() 와 __init__()파이썬을 다루면서 클래스..
Python 객체의 생명 주기와 메모리
·
[Language] - Python
개요어떤 언어든 마찬가지이지만, 비즈니스 로직을 구현할 때 메모리 관리에 신경 쓰지 않으면 메모리 누수(Memory Leak) 현상이 발생할 수 있다. 이는 시스템 성능 저하로 이어질 수 있으며, 특히 규모가 커질수록 바늘 찾기(needle in haystack)처럼 문제의 원인을 찾기 어려워질 수 있다. 따라서 초기 단계부터 단위 테스트와 함께 메모리 관리에 신경 써야 할 부분이기도 하다.C 언어는 malloc(), free()로 메모리를 직접 관리해야 하지만, Python은 Java처럼 가비지 컬렉터(GC)가 객체의 메모리를 자동으로 수거해주기 때문에 개발자는 비즈니스 로직에 더 집중할 수 있다. 하지만 객체 간 복잡한 참조가 발생할 경우, 개발자가 인지하지 못한 곳에서 객체가 메모리에서 제대로 해제..
LU 분해 (LU Decomposition)
·
[Mathematics] - Linear Algebra
https://dev-ryuon.tistory.com/46 # 1. 가우스 소거법 (Gauss Elimination)[서론] 선형 시스템은 해를 가지는 케이스가 총 3가지로 나누어진다. 1. 해가 하나인 경우 - x=2 인경우에만 성립한다. ex) 3x = 6 2. 해가 여러개인 경우 - 어떠한 x를 대입하더라도 성사된다. ex) 0x = 0dev-ryuon.tistory.com이 포스트는 가우스 소거법에 대해 숙지하고 보시는 것을 추천합니다. 이론LU 분해는 Gauss Elimination 을 행렬이라는 자료구조로 표현한 것을 의미한다. 숫자는 인수분해가 가능하다. 행렬도 숫자와 마찬가지로 분해가 가능하다. 행렬을 분해하는 방법에는 대표적으로 세 가지가 있다. LU DecompositionQR Deco..