사이킷런은 API 일관성이 매우 뛰어난 패키지입니다. 모델 학습을 위해 fit(), 예측을 위해 predict() 메서드를 제공합니다. 지도학습의 대표적인 두 축인 분류와 회귀의 다양한 알고리즘을 구현한 모든 사이킷런 클래스는 두 메서드만 가지고 학습 및 예측을 수행합니다. 분류 알고리즘을 구현한 클래스는 Classifier, 회귀 알고리즘을 구현한 클래스는 Regressor로 지칭합니다. 두 클래스를 합쳐서 Estimator 클래스라고 합니다. cross_val_score()와 같은 evaluation 함수 및 GridSearchCV와 같은 하이퍼 파라미터 튜닝 클래스의 경우 Estimator를 인자로 받아 API 내부에서 fit()과 predict()를 호출하여 평가 및 튜닝을 진행합니다. 비지도 학..
사이킷런(scikit-learn)은 파이썬 머신러닝 라이브러리입니다. 사이킷런을 이용하여 붓꽃의 품종을 분류(classification)하는 머신러닝 모델을 만들어봅시다. 붓꽃 데이터 세트는 꽃잎의 길이, 너비, 꽃받침의 길이, 너비 등의 피처를 갖습니다. 사이킷런 패키지 모듈명은 sklearn으로 시작합니다. 예를들어, sklearn.datasets 내의 모듈은 사이킷런에서 자체적으로 제공하는 데이터 세트 생성 모듈의 집합입니다. sklearn.tree 내의 모듈은 트리 기반 머신러닝 알고리즘을 구현한 클래스의 집합입니다. sklearn.model_selection은 학습/검증/예측 데이터로 데이터를 나누거나 최적 하이퍼 파라미터로 평가하기 위한 다양한 모듈의 집합입니다. 붓꽃 데이터 세트, 분류 알고..
판다스의 정렬, Aggregation 함수, GroupBy 메서드에 대해 알아봅시다. DataFrame, Series를 정렬하기 위해 sort_values() 메서드를 이용합니다. 핵심 파라미터로는 by, ascending, inplace가 있으며, by를 통해 정렬의 기준이 되는 칼럼을 지정합니다.ascending은 디폴트로 True(오름차순)입니다. DataFrame에서 min(), max(), sum(), count()와 같은 aggregation 메서드를 적용할 수 있습니다. DataFrame에서 이러한 메서드를 바로 호출할 경우 모든 칼럼에 대해 해당 연산을 수행합니다. 특히 count() 연산은 Null인 데이터를 연산에 포함시키지 않습니다. 특정 칼럼에만 연산을 적용시키기 위해서는 DataF..
판다스는 DataFrame과 Series끼리 데이터 셀렉션 기능이 달라지는 부분이 있어 주의가 필요합니다. 넘파이의 경우 [] 연산자 내 단일 값 추출, 슬라이싱, 팬시 인덱싱, 불린 인덱싱을 통해 데이터를 추출합니다. 판다스는 iloc[], loc[] 연산자가 이와 같은 작업을 수행합니다. 먼저 판다스의 [] 연산자가 넘파이의 [] 연산자와 어떤 차이가 있는지를 알아보겠습니다. DataFrame의 []연산자 안에 들어갈 수 있는 것은 칼럼명 문자(또는 리스트 객체), 또는 인덱스로 변환 가능한 표현식입니다. 인덱스로 변환 가능한 표현식이라는 의미는 추후에 다룰텐데, 현재 수준에서는 DataFrame의 [] 연산자는 칼럼만 지정할 수 있는 '칼럼 지정 연산자'로 이해하는 게 혼돈을 막는 가장 좋은 방법입..
Pandas는 파이썬에서 데이터 처리를 위해 사용되는 인기있는 라이브러리 입니다. 판다스는 2차원 데이터 처리를 위한 많은 기능을 제공합니다. 판다스는 많은 부분이 넘파이 기반으로 작성됐습니다. 판다스의 핵심 개체는 DataFrame이며, 중요 객체로 Index와 Series가 있습니다. Index는 개별 데이터를 고유하게 식별하는 Key 값이며, Series와 DataFrame은 Index를 키값으로 가집니다. Series는 칼럼이 하나 뿐인 DataFrame이라고 생각하면 됩니다. 판다스는 다양한 포맷의 파일을 DataFrame으로 로딩할 수 있는 편리한 API를 제공합니다. 대표적으로 csv 파일이 있는데, 이는 칼럼을 콤마로 구분하는 파일 포맷입니다. 만약 다른 지정자로 필드를 구분한다면, rea..
Numpy는 다차원 행렬을 다루기 위한 파이썬 라이브러리입니다. 머신러닝 및 딥러닝 코드를 분석하거나 작성하려면 어느 정도는 반드시 잘 숙지하고 있어야 합니다. 본 책에선 Numpy의 수많은 기능 중 기초이자 핵심적인 부분만을 다룹니다. np.array() : 파이썬 리스트 같은 다양한 인자를 ndarray 타입으로 변환합니다. ndarray.shape, nidm 변수로 크기와 차원을 알 수 있습니다. shape의 반환값은 튜플입니다. ndarray 내의 모든 원소의 데이터 타입은 같습니다. 예를들어, int와 float를 같이 담을 수 없습니다. ndarray는 tolist() 메서드를 통해 파이썬 리스트로 캐스팅할 수 있습니다. 만약 서로 다른 데이터 타입이 들어있는 리스트를 ndarray 객체로 만..
https://www.acmicpc.net/problem/1707 1707번: 이분 그래프 입력은 여러 개의 테스트 케이스로 구성되어 있는데, 첫째 줄에 테스트 케이스의 개수 K가 주어진다. 각 테스트 케이스의 첫째 줄에는 그래프의 정점의 개수 V와 간선의 개수 E가 빈 칸을 사이에 www.acmicpc.net 문제 설명에 나와있듯이, 이분 그래프란 "그래프의 정점을 두 개의 집합으로 분할하여, 각 집합에 속한 정점끼리는 서로 인접하지 않도록 분할할 수 있는" 그래프입니다. 이를 만족하기 위해서 그래프의 인접한 두 정점은 서로 다른 집합에 속해야 합니다. 예를 들어, 왼쪽과 같은 그래프가 있습니다. 각 노드는 빨간/파란색인데, 이 색은 집합을 나타냅니다. 왼쪽의 그래프는 사실 오른쪽 그래프로 변환 가능합..
'강한연결요소'라고 불리는 Strongly Connected Component (SCC)에 대해 알아봅시다. 1. SCC의 정의 방향 그래프 $G=(V, E)$에서, 어느 노드들의 그룹 $X$가 있다고 했을 때, $X$에서 임의의 두 노드 $u, v$를 골랐을 때 $u$에서 $v$로 가는 경로가 존재한다라는 조건을 만족시키면 $X$를 strongly connected component라고 합니다. SCC의 정의는 maximal하게 형성된 strongly connected component입니다. maximal하다는 것이 무엇인지 아래의 예시를 통해 알아봅시다. 위와 같은 방향 그래프에서 세 노드로 구성된 초록색 그룹이 SCC입니다. 파란색 노드는 그 자체로서 SCC입니다. 그런데 두 개의 초록색 노드를 ..
이 글은 Problem Solving를 위한 스프라그-그런디 이론 기초 설명입니다. 먼저 님 게임을 알아봅시다. Nim game 돌 무더기 \(n\)개가 있고, 각 돌 무더기는 \(p_{1}, p_{2}, ... ,p_{n}\)개의 돌로 구성되어 있습니다. 두 명의 플레이어는 자신의 차례마다 돌 무더기 하나를 고른 뒤, 그 돌 무더기에서 $1$개 이상의 돌을 덜어냅니다. 자신의 차례에 덜어낼 돌이 없는 플레이어가 패배합니다. 즉, 마지막 돌을 가져간 플레이어가 승리합니다. 님 게임에서 두 플레이어가 완벽하게 플레이했을 때 선공/후공 중 누가 이기는 지는 정해져 있습니다. 두 플레이어 모두 최적으로 행동한다는 전제하에, winning state에서 턴을 가지는 플레이어는 반드시 승리하며, losing st..