분류 전체보기 36

[알고리즘] 계수 정렬

계수 정렬(Count Sort) 특정한 조건이 부합할 때만 사용할 수 있는 정렬 방법이다. 하지만 매우 빠른 속도를 가지고 있다. 여기서 특정한 조건은 아래와 같다. 1. 데이터의 크기 범위가 제한되어 정수 형태로 표현할 수 있다. 2. 가장 큰 데이터와 가장 작은 데이터의 차이가 1,000,000을 넘지 않을 때 효과적이다. 계수 정렬은 가장 큰 데이터와 가장 작은 데이터 차이만큼의 크기를 갖는 리스트를 선언해야 하기 때문에 위와 같은 특정한 조건을 갖는다. 즉, 계수 정렬은 별도의 리스트를 선언하고 그 안에 정렬에 대한 정보를 담는 특징이 있다. 계수 정렬은 모든 범위를 포함하는 인덱스를 갖는 리스트를 생성한 후, 앞에서부터 데이터를 읽어나가며 해당하는 데이터에 맞는 인덱스에 1을 추가한다. 예시 숫..

알고리즘 2022.11.04

[알고리즘]삽입 정렬

삽입 정렬(Insertion Sort) 리스트가 정렬된 부분과 정렬 안된 부분으로 나뉜다. 정렬 안된 부분의 가장 왼쪽 원소를 정렬된 부분의 적절한 위치에 '삽입'하는 방식의 알고리즘이다. 선택 정렬에 비해 구현 난이도가 높지만, 일반적으로 더 효율적으로 동작한다. 동작 방법 숫자 4, 3, 40, 5, 23, 18, 1 이 순서대로 준비되어 있다. 1) 첫 번째 원소 '4'는 정렬되어 있다고 판단하고, 두 번째 원소인 '3'이 어떤 위치로 들어갈지 판단한다. 화살표가 들어갈 수 있는 위치이고 빨간색 화살표가 들어가야하는 위치이다. 2) 이어서 '40'이 어떤 위치로 들어갈 지 판단한다. 원래 자리가 '40'이 들어갈 자리이다. 3) 이어서 '5'가 어떤 위치로 들어갈 지 판단한다. 4) 마지막으로 '1..

알고리즘 2022.09.15

[알고리즘]선택 정렬

선택 정렬(Selection Sort) 리스트에서 아직 정렬 안된 부분의 원소들 중에서 최솟값을 '선택'하여 정렬 안된 부분의 가장 왼쪽의 원소와 교환하는 정렬 알고리즘. 동작 방법 숫자 20, 4, 2, 1, 50, 31, 13, 7 이 준비되어 있다. 정렬된 데이터는 색으로 표시한다. 1) 정렬되지 않은 원소 중 가장 작은 '1'을 선택해 정렬 안된 부분의 가장 왼쪽에 있는 '20'과 교환해준다. 교환된 '1'이 가장 왼쪽에 위치하고 '20'은 '1'의 자리에 들어있다. 2) 정렬되지 않은 원소 중 가장 작은 '2'를 선택해 정렬 안된 부분의 가장 왼쪽에 있는 '4'와 교환해준다. 교환된 '2'가 '1' 다음에 정렬되고 '4'는 '2'의 자리에 들어있다. 3) '4'는 정렬되지 않은 수 중에서 가장 ..

알고리즘 2022.09.14

[자료구조]큐

큐 정의: 삽입과 삭제가 양 끝에서 각각 수행되는 자료구조. 동작: 먼저 들어온 데이터가 먼저 나가는 형식, 선입선출의 자료구조 동작 방법 숫자 5, 10, 2, 7을 순서대로 큐에 삽입하면 아래와 같은 그림으로 들어간다. 먼저 들어간 5가 큐의 맨 앞에 자리하고 그 뒤로 10-2-7이 이어서 저장되어 있다. 이제 큐를 비우기 위해 저장된 모든 데이터들을 삭제해보면 아래 그림과 같이 동작한다. 맨 먼저 큐에 삽입된 5가 가장 먼저 큐에서 삭제되고 삽입 순서인 10-2-7이 순서대로 큐에서 삭제된다. 이처럼 큐는 먼저 들어간 데이터가 먼저 삭제되는 것을 알 수 있다. 큐의 연산 큐는 스택과 달리 deque 라이브러리를 사용하는데 이는 시간 복잡도가 증가하는 것을 방지하기 위한 것이다. from collec..

알고리즘 2022.09.13

[자료구조]스택

