데이터로 Deep Dive

데이터 분석과 개발 경험을 공유합니다.

MLOps 부트캠프 by 한경+토스뱅크/Machine Learning 28

단어 단위 - 자연어 전처리(정제, 불용어, 정규화, 어간 추출)

자연어 전처리란?자연어 데이터를 사용할 때, 전처리를 어떻게 하냐에 따라 분석 결과가 크게 달라진다. 예를 들어, 'Oh, Hi helo. Nice to meetyou.' 문장에서 맞춤법과 띄어쓰기 수정, 그리고 의미 표현에 크게 기여하지 않는 'Oh' 제거, 중첩된 유의어 제거(Hi, Hello), 각 단어에 숫자 인덱스 부여 등의 작업을 거치고나면 {'Hi':0, 'Nice':1, 'to':2, 'meet':3, 'you':4} 와 같이 분석에 활용하기 좋은 형태가 된다. 이러한 과정을 자연어 전처리라고 한다.  자연어 전처리 과정토큰화: 자연어 데이터를 분석을 위한 작은 단위(토큰)로 분리한다.정제: 분석에 큰 의미가 없는 데이터들을 제거한다.정규화: 표현 방법이 다르지만 의미가 같은 단어들을 통..

자연어 처리(NLP)와 한국어 자연어 처리의 어려움

