본문 바로가기

수업내용정리

(32)
[자료구조][C언어]큐(Queue)란?(4)_큐의 활용(백준10845번) 저번 시간에는 큐를 배열을 활용해 구현해 보았다. 이번엔 저번 시간에 구현한 큐를 가지고 활용해 보도록하자. 아래에 큐를 활용하기에 좋은 백준 문제가 하나 있다. https://www.acmicpc.net/problem/10845 10845번: 큐 첫째 줄에 주어지는 명령의 수 N (1 ≤ N ≤ 10,000)이 주어진다. 둘째 줄부터 N개의 줄에는 명령이 하나씩 주어진다. 주어지는 정수는 1보다 크거나 같고, 100,000보다 작거나 같다. 문제에 나와있지 www.acmicpc.net 저번에 만든 원형큐를 이 문제에 맞게 변형해 보도록 하겠다. enqueue는 push로, dequeue는 pop으로, isEmpty는 empty로, rear은 back으로 변형이 가능할 것이다 size는 front와 re..
[자료구조][C언어]큐(Queue)란?(3)_큐의 구현(원형큐) 저번 시간에는 큐를 배열로 구현하는 방법 중에서 배열을 선형적으로 활용하여 만드는 선형큐에 대해 알아보고 구현해 보는 시간을 가졌었다. 이번에는 선형큐의 단점을 해결한 원형큐를 살펴보도록 하자. 원형큐 원형 큐란 배열을 원형으로 사용해 처음과 끝이 만나도록 큐를 구현하는 것이다. 선형 큐와 마찬가지로 front, rear 이 필요하며 isEmpty, isFull, enqueue, dequeue 연산을 수행하는 함수들이 필요하다. front 큐의 첫 번째 부분 하나 앞의 인덱스를 가리킴 rear 큐의 마지막 부분의 인덱스를 가리킴 isEmpty 큐(Queue)가 비어있는지 검사 isFull 큐가 가득 차있는지 검사 Enqueue(삽입) 큐의 삽입방향(rear방향)으로 데이터를 삽입 Dequeue(삭제) 큐..
[자료구조][C언어]큐(Queue)란?(2)_큐의 구현(선형큐) 저번 시간에는 큐의 개념과 구조에 대해 간단히 살펴보았었다. 이번시간에는 큐를 구현해 보도록 하자. 큐는 배열을 사용하면 쉽게 구현이 가능하다. 큐를 배열로 구현하는 방법에는 크게 두 가지 방법이 있다. 이는 바로 선형큐와 원형큐이다. 먼저, 큐의 구조와 필요한 함수 등을 정의하고 선형큐와 원형큐를 차례대로 구현해 보자. 큐의 구현 큐를 구현하기 위해서 데이터를 담을 배열, 큐의 시작과 끝의 위치를 나타내는 front와 rear이 필요하며, 아래의 연산들을 수행하는 함수가 필요하다. isEmpty: 큐(Queue)가 비어있는지 검사 isFull: 큐가 가득 차있는지 검사 Enqueue(삽입): 큐의 삽입방향으로 데이터를 삽입 Dequeue(삭제): 큐의 삭제방향에 있는 데이터 삭제 선형큐의 구조 및 연산..
[자료구조][C언어]큐(Queue)란?(1)_큐의 개념 큐(Queue)란?_큐의 특징 큐는 한쪽 방향으로 데이터가 들어오고(삽입) 다른 반대방향으로 나가는(제거) 자료구조이다. 큐는 먼저 들어온 데이터가 제일 나중에 나가는 선입후출(FILO)인 스택과는 다르게 먼저 들어온 데이터가 먼저 나간다는 특징이 있다.(선입선출, FIFO, 후입후출, LILO) 다른 자료구조들에 비해 구현이 쉬운 편이다. 큐는 왜 사용하는 것일까? 맨 처음 들어온 데이터가 먼저 나가는 구조(FIFO)를 가진 특징 덕분에, 큐는 프로세스를 관리하는 스케줄러에서 쓰일 수 있으며, 일상 속에서 대기열이 필요한 곳에서 쓰일 수 있기 때문이다. 또한 큐는 다른 자료구조에서 연산에 사용되는 등 다양한 알고리즘에서 사용되기 때문이다. 큐의 구조 및 연산 위 사진은 삽입 방향이 왼쪽인 큐의 구조를 ..
[SckitLearn]앙상블 학습의 개념과 사용법(3)_부스팅 배깅과 페이스팅, 그리고 결정 트리를 활용한 랜덤 포레스트 알고리즘이 무엇인지, 또 사이킷런에서는 어떻게 사용하는지 배웠었다. 이번에는 앙상블 학습의 부스팅이라는 개념에 대해 알아보도록하자. 부스팅? 부스팅의 기본적인 개념은 낮은 성능의 여러 예측기들을 연결해 높은 성능의 예측기를 만드는 것이다. 부스팅은 이전의 약한 예측기를 보완해 나가면서 학습시키는 것이다. 종류로는 에이다부스트와 그레디언트부스팅이 있다. 에이다부스트 이전의 예측기를 보완하는 방법으로는 이전의 예측기가 가중치를 낮게 잡았던 샘플의 가중치를 높이는 방법이 있다. 이를 에이다부스트라고 한다. 그레디언트 부스팅 그레디언트 부스팅은 에이다 부스트처럼 샘플의 가중치를 수정하는 것이 아니라 이전의 예측기가 만든 잔여 오차에 새로운 학습기를 학습..
[SckitLearn]앙상블 학습의 개념과 사용법(3)_랜덤포레스트 저번 시간에 배깅과 페이스팅 방식이 무엇인지 알아보고 사이킷런으로 직접 사용까지 해보는 시간을 가졌었다. 이번 시간엔 배깅과 페이스팅을 활용한 랜덤포레스트 알고리즘에 대해 알아보는 시간을 가져보자. 배깅?페이스팅? 데이터셋에 변화를 주어 다양한 예측기를 만들어내는 앙상블 방법 중 하나이다. 랜덤포레스트? 결정트리 기반의 배깅과 페이스팅을 적용한 앙상블 알고리즘이다. 사이킷런에서는 BaggingClassifier()에 DecisionTreeClassifier()을 넣어 만든것과 비슷하나 RandomForestClassifier()을 사용하면 좀 더 편리하게사용이 가능하다. 랜덤포레스트 알고리즘은 트리를 분할할때 무작위성을 추가해 다양한 트리를 만듦으로써 좋은 성능의 모델을 만들어낸다. RandomFores..
[SckitLearn]앙상블 학습의 개념과 사용법(2)_배깅, 페이스팅 방식 지난 시간에는 앙상블의 개념과 투표 방식의 앙상블 학습에 대해 알아보았었다. 이번 시간에는 앙상블 중에서도배깅과 페이스팅 방식에 대해 알아보도록 하자. 배깅? 페이스팅이란? 배깅(Bagging)과 페이스팅(Pasting)이 무엇인지 바로 알아보기 전에 앙상블 학습에 대해 다시 살펴볼 필요가 있다. 저번 시간에 앙상블 학습에서 서로 독립적이며 다양한 분류기를 사용할수록 정확도가 높아진다는 사실을 배웠었다. 그렇다면 어떻게 다양한 분류기를 만들 수 있을까? 다른 알고리즘을 사용하는 분류기를 만들면 된다. 하지만 데이터에는 변화를 줄수 없을까? 에서 고안된 방법이 바로 배깅과 페이스팅이다. 훈련 데이터에서 무작위로 중복을 허용해서 뽑아 사용하는 것을 배깅이라고 하며 중복을 허용하지 않는다면 페이스팅이다. 말만..
[SckitLearn]앙상블 학습의 개념과 사용법(1)_투표방식 저번시간에는 서포트 벡터 머신을 활용한 회귀에 대해 알아보았다. 이번시간에는 앙상블 학습이 무엇이며 왜 사용하는지, 그리고 사용은 어떻게 하는지 알아볼 예정이다. 앙상블 학습이란? 앙상블 학습이란 여러 개의 모델들이 예측을 하여 예측들을 가지고 최적의 결과를 뽑아내는 것을 앙상블 학습이라고 한다. 이러한 앙상블 학습에는 투표방식, 배깅과 페이스팅, 부스팅, 그리고 스태킹 등의 여러 방식이 존재한다. 한번 천천히 알아보도록하자. 투표방식 투표방식은 아래처럼 여러 예측기를 사용해 나온 예측(클래스) 중 가장 많이 나온 예측을 그 결과로 삼는 것이다. 이렇게 예측(클래스)을 다수결 투표로 정하는 것을 직접 투표(hard voting)라고 한다. 하드 보팅의 동작 방식을 아래 [그림 1]과 함께 살펴보도록 하자..