전체 글

전체 글

    [변수 중요도] Feature Importance와 Permutation Importance

    머신러닝/딥러닝 모델을 해석하는 방법과 시도가 점점 늘어나고 있다. 변수간의 인과관계를 알려주진 않지만, "어떤 변수가 가장 큰 변화를 만들어냈는지", "특정 변수가 결과에 긍정/부정적인 영향을 끼쳤는지" 등과 같은 결과에 대한 이유에 대해서 해석할 수 있는 방법은 다양한 기법을 통해 알 수 있다. 이번 포스팅에는 그중에서도 Feature Importance와 Permutation Importance에 대해 알아보고자 한다. Feature Importance Feature Importance는 일반적으로 Random Forest와 같은 트리 계열의 앙상블 모델을 사용하면 쉽게 얻을 수 있다. 단순 해석하면 '변수(특징) 중요도' 정도로 해석할 수 있는데, 매커니즘 자체는 불순도를 감소시키는 정보 증가량에..

    고윳값과 고유벡터

    고윳값, 고유벡터는 데이터 분석 분야에 다양하게 활용된다. 특히 다변량(변수가 많이 존재하는) 경우에서 활용가치가 무궁무진하다고 할 수 있다. 이는 바로 ‘데이터의 좋은 성질을 공유하고, 이 좋은 성질을 최대한 보존한 채로 행렬을 단순화 할 수 있는 방법’을 공유할 수 있기 때문이다 [ 고윳값, 고유벡터, 고윳값 분해 ]에 대해서 본격적으로 알아보기 위해서라면 행렬대수의 기본적인 공부를 선행할 필요가 있다. (역행렬, 가역행렬, 일차독립, 행렬연산 등등..) 임의의 행렬 A와 임의의 행렬 B가 어떤 경우에 ‘닮은 행렬’이 되는지에 대해서도 이해할 필요가 있으며, 닮은 행렬이 되었을 경우 두 행렬의 행렬식이 같고, 대각합(trace)이 똑같음을 직관적으로 이해할 수 있어야 한다. ‘닮은 행렬’을 이해했다면..

    [Conda] 콘다 가상환경 복사

    다양한 직무의 사람들이 콘다가 제공하는 가상환경을 활용한다고 생각한다. 특히 필자와 같이 데이터 직군에 종사하는 사람이라면, tensorflow를 사용할 때, BERT를 사용할 때, 그 외 다른 언어 모델링, 비전에 관련된 패키지를 사용할 때, 다른 데이터사이언스 패키지와 버전을 호환해줘야 하는 문제점이 빈번하게 발생한다. 예를 들면 tensorflow의 특정 버전에서 딥러닝 레이어 사용 시 numpy의 버전을 맞춰주지 않으면 객체를 생성할 수 없는 에러가 발생하기도 하고, huggingface의 transformers 또한 특정 버전을 맞춰줘야하는 여러 디펜던시가 얽힌 상황들이 자주 발생한다. 따라서 필자처럼 가상환경 내 패키지가 꼬이는 것을 방지하기 위해 가상환경을 복사해서 복사된 가상환경에서 새로운..

    [확률적 시스템] 부분 관측 마르코프 결정 프로세스 (Partially Observable Markov Decision Process)

    본문을 읽기 전, 아래 변수를 기억하고 넘어가자. 또한 마르코프 결정 프로세스가 어떤건 지 아직 모르겠다면, 전 포스트의 내용이 도움이 될 것이다. \(s_t\): t시점에서의 상태 \(o_t\): t시점에서 \(s_t\)에만 의존하는 정보 (예를 들면 위치를 찾을 수 있는 센서 정보) \(a_t\): t시점에서의 행동 \(P(s_{t+1})\): t+1시점에서의 상태 확률 \(P(s_{t+1} | s_t, a_t)\): t 시점에서 상태 s와 행동 a가 진행되었을 때, \(s_{t+1}\)일 확률 \(P(s_{t+1} | s_{1:t}, a_{1:t})\): 1부터 t시점까지의 상태 s와 행동 a가 주어졌을 때, \(s_{t+1}\)일 확률 (즉 1부터 t까지 모든 시점을 고려하였을 때 상태가 \(s_..

    [확률적 시스템] 마르코프 결정 프로세스 기본 (Markov Decision Process)

    동적 계획법(Dynamic Programming) 또는 베이즈 이론(Bayes Theorem)을 다루다보면 결정적 시스템(Deterministic Process)에서 벗어나 확률적 시스템(Stochastic System)에 들어가게 된다. 결정적 시스템이란 어떤 상태(s)에서 행동(a)를 선택할 때 결과가 한 가지로 정해져있는 시스템이라고 할 수 있다 아쉽게도 현실의 대부분은 결정적 시스템이 아닌 확률적 시스템이다. 같은 행동을 하더라도, 다른 결과가 나올 수 있다. 쉽게 예를 들면, 내가 시속 100km로 1시간 주행했을 때, 어떤 날은 100km를 갈수도 있지만, 교통체증이 심각하거나 교통 사고라도 발생한 날엔 50km도 못갈 수 있다. 행동 하나를 하더라도 다른 결과를 초래할 수 있는 것이 확률적 ..

    [sql] 클러스터형 인덱스와 보조 인덱스 특징

    클러스터형 인덱스 특징 (Clustered Index) 클러스터형 인덱스 생성 시에는 데이터 페이지 전체가 재정렬됨. 따라서 이미 대용량 데이터가 입력된 상태라면 업무시간에 클러스터형 인덱스를 생성하는 것은 심각한 시스템 부하를 줄 수 있음. 클러스터형 인덱스는 인덱스 자체의 리프 페이지가 곧 데이터임. 그러므로, 인덱스 자체에 데이터가 포함되어 있다고 할 수 있음 클러스터형 인덱스는 보조 인덱스보다 검색 속도는 더 빠르다. 하지만 데이터 입력/수정/삭제는 더 느림 클러스터 인덱스는 성능이 좋지만 테이블에 한 개만 생성할 수 있음. 따라서, 어느 열에 클러스터형 인덱스를 생성하는지에 따라서 시스템의 성능이 달라질 수 있음 보조 인덱스 (Secondary Index) 보조 인덱스 생성 시, 데이터 페이지는..

    파이썬과 객체지향 (python and class) 3 - 생성자(__init__, initializer)

    파이썬을 하다보면 __init__ 이라는 친구를 종종 만나실 수 있습니다. 많은 경우에서 class안에서 가장 처음으로 정의하는 함수 이기도 하죠. 파이썬에서 이친구는 생성자(initializer)라고 불립니다. 이 생성자는 어떨때 쓰일까요? 아래 예제를 통해 한번 살펴보겠습니다. # 자동차 class를 만들어보자. class Car: def set_car_spec(self, brand: str, model: str): self.brand = brand self.model = model def info(self): context = {'brand': self.brand, 'model': self.model} print(context) # ***여기서 self는 class 자체를 지칭한다. my_car =..

    파이썬과 객체지향 (python and class) 2

    파이썬의 class 지난 포스팅에서도 언급했다시피 class는 객체모델링의 수단입니다. 현실세계의 객체를 프로그래밍적으로 묘사하는 방법이죠. 이번 포스팅에선 학생이라는 현실 세계의 개체를 객체를 프로그래밍으로 표현해보겠습니다. 클래스를 만들 때, 두가지 관점에 유의하면 좋습니다. 상태 (인스턴스) 행위 (메서드) 좀 더 구체적으로 묘사하며 학생을 떠올려보겠습니다. 학생은 학년이 있을것이며, 학번이 있고, 전공, 학교, 키, 몸무게, 이름, 주소 등등 여러가지 상태를 갖고 있을 것입니다. 이러한 상태는 “변수”를 만들어줘서 저장을 하게 되는데 이것을 파이썬에서는 “instance variable (인스턴스)” 라고 부른다. (자바나 다른 언어에선 다른 방식으로 이런 상태를 부른다고 합니다) 그렇다면 행위엔..