본문 바로가기

전체 글

(224)
[머신러닝] SVM (Support Vector Machine) SVM이란 주어진 데이터가 어느 카테고리에 속할지 판단하는 이진 선형 분류 모델이다. Margin이란 선과 가장 가까운 양 옆 데이터와의 거리이다. 선과 가장 가까운 포인트를 서포트 벡터(Support Vector)라고 한다. 즉, Margin은 구분하는 선과 서포트 벡터와의 거리를 의미한다. 또한 이렇게 두 데이터를 구분하는 선을 Decision Boundary라고 한다. 각 서포트 벡터와의 Margin을 최대화하는 방향으로 Decision Boundary를 잡아야 한다. 양 옆 서포트 벡터와의 Margin을 최대화하면 robustness도 최대화가 된다. robust하다는 것은 아웃라이어(outlier)의 영향을 받지 않는다는 뜻이다. kernel 저차원 공간(low dimensional space)..
[머신러닝] KNN (K-Nearest Neighbor) KNN KNN은 지도 학습 알고리즘 중 하나이다. 어떤 데이터가 주어지면 그 주변(이웃)의 데이터를 살펴본 뒤 더 많은 데이터가 포함되어 있는 범주로 분류한다. K의 default값은 5이다. 가장 가까운 주변 5개 데이터를 기반으로 분류한다는 것이다. 일반적으로 K는 홀수를 사용한다. 짝수일 경우 동점이 되어 하나의 결과를 도출할 수 없기 때문이다. Lazy Model KNN의 특징은 훈련이 따로 필요 없다는 것이다. 다른 모델들은 clf.fit(x_train, y_train)의 코드를 통해 훈련시킨다. 즉 훈련데이터를 기반으로 모델을 만들고 테스트 데이터로 테스트를 하는 방식이다. 하지만 KNN은 훈련이 따로 필요 없다. 그냥 훈련 데이터를 저장하는게 훈련의 전부이다. real-time 예측이 이루어..
[운영체제] 멀티 프로세스 대신 멀티 스레드를 사용하는 이유 멀티 프로세스 하나의 응용 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것 장점 여러 개의 자식 프로세스 중 하나에 문제가 발생하면 그 자식 프로세스만 죽는 것 이상으로 다른 영향이 확산되지 않는다. 단점 1. Context Switching에서의 오버헤드 - Context Switching 과정에서 캐시 메모리 초기화 등 무거운 작업이 진행되고 많은 시간이 소모되는 등의 오버헤드가 발생하게 된다. - 프로세스는 각각의 독립된 메모리 영역을 할당받았기 때문에 프로세스 사이에서 공유하는 메모리가 없어, Context Switching가 발생하면 캐시에 있는 모든 데이터를 모두 리셋하고 다시 캐시 정보를 불러와야 한다. 2. 프로세스 사이의 어렵고 복잡한 통신 기법(..
[운영체제] 프로세스와 스레드의 차이(Process vs. Thread) 프로그램(Program) 사전적 의미: 어떤 작업을 위해 실행할 수 있는 파일 파일이 저장 장치에 저장되어 있지만 메모리에 올라가 있지 않은 정적인 상태를 말한다 예: .exe파일 프로세스(Process) 사전적 의미: 컴퓨터에서 연속적으로 실행되고 있는 컴퓨터 프로그램 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) 운영체제로부터 시스템 자원을 할당받는 작업의 단위 즉, 동적인 개념으로는 실행된 프로그램을 의미한다. 할당받는 시스템 자원의 예 CPU 시간 운영되기 위해 필요한 주소 공간 Code, Data, Stack, Heap의 구조로 되어 있는 독립된 메모리 영역 특징 프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다. 기본적으로 ..
[Python] 이진 탐색 라이브러리 bisect 알고리즘 문제를 풀다 보면 이진 탐색을 사용해야할 때가 많다.다른 언어에서는 다음과 같이 직접 반복문을 만들어, 이진 탐색 알고리즘을 구현한다def bisect(a, x, lo=0, hi=None): if lo 파이썬에서는 bisect.bisect 메소드를 사용하면 훨씬 간단하게 코드를 짤 수 있다. biset_left(a, x): 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 왼쪽 인덱스를 반환 ( C++의 lower_bound와 동일)bisect_right(a, x): 정렬된 순서를 유지하면서 배열 a에 x를 삽입할 가장 오른쪽 인덱스를 반환 (C++의 upper_bound와 동일) from bisect import bisect_left, bisect_righta = [1, 2, 4, ..
[알고리즘] 그리디 알고리즘 (Greedy, 탐욕법) 그리디 알고리즘은 현재 상황에서 가장 좋은 것만 고르는 방법이다. 그러나 단순히 가장 좋아 보이는 것을 반복적으로 선택해도 최적의 해를 구할 수 있는지 검토해야 한다. 대표적인 문제: 거스름돈, 회의실 배정 출처: 이것이 취업을 위한 코딩 테스트다 with 파이썬, https://www.youtube.com/watch?v=5OYlS2QQMPA&list=PLVsNizTWUw7H9_of5YCB0FmsSc-K44y81&index=12
[Python] heapq (min heap) 힙은 모든 부모 노드가 자식보다 작거나 같은 값을 갖는 이진 트리이다. 힙은 모든 k에 대해 heap[k]
[Python] for문 사용해서 list 원소 값 변경하는 방법 가능 def solution(s, n): s = ["A", "b", "C", "d"] for i in range(len(s)): if s[i].isupper(): s[i]= s[i].lower() print(s) # ["a", "b", "c", "d"] 불가능 def solution(s, n): s = ["A", "b", "C", "d"] for c in range(s): if c.isupper(): c = c.lower() print(s) # ["A", "b", "C", "d"] for문을 이용해서 c로 s의 원소를 하나씩 복사해 넣는다. 즉, 주소(객체)가 전달된 것이 아니고 값만이 복사되어 전달된 것이므로, 이 방법으로는 값을 변경할 수 없다. 참고: https://hashcode.co.kr/que..