Category Archives: Machine Learning

[프로그래머를 위한 데이터마이닝] #2. WEKA를 활용한 데이터 마이닝

외카(WEKA)는 데이터 전처리, 분류, 회귀, 클러스터링, 연관 규칙, 시각화 등 데이터 마이닝 툴을 포함하는 오픈소스 프레임워크다. 또한 GUI 환경을 제공하여 다양한 데이터 마이닝 알고리즘을 직접 활용해볼 수 있다.

설치하기

설치를 하려면 먼저 로컬 머신에 자바가 설치되어 있어야 한다. 플랫폼에 따라 설치해야 하는 자바 버전이 다를 수 있으니 WEKA 사이트를 참고하여 자신의 머신에 맞는 자바를 설치한다. 여기에서는 최신 버전인 3.7.7(weka-3-7-7.dmg)를 설치한다.

설치 후 외카를 실행하면 아래와 같은 화면이 나온다.

weka_startup

  • Explorer
    학습할 데이터셋에 대해 다양한 알고리즘을 활용하여 데이터를 학습하는 도구
  • Experimenter
    알고리즘을 서로 비교
  • KnowledgeFlow
    SAS E-miner와 비슷한 드래그앤드롭 방식의 학습 프로세스 생성 도구

외카 API

GUI 환경 이외에도 API를 직접 활용하여 프로그래밍할 수도 있다. 실습을 위해 이클립스에서 프로젝트를 하나 만들어서 weka-dev-3.7.7.jar, RBFNetwork-1.0.4.jar를 라이브러리로 추가한다.

외카의 주요 패키지는 아래와 같다.

  • weka.core
    공통 컴포넌트
  • weka.classifiers
    분류 알고리즘
  • weka.clusters
    클러스터링 알고리즘
  • weka.attributeselection
    속성 선택 알고리즘
  • weka.associations
    연관 분석 알고리즘
  • weka.filters
    데이터셋 필터링 컴포넌트

여기에서는 책, “실전 예제로 살펴보는 집단지성 프로그래밍”에 나오는 로그인 횟수를 예측하는 모델을 만들고자 한다. 예를 들어 학습할 데이터셋이 다음과 같다고 하자.

사용자 나이 성별 로그인횟수
20 5
제인 30 2
에드 40 3
에이미 45 4

이 데이터셋에서 나이와 성별이 입력 변수 X에 해당하고, 로그인 횟수가 목표 변수 또는 클래스 변수인 Y에 해당한다. 이처럼 주어진 데이터셋을 기반으로 예측 모델을 생성한 후, 아래의 시험 데이터셋에 대한 로그인 횟수를 예측해 보자.

사용자 나이 성별 로그인횟수
마이크 32 Y
메리 32 Y

예측 모델을 만드는 과정은 다음과 같다.

  • 데이터셋의 속성을 생성한다.
  • 학습 데이터셋을 생성한다.
  • 예측 모델을 빌드한다.
  • 모델의 성능을 측정한다.
  • 새로운 사용자의 목표 변수를 예측한다.

위의 과정을 처리하는 메인 함수는 다음과 같다.

weka_prediction_step1

데이터셋의 속성을 생성하는 메서드는 다음과 같다.

weka_prediction_step2

속성의 타입에 따라 생성하는 방식이 달라진다. 숫자형(numeric) 속성인 경우 Attribute 클래스를 사용한다. 명목형(nominal) 속성인 경우 FastVector를 사용해 각 항목을 추가한다.

데이터셋의 속성을 생성했으면, 해당 속성을 가지는 학습 데이터셋을 생성한다.

weka_prediction_step3

학습 데이터셋에서는 입력속성뿐만 아니라, 각 입력에 따른 목표 속성(로그인 횟수)까지 포함하여야 한다. 학습할 데이터셋이 준비되면, 해당 데이터셋을 바탕으로 예측 모델을 빌드한다.

weka_prediction_step4

데이터셋의 특성에 따라 다양한 분류 알고리즘을 적용할 수 있다. 여기에서는 RBF 알고리즘을 적용한다.

예측 모델이 빌드되면, 모델의 성능을 측정한다.

weka_prediction_step5

모델의 성능을 측정하려면 목표값이 알려진 별도이 데이터셋이 필요하다. 일반적으로 학습 데이터셋의 30% 정도는 남겨두어 학습할 때는 70%의 데이터만으로 모델을 빌드한다. 그런 후 모델의 성능을 평가할 때 나머지 30%인 데이터셋, 즉 검증용(validation) 데이터셋을 활용한다.

예측 모델의 성능은 다음과 같다.

weka_prediction_step6

