DATA/머신 러닝

DATA/머신 러닝

    [머신 러닝] 간단한 머신 러닝 프로젝트 해보기

    동기 지금 Hands-On Machine Learning with Scikit-Learn, Keras & TensorFlow로 공부하고 있는데, chapter 2에서 간단한 머신 러닝 프로젝트를 해볼 수 있는 내용이 있어서 따라해보려고 합니다. 데이터 설명 이 프로젝트는 StatLib 저장소에 있는 캘리포니아 주택 가격 데이터셋을 사용합니다. 이 데이터는 캘리포니아의 블록 그룹마다 인구, 중간 소득, 중간 주택 가격 등을 담고 있습니다. 목표 이 데이터로 모델을 학습시켜서 다른 측정 데이터가 주어졌을 때 구역의 중간 주택 가격을 예측해야 합니다. 문제 정의 먼저 문제를 정의해야 합니다. 우리에게는 레이블된 훈련 샘플이 있으니 지도 학습이고, 값을 예측해야 하고 예측에 사용할 특성이 여러개이므로 다중 회귀..

    [머신 러닝] 행렬 인수분해 (Matrix Factorization)

    행렬 인수분해 사람들의 각 항목에 대한 기호 정보가 있는 행렬이 있을 때, 이 행렬은 두 개의 행렬의 곱으로 나타낼 수 있습니다. 이를 이용한 예측이 가능한데, 예를 들어서 아래와 같이 몇 칸이 비어있는 행렬이 있다고 하겠습니다. 항목 1 항목 2 항목 3 사람 1 4 1 5 사람 2 2 ? 3 사람 3 ? 3 1 몇 칸이 비어있기 때문에 곱했을 때 완벽히 똑같은 두 개의 행렬은 구하기 힘들 수도 있습니다. 따라서 이 행렬을 인수분해해서 곱했을 때 가장 가까운 두 개의 행렬의 곱으로 나타낸다면, 두 행렬의 곱으로 빈 칸의 값을 예측할 수 있습니다. 속성 학습 여기서 속성을 학습할 때에도 경사 하강법을 이용합니다. 먼저 두 행렬에 임의의 값을 넣고 곱해서 목표 행렬과 얼마나 차이가 나는지 구합니다. 여기서..

    [머신 러닝] 협업 필터링 (collaborative filtering)

    협업 필터링 협업 필터링은 많은 사용자들로부터 얻은 기호 정보(taste information)에 따라 사용자들의 관심사들을 자동적으로 예측하게 해주는 방법입니다. 예를 들어, 아래와 같은 데이터가 있고, 혜린이의 항목 4에 대한 기호 정보를 알고 싶다고 하겠습니다. 이름 항목 1 항목 2 항목 3 항목 4 지원 4 3 4 4 혜린 4 3 5 ? 이 경우에 혜린이의 항목1, 2, 3에 대한 기호 정보가 지원이와 유사하기 때문에 혜린이는 지원이와 비슷하다고 할 수 있고, 따라서 혜린이가 항목 4에 높은 점수를 줄 것이라 예측할 수 있습니다. 실제로는 데이터가 훨씬 많을 경우를 다루게 될 텐데 예를 들어 혜린이와 항목 1, 2, 3이 비슷한 사람이 1000명 있다면 그 1000명의 항목 4에 대한 평균을 혜..

    [머신 러닝] 에이다 부스트 (AdaBoost)

    Boosting 부스팅은 또다른 앙상블 기법입니다. 부스팅 역시 앙상블 기법이므로 여러 개의 모델을 씁니다. 부스팅은 일부러 성능이 안좋은 모델들을 사용합니다. Bagging과 마찬가지로 각 모델이 조금 다른 데이터를 써서 학습하는데, Bootstrap처럼 데이터를 임의로 만드는 게 아니라 먼저 만든 모델들이 어떻게 예측을 했냐에 따라 뒤에 만드는 데이터 셋이 결정됩니다. 또한, 모델들의 예측을 종합할 때 단순히 투표를 하는 게 아니라 성능이 좋은 모델의 예측을 더 반영합니다. 에다 부스트 (Adaboost) 에다 부스트에서도 수많은 결정 트리들을 만듭니다. 에다 부스트에서는 깊은 결정 트리가 아니라 루트 노드 하나와 분류 노드 두 개를 갖는 얕은 결정 트리를 사용합니다. 이런 식으로 하나의 질문과 그 ..

    [머신 러닝] 랜덤 포레스트 (Random forest)

    결정 트리와 앙상블 결정 트리는 이상적인 머신 러닝 모델이 되기에는 부정확합니다. 하지만 결정 트리를 응용하면 성능이 좋은 다른 모델들을 만들 수 있습니다. 결정 트리를 응용하는 대표적인 방법 중 하나는 앙상블(ensemble)이라는 방법이 있습니다. 앙상블은 하나의 모델을 쓰는 대신 수많은 모델들을 이용해서 예측을 한 후 여러 예측들을 합쳐서 종합적인 판단을 하는 것입니다. 랜덤 포레스트 랜덤 포레스트는 트리 앙상블 알고리즘 중 하나입니다. 랜덤 포레스트는 수많은 결정 트리를 임의로 만들고 다수결 투표로 결과를 종합하는 알고리즘입니다. 랜덤 포레스트에서 임의성을 더하는 요소에는 아래 두가지가 더 있습니다. Bootstrapping Bootstrapping은 갖고 있는 데이터 셋을 이용해서 조금 다른 데..

    [머신 러닝] 결정 트리 (Decision tree)

    결정 트리 결정 트리는 예/아니오로 답할 수 있는 어떤 질문들이 있고, 그 질문들의 답을 따라가면서 데이터를 분류하는 알고리즘입니다. 지니 불순도 (Gini Impurity) 결정 트리에서는 여러 질문들의 답을 따라가면서 데이터를 분류한다고 했는데요, 결정 트리를 만들 때 각 노드에 어떤 질문 또는 분류가 들어갈지를 어떻게 고를까요? 머신 러닝 프로그램이 결정 트리를 만들 때에는 경험을 통해 직접 정해나가야 합니다. 여러 데이터를 분류해보면서 각 위치에서 어떤 노드가 제일 좋을지를 결정하는 것입니다. 이를 위해서는 좋은지 안좋은지를 평가할 기준이 있어야 하는데요, 결정 트리에서는 이것을 지니 불순도(Gini Impurity)라고 합니다. 지니 불순도는 데이터 셋 안에 서로 다른 분류들이 얼마나 섞여있는지..

    [머신 러닝] 그리드 서치 (Grid search)

    하이퍼 파라미터 하이퍼 파라미터는 학습 전에 미리 정해줘야하는 변수 떠는 파라미터를 뜻합니다. Lasso 모델을 만들 때를 생각해보세요. alpha나 max_iter를 전달해줬었죠. 이 두 값은 모델이 학습해서 정하는 게 아니라 사람이 미리 정해줘야 했었죠. 이런 것들을 하이퍼 파라미터라고 합니다. 하이퍼 파라미터로 어떤 값을 사용하냐에 따라 모델의 성능이 크게 달라질 수 있습니다. 따라서, 모델의 성능을 최대한 높여주는 좋은 하이퍼 파라미터를 고르는 것이 굉장히 중요한데, 좋은 하이퍼 파라미터를 고르는 방법 중 하나인 그리드 서치를 알아보겠습니다. 그리드 서치 (Grid search) 그리드 서치는 꽤나 직관적인데, 우선 정해줘야 하는 각 하이퍼 파라미터에 넣어 볼 후보 값을 몇 개씩 정하고, 각 후보..

    [머신 러닝] 테스트와 검증

    홀드아웃 검증 (holdout validation) 홀드아웃 검증에서는 훈련 세트의 일부를 떼어내어 검증 세트(validation set)을 만듭니다. 검증 세트를 떼어내고 남은 훈련 세트에서 다양한 하이퍼파라미터 값을 가진 여러 모델을 훈련합니다. 그 다음 검증 세트에서 가장 높은 성능을 내는 모델을 선택합니다. 홀드아웃 검증 과정이 끝나면 이 최선의 모델을 전체 훈련 세트에서 다시 훈련해서 최종 모델을 만듭니다. 마지막으로 최종 모델을 테스트 세트에서 평가하여 일반화 오차를 추정합니다. 이 방법은 일반적으로 잘 작동하지만, 검증 세트가 너무 작은 경우 모델이 정확하게 평가되지 않을 것이고, 검증 세트가 너무 크면 검증 세트를 뗀 훈련 세트가 전체 훈련 세트보다 너무 작아지기 때문에 전체 훈련 세트에서..