전체 글 40

선형회귀(GD,Ridge,Lasso,ElasticNet)

선형회귀 및 경사하강법(배치 경사하강법, 미니배치 경사하강법, 경사하강법) 다항회귀 규제가 있는 선형 모델 선형회귀 입력 특성의 가중치 합과 편향 이라는 상수를 더해 예측을 만든다. y는 예측값 n은 특성의 수 xi 는 i 번째 특성값 세타는 j번째 모델 파라미터 와 같이 표현이 가능하다. ▷ 선형 회귀 모델의 MSE 비용 함수 𝜽 값의 MSE(𝜽) 는 다음과 같이 표현할 수 있다. 이때 비용함수의 값을 최소화 하는 𝜽 를 얻을 수 있는 공식이 있는데, 다음과 같다. 경사 하강법 경사하강법 이란? 여러 종류의 문제에서 최적의 해법을 찾을 수 있는 일반적인 최적화 알고리즘 비용 함수를 최소화 하기 위해 반복해서 파라미터를 조정해 가는것 학습률이 너무 작으면 알고리즘이 수렴하기 위해 반복 횟수가 증가하므로 ..

밑바닥부터 시작하는 딥러닝3 내용정리

Class(Variable, Function) 전체 코드를 가져오기에는 길기 때문에 일부 부분씩을 캡쳐하여 정리함 ●Variable Variable 클래스 생성(params : 데이터,변수명,기울기,함수,현재의 세대) data : isinstance 메서드를 통해서 cupy,ndarray 인스턴스만을 받음 name : 이후 Layer 계층에서의 params.__dict__[name]의 형태로 호출 grad : gradient 로, Backpropagation 시 기울기를 저장 creator : input Data ----- Function ------ output Data 에서 , output Data는 Function에서 만들어진 것처럼, 자기자신의 생성자를 저장(해당 함수를 저장함) 데코레이터(@)를..

밑바닥부터 딥러닝3 - 고차 미분

Tanh(x) - 하이퍼볼릭 탄젠트의 고차미분 y = tanh(x) = (exp(x)+ exp(-x)) / (exp(x) + exp(-x)) 함수를 예시로 살펴보자. 이 함수의 미분형태를 살펴보면 ,1-y^2 으로 표현이 가능하다는 것을 알 수 있다. 이 함수를 간단하게 구현해보면, 이와 같은 코드가 된다. class Tanh(Function): def forward(self,x) : y = np.tanh(x) return y def backward(self,gy) : y = self.outputs[0]() gx = gy * (1- y*y) return gx def tanh(x): return Tanh()(x) 이때, 1차 미분 계산 그래프를 그려보면, import numpy as np from deze..

합성곱 신경망(CNN)

