Swift에서 생성 ML을 사용하여 머신러닝 모델 구축

이 보도는 JX 통신 Advent Calendar 2018 13일째다.
WWDC 2018에서 발표된 Create ML에 대해 이번에는 표 형식의 데이터住宅価格を予測를 사용하는 머신러닝 모델의 구축을 중심으로 소개한다.

Create ML


L을 만드는 것은 머신러닝 모델을 구축하는 프레임워크입니다.
Xcode10의 Playground를 사용하면 모델을 쉽게 구축할 수 있습니다.

작업 흐름


Create ML - Overview

학습 데이터

住宅価格を予測에서 공개한 데이터를 사용하여 모델을 구축하는 교육을 실시한다.
Kaggle(보스턴 근교의 부동산 정보)의train.csv 실제 코드 작성.CSV의 데이터 구성은 다음과 같습니다.이번 목적은 예측medv의 모델을 구축하는 것이다.
열수
설명
crim
1인당 범죄율
zn
25000평방피트 이상 주택가의 비율
indus
비소매업 토지 면적 비율
chas
찰스 강을 따라
nox
질소산화물 농도
rm
평균 방 수
age
1940년 이전에 지어진 주택의 비율
dis
보스턴 취업센터 5개까지의 거리 가중치 평균치
rad
고속도로의 교통 편의성
tax
10000달러당 고정자산세 세율
ptratio
학생과 교사의 비율
black
흑인 거주자 비율
lstat
저소득자 비율
medv
집값 중위수 (1000달러 단위)

훈련하다


데이터를 준비한 후 훈련이 이어진다.
CSV 파일을 가져온 후 Boston Housing 에서 교육 및 테스트를 위한 하위 집합으로 분할합니다.CSV가 원래 교육과 테스트로 나뉘어 있다면 필요하지 않습니다.
그리고 지정 알고리즘Run Playground을 지정하여 훈련을 시작한다.
import CreateML
import Foundation

do {
    let trainingCSV = URL(fileURLWithPath: "path/to/train.csv")
    let houseData = try MLDataTable(contentsOf: trainingCSV)
    let (trainingData, testData) = houseData.randomSplit(by: 0.8, seed: 0)

    let housePricer = try MLLinearRegressor(trainingData: trainingData, targetColumn: "medv")
} catch {
    print(error)
}

지원되는 알고리즘


회귀


방법
Type
선형 회귀
MLLinearRegressor
결정 트리
MLDecisionTreeRegressor
랜덤 숲
MLRandomForestRegressor
목재를 깔다
MLBoostedTreeRegressor

분류


방법
Type
결정 트리
MLDecisionTreeClassifier
랜덤 숲
MLRandomForestClassifier
목재를 깔다
MLBoostedTreeClassifier
논리 회귀
MLLogisticRegressionClassifier
벡터 머신 지원
MLSupportVectorClassifier

평가 모델

metrics에서 교육 모델의 성능을 확인할 수 있습니다.
import CreateML
import Foundation

do {
    let trainingCSV = URL(fileURLWithPath: "path/to/train.csv")
    let houseData = try MLDataTable(contentsOf: trainingCSV)
    let (trainingData, testData) = houseData.randomSplit(by: 0.8, seed: 0)

    let housePricer = try MLLinearRegressor(trainingData: trainingData, targetColumn: "medv")

    let metrics = housePricer.evaluation(on: testData)

    // Max error: 23.29
    // Root mean squared error: 5.67
    print(metrics)
} catch {
    print(error)
}
회귀 알고리즘에 대해 metrics는 예측값과 테스트 데이터 값 간의 오차를 기록했다.
훈련의 목적은 최대 오차Max Error와 균방근 오차Root-Mean-Square Error를 통해 모델의 성능을 측정하고 그 오차를 최소화하는 것이다.
도량에 대해서는 Apple Developer 사이트의 Documentation 페이지에 비해 Apple이 제공하는 randomSplit(by:seed:)Turi Create와CreateML처럼 머신러닝 도구로서의 설명이 이해하기 쉽다.

모델을 내보내고 응용 프로그램에 끼워 넣기


학습이 끝난 후에 모델을 내보내고 응용 프로그램에 편입하세요.
경로를 지정하고 write(to:) 또는 write(toFile:)로 내보냅니다.
import CreateML
import Foundation

do {
    let trainingCSV = URL(fileURLWithPath: "path/to/train.csv")
    let houseData = try MLDataTable(contentsOf: trainingCSV)
    let (trainingData, testData) = houseData.randomSplit(by: 0.8, seed: 0)

    let housePricer = try MLLinearRegressor(trainingData: trainingData, targetColumn: "medv")

    // ...

    try housePricer.write(to: URL(fileURLWithPath: OUTPUT_PATH))
} catch {
    print(error)
}
내보낸 모델을 응용 프로그램 프로젝트에 추가한 후 아래와 같이 호출합니다.
프로젝트에 추가하면 모델 클래스와 입력/출력 구조가 자동으로 생성됩니다.
import CoreML

do {
    let input = HousePricerInput(
        ID: 3,
        crim: 0.02729,
        zn: 0,
        indus: 7.07,
        chas: 0,
        nox: 0.469,
        rm: 7.185,
        age: 61.1,
        dis: 4.9671,
        rad: 2,
        tax: 242,
        ptratio: 17.8,
        black: 392.83,
        lstat: 4.03)

    let housePricer = try HousePricer(contentsOf: HousePricer.urlOfModelInThisBundle)
    let output = try housePricer.prediction(input: input)
    print(output.medv)
} catch {
    print(error)
}

총결산


CreateML에 대해서는 테이블 데이터를 사용하는 샘플에 대해 설명합니다.
아직 정보가 적습니다. CreateML의 이미지 분류를 사용한 소개 기사가 몇 편 있지만 텍스트와 표 데이터를 사용한 기사가 적다는 느낌이 들어 이번 기사를 쓰기로 했습니다.
머신러닝에 관심이 있지만 손대기 힘든 응용 엔지니어들이 공부하는 계기가 됐으면 좋겠어요.
WWDC 2017에서 Core ML을 발표하고 2018에서 Create ML과 Apple이 주력하는 분야이기 때문에 이 시기에 머신러닝을 접하면 다음 WWDC가 더 재미있어질 것 같습니다.

좋은 웹페이지 즐겨찾기