Study

    모델의 평가지표란?

    머신러닝 모델을 학습할 때, 모델의 성능을 평가하는 방법은 무엇이 있을까? 데이터 준비와 모델 학습과 더불어 모델 성능을 측정하는 것 또한 머신러닝의 핵심 단계라고 할 수 있다. 그렇다면, 머신러닝 모델의 평가지표(Evaluation Metric)에는 무엇이 있는지 한번 살펴보자. 평가지표란? 모델의 학습은 어떻게 평가할 수 있을까? 정확도만 가지고 측정이 가능할까? 정확도로만 학습을 진행한다면, 모델은 실제 사용 환경에서 처음 만나는 데이터에 대해 약한 모습을 보일 가능성이 크다. 학습의 목적에 따라서 그에 맞는 적절한 평가지표를 사용해야 올바른 성능평가를 진행할 수 있다. 앞으로 올바른 성능평가를 할 수 있도록 대표적인 평가지표들은 무엇이 있는지 살표보고 비교해보자. 모델 정확도 (Model Accu..

    데이터가 충분하다고 말하려면 얼마나 있어야 할까?

    정답은? 더보기 아무도 모른다! 왜 그럴까? 프로젝트에서 다루는 문제의 복잡성은 정말 다양하다. 개와 고양이를 구분하는 비교적 간단한 분류 문제부터 조직 슬라이드에서 특정 림프구를 구분하는 비교적 복잡한 문제도 있다. 그럼 이 두 문제를 학습하기 위한 충분한 데이터의 양은 동일할까? 정확히는 모르지만 아마도 대부분의 사람들이 직감적으로 다를 것이라 생각할 것이다. 그래서 얼마나 필요한데? 문제의 복잡성과 사용하는 모델의 따라서 충분하다고 말할 수 있는 데이터의 양은 다르다고 말할 수 있다. 하지만 얼마나 필요한가? 대답하기는 어렵지만, 이 정도로 생각해 볼 수는 있을 것 같다. 상황에 따라 다르다 정해진 답은 없으며, 경험에 따라서 답을 찾아갈 뿐이다. 앞서 언급했듯, 문제의 복잡성이나 학습 알고리즘의 ..

    [백준] 2578번 : 빙고 (Python)

    문제 코드 코드는 다음과 같은 방식으로 구현했다. 일단 철수의 빙고판은 2차원 배열로 받고, 사회자가 부르는 숫자는 하나의 리스트로 받았다. 1. 사회자가 숫자를 하나씩 부르며 그 숫자와 일치하는 빙고판의 숫자는 0으로 변환함과 동시에 빙고인지 확인한다. 2. 일치하는 숫자의 위치를 기반으로 빙고를 체크한다. 가로와 세로는 항상 체크하며 일치하는 숫자의 위치가 대각선이라면 대각선 방향으로도 빙고를 확인한다. 3. 빙고가 3개 이상이라면 지금까지 부른 숫자의 갯수를 출력한다. import sys board = [] count = 0 bingo = 0 # Make bingo board (2D-metrix) for i in range(5): board.append(list(map(int, sys.stdin.r..

    [OpenCV] Template Matching으로 다른 그림 찾기

    OpenCV의 Template Matching을 사용하여 이미지상에서 템플릿 이미지와 유사한 오브젝트를 찾을 수 있다. 쉽고 빠르게 구현이 가능하지만, 템플릿 이미지와 픽셀들을 비교하여 구분하기 때문에 방향이 다르거나 크기가 다른 경우에는 찾을 수 없다는 단점이 있다. Template Matching in OpenCV OpenCV에서 제공하는 cv.matchTemplate() 함수는 템플릿 이미지를 입력받은 이미지상 위에서 좌측상단부터 우측으로 이동시키면서 대응하는 픽셀들과 비교한다. 제공되는 비교 방법은 다음과 같다. cv.TM_CCOEFF cv.TM_CCOEFF_NORMED cv.TM_CCORR cv.TM_CCORR_NORMED cv.TM_SQDIFF cv.TM_SQDIFF_NORMED cv.matc..

    딥러닝이란 무엇일까?

    딥러닝은 무엇일까? 지난 몇 년간 인공지능(Artificial Intelligence)은 일상 속 다양한 부분에서 접할 수 있었고, 이 용어는 더 이상 낯설지 않게 되었다. 그리고 그런 AI와 항상 같이 언급되는 머신러닝(Machine Learning), 딥러닝(Deep Learning)은 무엇을 의미하고 어디에 활용될까? 머신러닝은 인공지능의 하위 분야이며, 딥러닝은 이런 머신러닝의 하위 분야로 여긴다. 이 글에서는 이 용어에 대해서 각각 알아보고 설명하고자 한다. 1. 인공지능 인간의 지능을 모방한 인공지능 인공지능은 인간의 지능을 기계나 컴퓨터를 통해서 모방하고자 만들어진 개념이다. 인간의 인식, 판단, 추론 그리고 그에 대한 말이나 행동, 학습과 같은 인간의 지능을 이해하는 컴퓨터 시스템을 의미한..

    [백준] 1655번 : 가운데를 말해요 (Python)

    문제는 간단하다. 숫자를 하나씩 받고 지금까지의 숫자들 중에서 중앙값을 답하면 된다. (단, 짝수의 경우 두 수 중에서 작은 값을 답해야 한다) 처음에는 정말 간단하게, sort()를 통해서 중앙값을 답하였으나, 역시나 시간 초과. 이를 해결하기 위해서는, 매번 중앙값을 찾기 위해서 sort()하는 과정을 생략해야 한다. 해결과정은 다음과 같다. 숫자 리스트를 두 가지로 나누어서 생각한다. 왼쪽에는 작은 값들이, 오른쪽에는 큰 값들이 들어간다. 왼쪽의 리스트에서 가장 큰 값은 중앙값이다. 위의 조건이 만족하도록 숫자를 입력한다. 숫자는 왼쪽, 오른쪽 번갈아가며 채우며, 왼쪽에 오른쪽보다 큰 숫자가 들어가는 경우 두 숫자를 교환한다. 즉, 왼쪽의 가장 큰 값과 오른쪽의 가장 작은 값을 비교한다. 이를 위해..

    [프로그래머스] 가장 큰 수 (Python)

    정수 리스트에서 조합 가능한 가장 큰 수를 찾는 문제. 처음에는 직관적으로 가능한 조합을 모두 찾은 뒤 그중에서 가장 큰 수를 출력해봤다. import itertools def solution(numbers): answer = [] number_list = list(itertools.permutations(numbers, len(numbers))) for number in number_list: answer.append("".join(map(str,number))) return max(answer) 당연하게도 순열로 가능한 조합을 만드는 과정이 시간이 많이 걸려서, 시간 초과로 fail. 다음으로 생각한 방법은 숫자의 앞자리를 기준으로 내림차순으로 숫자를 정렬하기. def solution(numbers)..

    [프로그래머스] 주식가격 (Python)

    처음에는 단순하게, 시간이라는 배열을 만들어서 가격들에게 각 시점마다 현재 시점의 가격과 비교해서 떨어지지 않을때마다 1초라는 값을 추가 해줬다. 추가로 한번 떨어진 것은 flag를 통해 다시 비교하지 않도록 만들었다. def solution(prices): answer = [0] * len(prices) flag = [0] * len(prices) for time, price in enumerate(prices): if time == len(prices)-1: break for i in range(time+1): if prices[i] prices[j]: break else: cnt += 1 answer.append(cnt) return answer