자연어 처리란?언어는 크게 인공어와 자연어로 나눌 수 있다.인공어는 정보 전달을 위해 인위적으로 만들어진 언어로, 대표적으로 사람과 컴퓨터의 소통을 위해 만들어진 프로그래밍 언어가 있다. 반대로 사람들의 일상 생활에서 자연 발생된 언어를 자연어라고 한다. 자연어에는 다양한 정보들이 담겨져 있으나 컴퓨터는 인공어로만 소통하므로 자연어를 다루려면 별도의 처리 과정이 필요하다. 그 과정을 자연어 처리(NLP: Natural Language Processing)이라고 한다.  자연어 처리 하위 분야에는 자연어 이해(NLU: Natural Language Understanding)와 자연어 생성(NLG: Natural Language Generation)이 있다. 자연어 처리 방법규칙 기반 접근법(Rule Bas..

로지스틱 회귀 - 경사 하강법

로지스틱 회귀의 가설 함수와 손실 함수를 봤으므로 이제 경사 하강법을 알아보자.  가설 함수와 손실 함수는 좀 다르지만, 경사 하강법을 하는 방법은 선형 회귀와 거의 동일하다.  시작점을 위해 처음에는 세타 값들을 모두 0 또는 모두 랜덤으로 지정한다. 그러면 현재 세타 값들에 대한 손실, 즉 현재 가설 함수에 대한 손실을 계산할 수 있다. 여기서부터 시작해서 세타를 조금씩 조율하며 손실을 계속 줄여나가야 한다.  예를 들어, $θ_0, θ_1, θ_2$... 이렇게 세타 값이 3개 있다고 가정하자. 손실 함수를 $θ$에 대해 편미분하고, 그 결과에 학습률 알파를 곱한다. 그리고 그 결과를 기존 $θ_0$에서 빼면 된다. 똑같이 $θ_1$과 $θ_2$도 업데이트 하면 된다. 이렇게 모든 세타값들을 업데이..

로지스틱 회귀 - 손실 함수

선형 회귀를 통해 하려고 하는 건 학습 데이터에 최대한 잘 맞는 가설 함수를 찾는 것이다. 그러기 위해선 가설 함수를 평가하는 어떤 기준이 있어야 하는데, 그 기준이 되는게 손실 함수이다. 로지스틱 회귀에서도 마찬가지다. 데이터에 잘 맞는 가설 함수를 찾고, 손실 함수를 이용해 가설 함수를 평가한다. 선형 회귀의 손실 함수는 평균 제곱 오차라는 개념을 기반으로 하는데, 데이터 하나하나의 오차를 구한 후에 그 오차들을 모두 제곱항 평균을 내는 작업을 한다. 로지스틱 회귀의 손실 함수는 평균 제곱 오차를 사용하지 않고, 대신 '로그 손실', 영어로는 log loss라는 것을 사용한다. 좀 더 어려운 푷ㄴ으로는 cross entropy라고도 한다.  로그 손실로그 손실은 아래와 같은데, 이를 로그 손실이라고 ..

다항회귀(Polynomial Regression)

다항회귀란?선형 회귀는 학습 데이터에 가장 잘 맞는 일차식을 찾아서 예측을 하는 알고리즘인 반면, 다항 회귀는 고차식을 찾아서 예측하는 알고리즘이다.  집 값 예측 문제를 생각해보자. 항상 집의 크기라는 변수가 주어진다는 가정을 했고 이걸 하나의 속성으로 이용했는데 사용하는 데이터가 항상 이렇게 하나만 사용해도 의미가 있는 완벽한 변수일 수는 없다. 예를 들어 집이 사각형이라고 가정하고 집 크기 대신 집의 높이와 너비 데이터만 있다고 하자.사실 아무리 너비가 커도 높이가 작거나, 높이만 크고 너비만 작으면 크기가 작고 구조가 효율적이지 않기 때문에 집 값이 높지 않다. 사실 이 두 변수들보다 집값을 예측하는 데 훨씬 좋은 수치는 이 둘을 곱한 값, 집의 넓이다.단순 선형 회귀를 사용하면 이 두 변수가 서..

다중 선형 회귀

다중 선형회귀는 선형 회귀를 하나의 입력 변수가 아닌 여러개의 입력 변수를 사용하여 목표 변수를 예측하는 알고리즘이다.  예를 들어, 아래와 같은 학습 데이터가 있으면,집크기, 방 수, 연식, 지하철까지의 거리 등등 을 이용하여 선형 회귀를 통해 집 값을 혜측하려는 것이다. 다중 선형 회귀 문제 표현위의 집 값 예측에 따른 표를 보면 입력 변수는 '집 크기(평), 방 수, 건물 나이(년), 지하철 거리(m)'로 4개의 변수가 있다. 입력 변수를 다른 말로는 '속성(feature)'라고 한다. 첫 번째 입력 변수는 $x_{1}$, 두 번째 입력 변수는 $x_{2}$ 처럼 밑첨자로 변수의 종류를 구분하여 나타낸다.여기서 입력 변수의 개수는 n으로 표현하는데, 위의 표에 따르면 입력 변수가 총 4개이기 때문에..

선형 회귀(Linear Regression)

선형 회귀 (Linear Regression)우선 집 크기가 주어졌을 때, 집 값을 예측한다고 해보자. 이때 선형 회귀는 여기 있는 데이터를 가장 잘 대변해 주는 선을 찾아내는 것이다. 이 데이터에 가장 잘 맞는, 가장 적절한 하나의 선을 찾아내는 거다. 통계학에서는 최적선, 영어로는 line of best fit이라고도 한다. 위의 이미지와 같이 데이터에 잘 맞는 최적선을 찾았다고 가정해보자. 그럼 이걸 어떻게 활용할 수 있을까? 아래 이미지의 최적선을 보면 50평 집 가격은 20억으로, 30평인 집은 약 10억 5천만원이라고 볼 수 있다. 이처럼 정확하진 않더라도 꽤나 합리적인 예측을 할 수 있다. 변수위의 예에서 우리가 맞추려고 하는 '집 가격'은 '목표 변수(target variable)' 또는 ..

정규화(Regularization)와 L1(Lasso), L2(Ridge) 정규화

정규화(Regularization)란?복잡한 모델을 그대로 학습시키면 과적합이 된다. 이때, '정규화' 라는 기법을 통해 학습 과정에서 모델이 과적합 되는 것을 예방할 수 있다. 아래 좌측 이미지와 같은 학습 데이터를 이용하여 다항 회귀를 해보면 우측 이미지처럼 모델이 과적합되어 복잡한 다항 함수가 나오게 된다.  과적합된 함수는 보통 위아래로 엄청 왔다 갔다 하는 특징이 있다. 많은 굴곡을 이용하여 함수가  training데이터를 최대한 많이 통과하도록 하는 것이다. 함수가 이렇게 급격히 변화한다는 것은 함수의 계수, 즉 가설 함수의 θ값들이 굉장히 크다는 의미이다.  정규화는 모델을 학습시킬 때 θ 값들이 너무 커지는 것을 방지해준다. θ 값들이 너무 커지는 걸 방지하면 아래 이미지처럼 trainin..

그리드 서치(Grid Search)와 하이퍼 파라미터 (Hyperparameter)

하이퍼 파라미터 (Hyperparameter)많은 머신 러닝 알고리즘은 학습을 하기 전에 미리 정해주어야 하는 변수 또는 파라미터들이 있다.여기서 하이퍼 파라미터란 학습을 하기 전에 미리 정해줘야 하는 변수 또는 파라미터들을 의미하는데 scikit-learn에서 보통 모델을 만들 때 옵셔널 파라미터로 정해주는 변수들이다.하이퍼 파라미터에 어떤 값을 넣어주느냐에 따라 성능에 큰 차이가 있을 수 있기 때문에 모델의 성능을 높여주는 좋은 하이퍼 파라미터를 고르는게 굉장히 중요하다.  예를 들면, Lasso는 L1 정규화를 해주는 회귀 모델인데, scikit-learn에서 Lasso 모델을 만들 때 alpha와 max_iter라는 옵셔널 파라미터를 지정해 준다. model = Lasso(alpha=0.001, ..

k겹 교차 검증(k-fold cross validation)

k겹 교차 검증(k-fold cross validation)은 머신 러닝 모델의 성능을 조금 더 정확하게 평가할 수 있는 방법이다. 머신 러닝 알고리즘을 만들 때, training set은 모델이 인풋 변수를 잉용하여 아웃풋 변수를 예측할 수 있도록 학습시키는데 사용하고, test set은 학습시킨 모델이 얼마나 예측을 잘 하는지, 즉 모델의 성능이 얼마나 좋은지를 파악하기 위해 사용한다.  이렇게 모델의 성능을 파악하면 어떤 문제가 생길 수 있을까?test set에서만 성능이 좋은 걸 수도 있고, 반대로 test set에서만 성능이 좋지 않게 나올 수도 있다.  교차 검증은 이런 문제를 해결해 주는 방법이다.k-겹 교차 검증k-겹 교차 검증은 먼저 전체 데이터를 k개의 같은 사이즈로 나눈 후, 반복적으..