Data Preprocessing (Label Encoder, One-Hot Encoder)
·
[AI] - Machine Learning
데이터 전처리는 머신러닝 알고리즘만큼 중요하다. 어떻게 처리하느냐에 따라 모델의 성능을 좌지우지 한다. 이번에는 사이킷런에서 제공하는 전처리 방법인 Label Encoder와 One-Hot Encoder에 대해 포스팅한다. # Label Encodingfrom sklearn.preprocessing import LabelEncoderitems = ['TV', '냉장고', '전자레인지', '컴퓨터']encoder = LabelEncoder()encoder.fit(items)labels = encoder.transform(items)print(labels)print(encoder.classes_)print(encoder.inverse_transform(labels))>>[0 1 2 3]['TV' '냉장고' ..
GridSearchCV
·
[AI] - Machine Learning
GridSearchCV API는 교차검증을 기반으로 하이퍼 파라미터의 최적값을 찾는데 도움을 준다. (Grid는 격자라는 뜻으로, 촘촘하게 파라미터를 입력하면서 테스트를 하는 방식) 예를 들어, 결정 트리 알고리즘의 파라미터 조합을 찾는다고 가정해보자. 그럼 다음과 같은 파라미터가 필요할 것이다.grid_parameters = {'max_depth': [1, 2, 3], 'min_samples_split': [2, 3]} 최적의 파라미터 (max_depth, min_samples_split)의 값을 찾기 위해서는 for문을 사용하여 6번(3 * 2)에 걸쳐 하이퍼 파라미터를 변경하면서 교차 검증 데이터 세트에 수행 성능을 측정한다. 여기에 CV가 3회라면 3개의 폴딩 세트..
Stratified K 폴드
·
[AI] - Machine Learning
이전 포스트에서 K 폴드에 대해서 알아봤다. K 폴드의 단점은 치중되어 있는 레이블 데이터 집합을 고려하지 못한 것이다. 이게 무슨 소리인지 극단적인 예시를 들어보겠다. 10 폴드인 상태에서 1억개의 레이블 데이터 세트(분류는 O와 X)가 있고 그중 1번째부터 10번째 데이터는 O, 나머지 9999만 9990개는 X이라고 가정하자.첫 번째 폴드를 검증 데이터 세트로 사용했을 때 1천만개의 데이터중 10개의 O가 있다.하지만, 두 번째 폴드부터는 검증 데이터 세트로 사용할 때 전부 X 밖에 없을 것이다. 이러한 상태를 imbalanced 하다고 표현한다. imbalanced 상태를 위해 적은 레이블을 고르게 분포한 뒤에 K 폴드를 적용한다. import pandas as pdimport numpy as ..
교차 검증 (K-폴드 교차 검증)
·
[AI] - Machine Learning
교차 검증은 오버피팅(Overfitting)을 방지하기 위한 프로세스 중 하나이다. 오버피팅이 발생하는 이유는 모델의 학습이 Training-Set에만 너무 의존되어 있기 때문에 일반화가 잘 이루어지지 않아 다른 데이터가 들어오면 성능이 떨어진다. 그래서 Training-Set을 Training-Set과 Validation-Set으로 세분화하는 것이 교차 검증이다. 이를 세분화해서 무엇을 하느냐? Training-Set으로 학습된 모델을 Test-Set으로 평가하기 전에 Validation-Set으로 평가하는 것이다. 즉, 모의고사를 본다고 생각하면 된다. 우선 K-폴드 교차 검증부터 확인해보겠다.Training-Set을 K등분한다. 예를들어, 100개의 Training-Set이 있다면..K = 1(1~..
함수형 프로그래밍
·
[Language] - Python
개요함수형 프로그래밍은 프로그램을 수학적 함수의 계산으로 바라보고 상태 변화와 가변 데이터를 최소화하는 프로그래밍 패러다임이다. 일급 시민(first citizen)을 객체 지향 프로그래밍에서는 객체 위주의 사고를 했었다면, 함수형 프로그래밍에서는 함수가 일급 시민이 된다. 즉, 함수를 객체처럼 특정 자료 구조에 담거나 함수의 인자로 전달하는 등의 행위가 가능하다. 함수형 프로그래밍은 아래와 같은 특징들이 있다. 순수 함수 (Pure Function)def add(x, y): return x + y동일한 입력에 대해 항상 동일한 출력을 반환한다. 또한, 함수가 자신의 외부 상태를 변경하지 않으며 사이드 이펙트가 없어야 한다. 예를 들면, 함수 내부에서 전역 변수나 외부 데이터를 수정하지 않아야 한다..
[Tip] if문 분기와 삼항연산자가 사용하기 싫을 때
·
[Language] - Python
개요코드를 작성하다보면 복잡한 도메인 혹은 비즈니스 요구사항에 의해 고려해야할 케이스가 많아지기도 한다. 예를 들면, 팩토리 패턴의 경우, 다양한 케이스 별로 분기하여 대응되는 클래스의 인스턴스를 초기화하는 일종의 공장 역할을 하는 클래스를 분리한다. 하지만, 결국 필자가 생각하기에 if 문 혹은 switch ~ case와 같은 형태의 가독성을 해치는 보일러 플레이트는 여전히 남아있다.다행히도 Python에서는 딕셔너리라는 객체가 존재하고, 메소드 자체를 마치 객체처럼 다룰 수 있는 스크립트의 성질이 있기 때문에 이를 응용하여 if 문 분기를 사용하지 않고도 비교적 깔끔한 코드를 작성할 수 있다. 사용 예시MAP_COLOR = {True: QColor(247, 230, 0), False: Qt.tra..
zip
·
[Language] - Python
개요본 포스트에서는 Python의 zip() 함수에 대해 알아본다. zip() 함수는 iterable(순회 가능한 객체)들을 원소 단위로 묶어주는 역할을 수행한다. zip() 함수를 통해 데이터를 전처리할 때, Pythonic하고 유연하게 수행할 수 있는 장점이 있다. 사용 예시a = ['a', 'b', 'c']b = [1, 2, 3]zip(a, b) # zip() 함수의 반환값은 입력으로 주어진 iterable의 타입이 아닌 zip 타입의 객체가 반환되는 것을 확인할 수 있다. for pair in list(zip(a, b)): print(pair)>>('a', 1)('b', 2)('c', 3)zip 인스턴스를 list로 캐스팅하고 for loop를 돌린 결과 다음과 같이 두 iterator의 ..
property 데코레이터
·
[Language] - Python
개요작업을 하던 도중 처음보는 데코레이터를 발견했다.. 보통 우리는 객체의 필드에 직접 접근하는 것을 방지하기 위해 protected나 private 접근제한자를 사용하고, getter와 setter를 통해서만 접근할 수 있도록 캡슐화(Encapsulation)을 한다. 이러한 과정을 간소화 시켜주는 것이 프로퍼티의 역할이다. 사용 예시class Palette: def __init__(self): self.__color = 'blue' def get_color(self): return self.__color def set_color(self, color): self.__color = color def del_color(self): ..
가변인자 args, kwargs
·
[Language] - Python
개요 Python 프로그래밍을 하다보면 함수에 정해진 파라미터 외에도 동적으로 인자를 전달해야 하는 경우가 발생한다. 이러한 인자를 가변(可變)인자라고 하는데, 가능할 가(可) 변할 변(變)을 의미한다. 쉽게 말해, 런타임 도중 정해진 갯수만큼의 인자가 넘어가는 것이 아닌 로직에 따라 변할 수 있는 길이의 인자가 함수의 파라미터로 전달되는 것을 의미한다. Python에서 지원하는 가변인자의 종류는 크게 2종류이다.args : arguments, 인자의 iterables만 전달되는 형태kwargs : keyword arguments, 인자의 매개변수명과 인자가 딕셔너리의 키-밸류로 구성되어 전달되는 형태 argsdef arg_func(*args): for idx, arg in enumerate(ar..
Django 시작하기
·
[Framework] - Django
이번에는 django 웹 프레임워크를 설치하고 환경을 세팅하겠다. 우선, django를 사용하는 것은 "가상환경"에서 하는것을 추천한다. 왜? django의 버전에 대응하기 위함이다. 물론 django뿐만 아니라 다른 패키지들 또한 버전 대응에 용이하려면 가상환경에서 프로젝트를 수행하는 것이 용이하다.가상환경 설치에 관련된 내용은 virtualenv에 관한 포스트를 보면된다. 많은 포스트들을 보면 커맨드창에서 가상환경을 활성화 시키고 서버를 키거나, 패키지를 관리(pip)하는 등.. 여러 작업을 하는데 필자는 Pycharm의 terminal기능을 애용한다. Pycharm에서는 애초에 프로젝트 단위로 이미 설치된 가상환경을 세팅할 수 있다. 터미널을 추가하자마자 해당 가상환경이 활성화되어 있는 상태이고, ..