스택 정의: 한 쪽 끝에서만 데이터(item)을 삭제하거나 새로운 항목을 저장하는 자료구조. 동작: 먼저 들어간 데이터가 먼저 나가는 형식, 선입후출 구조 동작 방법 숫자 6, 7, 3, 5를 순서대로 스택에 입력하면 아래와 같은 그림으로 들어간다. 먼저 들어간 6이 제일 안쪽에 존재하고, 7-3-5가 이어서 스택에 저장되어 있는 것을 확인할 수 있다. 이제 스택을 비우기 위해 스택에 저장된 항목들을 모두 삭제해보자. 스택의 맨 앞에 저장된 5가 가장 먼저 출력되고, 3-7-6이 이어서 삭제되는 것을 확인할 수 있다. 이처럼 스택은 먼저 들어간 항목일수록 나중에 삭제된다는 것을 알 수 있다. 스택의 연산 삽입 연산: 스택에 새로운 항목을 입력하는 연산이다. push라고 한다. 파이썬의 경우 append(..

알고리즘 2022.09.13

혼자 공부하는 머신러닝 + 딥러닝 Day 8

지난 시간... 로지스틱 회귀 이번 시간에는 훈련 데이터를 한 번에 적용하는 게 아니라 조금씩 훈련하는 방법에 대해서 알아보자. 기존 훈련한 모델을 버리지 않고 새로운 데이터에 대해서만 조금씩 훈련하는 방법을 점진적 학습 또는 온라인 학습이라고 한다. 대표적인 학습 알고리즘은 확률적 경사 하강법이 있다. 확률적 경사 하강법 확률적은 '무작위하게' 혹은 '랜덤하게'의 기술적 표현이고, 경사 하강법은 경사를 따라 내려가는 방법을 의미한다. 경사를 내려갈 때 가장 중요한 것은 가장 가파른 길을 찾아 내려가면서 조금씩 내려가는 것이 중요하다. 확률적 경사 하강법도 다른 알고리즘과 마찬가지로 훈련 세트를 사용해 모델을 훈련하는데 전체 샘플을 사용하지 않고 하나의 샘플을 훈련 세트에서 랜덤하게 골라 가장 가파른 길..

혼자 공부하는 머신러닝 + 딥러닝 Day 7

이벤트에 7종류의 생선이 있고 생선의 길이, 높이, 두께, 대각선 길이, 무게를 사용하여 각 생선이 뽑힐 확률을 출력하는 모델을 만들어보자. 사이킷런의 k-최근접 이웃 분류기를 사용하여 클래스 확률을 계산해보자. 우선 판다스를 사용하여 데이터를 준비하고 처음 5개 행을 출력해보자. ## 데이터 준비하기 import pandas as pd ## pandas를 사용하여 인터넷에서 CSV 데이터를 읽어온다. fish = pd.read_csv('데이터가 있는 주소') ## head() 메소드로 처음 5개 행을 출력 fish.head() 첫 5개의 행에는 Bream만 출력되었다. 어떤 종이 존재하는지 판다스의 unique() 함수를 사용해 Species 열에서 고유한 값을 추출해보자. print(pd.unique..

혼자 공부하는 머신러닝 + 딥러닝 Day 6

지난시간... 지난시간에는 선형회귀에 대해서 알아보았다. 회귀는 훈련 데이터 범위 밖의 데이터도 예측을 할 수 있다. 하면서 샬라샬라 2차항까지 넣어보았는데 과소적합이 약간 남아있었다. 이번 시간에는 여러 개의 특성을 사용한 선형 회귀인 다중 회귀를 사용하여 모델을 훈련해보자. 1개의 특성을 사용할 때 선형 회귀 모델은 직선을 학습했다. 2개의 특성을 사용하면 선형 회귀 모델은 평면을 학습한다. 특성이 2개이면 타깃값과 함께 3차원을 형성한다. 선형 회귀 방정식인 아래와 같다. $$ 타깃 = a \times 특성_1 + b \times 특성_2 + 절편$$ 특성이 3개 이상인 경우 우리는 3차원 공간 이상을 그리거나 상상할 수 없기 기존 특성을 사용해 새로운 특성을 뽑아내는 작업을 특성 공학이라고 한다...

혼자 공부하는 머신러닝 + 딥러닝 Day 5

지난 시간... 지난 시간에는 k-최근접 이웃 알고리즘을 사용하여 k-최근접 이웃 회귀 모델을 구현해보았다. 그 과정에서 결정계수의 점수에 따라서 모델이 과대적합인지 과소적합인지를 판단하는 방법과 해결 방안을 알아보았다. 오늘은 데이터 범위 밖에 있는 데이터를 예측해보는 모델을 만들어보는 시간을 가져보자. 지난시간에 했던 최근접 이웃 개수가 3인 모델을 가지고 진행을 해볼 것이다. 이 모델을 사용해 길이가 50cm인 농어의 무게를 예측해보자. ## 길이가 50cm인 농어의 무게 예측 print(knr.predict([[50]])) ## 출력값 [1033.33333333] 모델에서는 길이가 50cm인 농어의 무게를 약 1,033g으로 예측했다. 하지만 실제로는 훨씬 더 많이 나간다고 한다. 문제점을 찾아보..

혼자 공부하는 머신러닝 + 딥러닝 Day 4

지난 시간에는 스케일이 다른 두 특성을 기준값을 전처리하는 과정을 가졌다. 이번 시간에는 회귀 모델을 만들어보자. 지도 알고리즘은 분류와 회귀로 나뉜다. 분류는 샘플을 몇 개의 클래스 중 하나로 분류하는 문제이고, 회귀는 임의의 어떤 숫자를 예측하는 문제이다. 예시) 내년도 경제 성장률, 배달 도착 시간 ... 데이터 준비 이번에는 농어의 길이(perch_length)를 특성으로 농어의 무게(perch_weight)를 타깃으로 하여 모델을 만들어보자. 넘파이 배열로 데이터를 준비하고 위 데이터들이 어떤 형태를 띠는지 산점도를 통해서 확인해보자. ## x축은 특성 데이터, y축은 타겟 데이터 import matplotlib.pyplot as plt plt.scatter(perch_length, perch_..