예측 모델의 성능을 확인하여, 다른 알고리즘을 적용하여 이전 모델과 비교해 본다. 이러한 과정을 거쳐 최적의 예측 모델을 만들어낸다.

최종적인 예측 모델이 만들어지면 새로운 데이터 셋, 즉 시험 데이터셋에 대해 결과를 예측해본다.

weka_prediction_step7

예측 결과는 다음과 같다.

Predicted number of logins [age=32]:
Male = 3.3578194529075382
Female = 2.9503429358320865

즉 32세 남자의 경우 3.35회, 여자의 경우 2.95회 로그인할 것으로 예측했다.

참고 자료

[프로그래머를 위한 데이터마이닝] #1. 데이터 마이닝이란

예전에 하둡 기반의 로그 분석 시스템을 개발하면서 데이터 마이닝이라는 분야를 접했다. 맨땅에서 헤딩하는 격으로 시작하긴 했는데 별다른 지적 성장도 이뤄내지 못했고, 시스템적인 성과도 없었다. 그럼에도 배웠던 내용을 머리에서 삭제하기는 아까워서 정리했던 모양이다. 참 부지런했다.

총 5개의 시리즈로 글을 썼다.

  • 데이터 마이닝이란?
  • WEKA를 활용한 데이터 마이닝
  • 클러스터링(Clustering)이란
  • 유사도(Similarity)와 거리(Distance)
  • 유사도를 기반으로 추천 시스템 만들기

우선 데이터 마이닝에 대해서 알아본다

개념

데이터 마이닝(Data Mining)이란 데이터를 분석하여 데이터간의 패턴을 발견하고 예측 모델(predictive model)을 만드는 일이다. 또는 데이터 마이닝은 대규모 데이저 저장소에서 유용한 정보를 자동으로 탐색하기 위해, 기존의 데이터 분석 기법과 대규모 데이터 처리를 위한 알고리즘을 합성한 기법이다.

데이터 마이닝은 데이터를 분석해서 이전에는 알려지지 않은 패턴이나 모델을 발굴하는 데 그 목적을 두고 있다.

what_is_data_mining

그림. 데이터 마이닝을 통해 과거의 데이터(Historical Data)를 기반으로 예측 모델을 만든 후, 미래의 데이터를 모델에 적용한다.

KDD(Knowledge Discovery in Database)

KDD란 데이터에서 유용한 정보와 패턴을 발견하는 프로세스다.

kdd_process

  • Selection
    다양한 정보원으로부터 데이터를 수집한다.
  • Preprocessing
    데이터를 전처리한다.
  • Transformation
    표준화된, 분석가능한 형태로 데이터를 변환한다.
  • Data Mining
    유용한 정보/패턴을 발견한다.
  • Interpretation / Evaluation
    발견한 정보나 패턴을 도메인 관점에서 해석한다.

즉 데이터 마이닝은 KDD 전체 프로세스의 일부과정일 뿐이다. 실제로 데이터 마이닝은 전체 과정에서 12% 정도의 자원(또는 시간)을 소모할 뿐이며, 데이터를 수집하고 전처리/변환 과정에서 80% 정도의 자원(시간)을 필요로 한다.

데이터 마이닝 모델의 유형

데이터 마이닝 모델은 아래와 같은 유형이 있다.

types_data_mining

  • 예측형(Predictive)
    데이터는 입력값과 결과값으로 구성되어 있다.
    즉 입력값 x가 주어진 경우 그 결과로 y가 만들어진다.
    이 경우 모델은 f : x -> y 로 모델링할 수 있다.
    이와 같이 입력값을 기반으로 결과 값, 또는 목표(target)를 예측하는 모델이다.

    • 회귀(regression): 목표가 연속형인 경우
    • 분류(classification): 목표가 이산형/범주형인 경우
  • 서술형(Descriptive)
    이와 달리 서술형에서는 결과값이 알려져 있지 않은 입력 데이터에 대해, 데이터에 숨어 있는 패턴을 찾아내는 방법이다.

    • 군집(clustering): 거리(비유사도)를 기반으로 관련성이 높은 항목을 서로 그룹화하는 방법
    • 연관 규칙(association rule): 입력 데이터의 각 속성간의 관련성을 찾는 방법

주요 알고리즘

  • 회귀
    • Linear Regression
    • Logistic Regression
  • 분류
    • 결정 트리(Decision Tree)
    • 신경망(Neural Networks)
    • 지지 벡터 머신(Support Vector Machine)
    • 베이지안(Bayesian) 분류기: 순수 베이지안(Naive Bayes) 분류기, 베이지안 믿음 네트워크(BBN: Bayesian Belief Network
    • 앙상블(Ensemble)
  • 군집
    • K-means 클러스터링
    • 밀도 기반 클러스터링