합성곱 신경망이란? 이미지 인식과 음성 인식 등 다양한 곳에서 사용되는데, 특히 이미지 인식 분야에서 자주 사용된다. 합성곱 계층의 구조 완전연결 계층(Affine) CNN 계층 CNN을 이용하여 구축했을때, 출력 가까이에서는 Affine 구조를 사용한다. 이전의 MNIST 숫자인식 데이터는 Flatten 을통해 3차원 데이터를 1차원 행렬(1x784)로 평탄화 하였지만, CNN 방식은 3차원 방식을 유지하여 연산이 가능하다. CNN에서는 입출력 데이터를 입력특징맵, 출력특징맵라고 부른다. 합성곱 연산의 경우, 입력과 필터에서 대응하는 원소끼리 곱한후 그총합을 구한다. (단일 곱셈-누산 방식이라고 함) 합성곱 연산시 패딩(Padding)도 가능한데, 이는 출력의 크기를 조정하는데 사용된다. np.pad(..

[ML]캐글 신용카드 사기 검출

데이터 분석전 알아야 할 지식정리 Log변환 왜곡된 분포도를 가진 데이터 세트를 비교적 정규 분포에 가깝게 변환해주는 Feature Engineering 방식 Skrew 된 분포도 대부분을 로그변환으로 바꾸는것을 권장 IQR IQR(Inter Quantile Range)를 통한 Outlier Removal(이상치 제거) Box Flot 을 통해, 범위 밖에있는 값들은 이상치로 간주 UnderSampling And OverSampling UnderSampling : 많은 레이블을 가진 데이터세트를 적은 레이블 세트만큼 감소 시킴 OverSampling : 적은 레이블을 가진 데이터세트를 증식시켜, 많은 레이블 세트만큼 부풀림 (SMOTE방식을 통해 OverSampling을 실시) SMOTE : 적은 데이터..

LightGBM

LightGBM이란 XGBoost와 함께 부스팅 계열 알고리즘에서 가장 각광을 받고 있다. XGboost의 경우 뛰어난 부스팅 알고리즘이지만, 여전히 학습시간이 오래걸리는데, 특히 GridSearchCV로 하이퍼 파라미터 튜닝을 수행하다 보면 수행시간이 너무 오래걸리는것을 알수있다. LightGBM의 큰장점은 XGBoost보다 학습에 걸리는 시간이 훨씬 적다는 점이다. LightGBM은 XGBoost의 예측 성능에 별차이가 없지만, 기능상 다양성은 LGBM이 더많다. LGBM의 단점은 적은 데이터 세트에 적용할 경우 과적합이 발생하기 쉽다는 것 일반적으로 10,000건 이하의 데이터 세트 정도라고 LightGBM 공식문서에 기술되어있다. 기존의 GBM계열의 트리분할은 리프 중심 트리 분할 이였지만, 시간..

XGBoost 소개(파이썬 Wrapper, 싸이킷런 Wrapper) 및 예제

XGBoost 개요 XGBoost는 트리 기반의 앙상블 학습에서 가장 각광받고 있는 알고리즘 중 하나입니다. XGBoost는 GBM에 기반하고 있지만, GBM의 단점인 느린 수행 시간 및 과적합 규제 부재등의 문제를 해결해서 매우 각광을 받고 있다. 파이썬 Wrapper와 싸이킷런 Wrapper에는 약간의 차이가 존재합니다. XGBClassifier는 기존의 사이킷런에서 사용하는 하이퍼 파라미터 몇 가지를 변경하였는데, 변경 사항은 다음과 같습니다. eta -> learning_rate sub_sample ->subsample lambda ->reg_lambda alpha ->reg_alpha 장점 뛰어난 예측 성능 GBM 대비 빠른 수행 시간 과적합 규제 Tree pruning 자체 내장된 교차 검증 ..

투 포인터(Two Pointer)

투포인터 알고리즘이란? 리스트에 순차적으로 접근해야 할때 2개의 점의 위치를 기록하면서 처리하는 알고리즘 예를 들어보면, 한 반에 학생들이 40명이 있을 때, 모든 학생을 번호순서대로 일렬로 세운뒤, 순차적으로 지목한다고 생각해보자 2,3,4,5,6,7번 학생을 부를때, 2번부터 7번까지의 학생 이라고 부를 수도있는데, 이처럼 시작점과 끝점을 사용하여 데이터의 범위를 표현할 수 있다. 시작점(start)과 끝점(end)이 첫번째 원소의 양 끝점을 가르키도록 한다. 현재 부분합이 구하고자 하는 값과 같다면 카운트한다 현재 부분합이 구하고자 하는 값보다 작다면, end를 1증가(구간합이 감소) 현재 부분합이 구하고자 하는 값보다 크다면 start를 1증가(구간합 증가) 모든 경우를 확인할 때까지 2번부터 4..

피처 스케일링(Feature Scaling)

피처 스케일링(Feature Scaling) 이란? 서로 다른 변수의 값 범위를 일정한 수준으로 맞추는 작업을 말한다. 대표적인 방법으로는 표준화 , 정규화 가 존재한다. 예를들어, 피쳐 A의 범위는 0~100 이고, 피쳐 B의 범위는 0~100,000,000이라면, 데이터는 A에값에 크게 영향을 미치지 않을 수 있다. 따라서, 이 변수를 모두 동일한 크기 단위로 비교하기 위해 모두 최소 0~ 최대 1 사이의 값으로 변환 하는것 Sklearn에서 제공하는 대표적인 피처 스케일링 클래스가 2가지 존재한다. StandardScaler 개별 피처를 평균이 0 이고 분산이 1인 가우시안 정규분포를 가진 값으로 변환 왜 중요한가? RBF커널을 이용하는 서포트 벡터머신, 선형 회귀,로지스틱 회귀는 데이터가 가우시안..

[Sklearn]타이타닉 생존자 예측

사이킷런으로 수행하는 타이타닉 생존자 예측 타이타닉 생존자 test,train.csv 들은 https://www.kaggle.com/c/titanic/data 링크에서 다운받을수 있습니다. 이때까지 배웠던 Numpy,Pandas API를 정리 파일을 불러서 DataFrame 형태로 변환 seaborn 라이브러리를 통해서, 데이터를 시각화 info() 함수를 통해서, dataFrame의 데이터정보를 불러옴 fillna() 함수를 통해서, Null(Nan)값을 함수 인자값으로 대체 fillna() 함수를 통해 Nan값 모두 제거 되었음을 확인할 수 있다 value_counts()를 통해, 해당 series값을 count를 할 수 있다. DataFrame 내에 Cabin 열의 값들을 한글자로 바꾸기위해서, 인..

1 2 3 4