전체 글 153

[백준 | 파이썬3] 2667. 단지번호 붙이기-dfs활용

https://www.acmicpc.net/problem/2667 2667번: 단지번호붙이기 과 같이 정사각형 모양의 지도가 있다. 1은 집이 있는 곳을, 0은 집이 없는 곳을 나타낸다. 철수는 이 지도를 가지고 연결된 집의 모임인 단지를 정의하고, 단지에 번호를 붙이려 한다. 여 www.acmicpc.net > dfs 활용 연결되어있는 격자들에 방문처리하고 개수를 카운트한다는 점에서 dfs 알고리즘을 사용하였다. 먼저 격자 정보들을 2차원 배열형태로 입력한다. 아래 코드로 값을 입력받으면 숫자들이 모두 문자형태로 들어간다는 것을 기억하자. 그리고 격자에 방문했는지 여부를 보여주는 visited 배열과 격자의 상하좌우로 움직이기 위한 dx, dy 배열도 선언해준다. 행, 열 정보를 파라미터로 넣은 dfs..

심층 신경망 성능 향상시키기(2)/ 편향, 분산

부스트 코스의 딥러닝 2단계: 심층 신경망 성능 향상시키기 강의를 수강하며 내용정리한 포스팅입니다. ▶ 편향(bias)/ 분산(variance) train set와 dev set의 성능에 대해 high bias라고 하면 훈련데이터 셋에 과소적합되어 훈련 데이터에서 조차도 모델의 성능이 나오지 않는다고 이해할 수 있다. 반면 high variance를 가진다고 하면 훈련 데이터에 과적합되어 훈련데이터에선 좋은 성능을 보이지만 개발 데이터 셋에선 좋은 성능을 보이지 않는다고 이해할 수 있다. 따라서 좋은 모델 성능을 내기 위해선 bias와 variance 두 요소를 모두 낮추는 것이 최상의 방법이나, 두 요소를 동시에 낮출 수 없는 상황이라면 감소폭이 더 큰 하나의 요소만이라도 낮추는 것이 성능에 긍정적인 ..

심층 신경망 성능 향상시키기(1) / Train, Dev, Test sets

부스트 코스의 딥러닝 2단계: 심층 신경망 성능 향상시키기 강의를 수강하며 내용정리한 포스팅입니다. ▶ Train/ Dev/ Test sets의 역할과 데이터 분할 train, dev, test 셋을 정하는 것은 알고리즘의 편향과 분산을 더 효율적으로 측정할 수 있도록 하기 때문에 모델의 성능을 높이기 위한 과정을 효율적으로 만든다. 즉 세 세트를 잘 설정하는 것만으로 모델의 성능향상에 긍정적으로 기여할 수 있다. 일반적으로 모델링할 때, train 데이터로 모델을 학습시키고 dev 데이터 셋으로 다양한 모델 중 어떤 모델의 성능이 좋은지 테스트한다. dev 데이터 셋을 통해 나온 최적의 학습성능을 가진 모델로 test 데이터 셋에서 모델의 비편향을 추정하고 모델이 얼마나 잘 작동하는지 확인한다. 머신러..

[백준 | 파이썬3] 1932. 정수삼각형

1932번: 정수 삼각형 (acmicpc.net) 1932번: 정수 삼각형 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. www.acmicpc.net > 다이나믹 프로그래밍 7부터 시작하여 아래 그래프로 내려가며 최대가 되는 수를 찾는 문제이다. 위부터 아래로 내려오며 더한 값들이 최대가 되도록 하는 방법을 사용했다. 더한 값들이 최대가 되기 위해선 수에 더할 윗 값들 중 더 큰 수를 더할 수 있을 것이다. 한 행에서 맨 앞에 위치한 수나 맨 마지막에 위치한 수의 경우 위의 줄에서 더할 수 있는 수가 하나밖에 없으므로 다음 그림과 같이 그릴 수 있다. 해당 그림대로 수를 더해보면 다음과 같다. 맨 아래 줄에서 최대값인 30이 7에서..

[백준 | 파이썬3] 2164. 카드2 - 큐

https://www.acmicpc.net/problem/2164 2164번: 카드2 N장의 카드가 있다. 각각의 카드는 차례로 1부터 N까지의 번호가 붙어 있으며, 1번 카드가 제일 위에, N번 카드가 제일 아래인 상태로 순서대로 카드가 놓여 있다. 이제 다음과 같은 동작을 카드가 www.acmicpc.net > 큐 활용 큐의 기본 개념을 묻는 문제이다. 마지막 원소가 남을 때 까지(큐의 길이가 1보다 클 때까지) popleft와 append를 반복한다.

[백준 | 파이썬3] 10816. 숫자카드 2 - 이진탐색

https://www.acmicpc.net/problem/10816 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10, www.acmicpc.net > 이분 탐색 활용 탐색하는데 사용되는 시간효율성을 위해 이분탐색방법을 활용하였다. 기본 이분 탐색 개념에 중복되는 수의 개수를 카운트하는 아이디어만 생각할 수 있다면 풀 수 있는 문제였다. 먼저 입력값들을 받아오고 가지고 있는 카드들의 개수 정보를 담은 딕셔너리를 선언한다. 기본 이분 탐색 알고리즘에 중간값이 타겟과 같은 수 일 때 반환하는 값부분만 수정해주었다..

[백준 | 파이썬3] 2751. 수정렬하기2- 정렬

https://www.acmicpc.net/problem/2751 2751번: 수 정렬하기 2 첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다. www.acmicpc.net > 정렬 알고리즘 이전 포스팅에 정리한 내용을 참고하면 파이썬의 표준 정렬 라이브러리는 최악의 경우에도 O(NlogN)의 시간복잡도를 보장한다. 해당 문제에서는 N의 최대개수가 100만이므로 NlogN은 약 600만이다. 파이썬에선 1초에 2000만번의 연산을 수행할 수 있다고 생각하면 정렬 알고리즘을 사용하여 충분히 해결가능하다.

[백준 | 파이썬3] 10773. 제로 - 스택

https://www.acmicpc.net/problem/10773 10773번: 제로 첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경 www.acmicpc.net > 스택 활용 리스트를 사용하여 스택 자료구조를 간단하게 구현할 수 있다.

[Pytorch] 임베딩 (2) / GloVe임베딩 + CNN 을 활용한 뉴스 카테고리 분류기 구현

파이토치로 배우는 자연어처리 책을 참고하여 작성했습니다. 이전 포스팅에선 임베딩의 개념에 대해서 정리해보았다. 이번 포스팅에선 사전 훈련된 임베딩 GloVe와 CNN모델을 활용하여 뉴스 카테고리를 분류하는 모델을 구축하는 코드를 리뷰해보고자 한다. 코드리뷰는 참고한 책에서 추가 보충 설명을 달아놓고 이해를 높이기 위함이므로 전체 코드를 보고 싶다면 코드 원본 출처에서 보도록 하자. ▶ 분석 개요 분석에 사용할 데이터는 AG 뉴스 데이터 셋으로 2005년에 수집한 뉴스 기사 모음이다. 해당 분석에서는 네가지 범주로 균등하게 분할된 뉴스 기사 12만개에서 뉴스 제목을 대상으로 카테고리를 예측하는 분류모델을 만들었다. ▶ 분석 과정 분석과정은 다음 그림과 같다. - 우선 텍스트를 정수로 매핑하기 위해 voca..