CreateML 사용법과 머신러닝의 기본 개념

1. 소개

CreateML을 배우기 전에 먼저 머신러닝이 무엇인지 알아보겠습니다 . 머신러닝이 정확히 무엇인지에 대해 널리 받아들여지는 정의는 없습니다. 머신러닝의 첫 번째 정의는 Arthur Samuel에서 나왔습니다. 그는 머신러닝을 특별히 프로그래밍되었을 때 컴퓨터가 학습할 수 있는 능력을 제공하는 분야로 정의했습니다. Samuel의 정의는 그가 체스 프로그램을 작성했던 1950년대로 거슬러 올라갑니다. 이 프로그램의 놀라운 점은 프로그래머가 체스를 아주 잘 두는데 프로그래밍을 통해 체스 프로그램이 그와 함께 수만 개의 체스 게임을 하게 한다는 것입니다. 나쁜 레이아웃입니다. . 프로그램을 배운 후 그의 체스 실력은 사무엘보다 훨씬 뛰어났습니다. 위의 정의는 다소 비공식적인 정의이며 상대적으로 오래된 것입니다.

또 다른 최근 정의는 Carnegie Mellon University의 Tom Mitchell이 ​​제안했습니다. Tom의 기계 학습 정의는 프로그램이 경험 E를 통해 학습하고, 작업 T를 해결하고, 경험 E를 갖고 판단한 후에만 성과 측정 값 P를 달성할 수 있다는 것입니다. P에 의해 T를 처리하는 프로그램의 성능이 향상되었습니다. 위의 예에서 경험 E는 수만 번 연습한 프로그램의 경험이고, 태스크 T는 체스를 두는 경험입니다. 성능 측정값 P는 새로운 상대와 경쟁할 때 게임에서 승리할 확률입니다.

머신러닝은 지도학습(Supervised Learning)과 비지도학습(Unsupervised Learning)으로 나눌 수 있는데, 지도학습 의 기본 아이디어 는 데이터 세트의 각 샘플에 해당하는 출력이 있고, 이 샘플을 기반으로 예측을 한다는 것입니다. . 비지도 학습 에서는 일련의 레이블이 지정되지 않은 훈련 데이터가 알고리즘에 입력된 다음 알고리즘에 데이터의 고유 구조를 찾도록 지시합니다.

2. CreateML이란 무엇입니까?

Create ML은 Apple이 WWDC 2018에서 출시한 기계 학습 모델을 생성하기 위한 도구입니다. 기계 학습 알고리즘을 사용하여 실제 문제를 해결하기 위해 모델을 훈련시킵니다. CreateML에 포함된 훈련은 지도 학습으로 주로 MLClassifier, MLRegressor 및 MLRecommender에 해당하는 분류 문제, 회귀 문제 및 추천을 다룹니다. 다음은 해당 머신러닝에 대한 배경지식을 주로 소개하여 이해를 돕기 위한 것입니다.

CreateML이 모델을 학습시키는 방법을 간략하게 소개하자면 시스템(iOS 12 또는 macOS Mojave)에 내장된 기계 학습 인프라를 사용하여 전이 학습(Transfer Learning)을 수행할 수 있습니다. 이러한 학습에는 소량의 데이터가 필요합니다. 모델은 Apple 내장 모델의 마지막 몇 레이어가 우리 데이터를 기반으로 훈련됩니다. 이런 식으로 훈련 시간이 크게 줄어들고 심지어 훈련도 몇 초 안에 완료할 수 있습니다. 모델 크기를 kb 수준으로 줄일 수도 있어 앱에 더 쉽게 액세스할 수 있습니다. 비록 적은 양의 데이터가 필요하지만 무(無)에서 만들어질 수는 없으므로, 데이터를 찾고 싶은 학생들은 여기에서 찾아보실 수 있습니다 .
전이 학습

3. 분류 문제란 무엇인가

데이터 집합을 살펴보겠습니다. 이 당뇨병 예측 데이터 집합에서 처음 8개 열은 기능이고 마지막 열은 레이블이며 1과 0은 당뇨병 여부를 나타냅니다.
훈련 데이터
그렇다면 머신러닝의 문제는 다른 사람이 당뇨병에 걸렸는지 여부를 추정할 수 있느냐는 것입니다. 기술적인 측면에서 이는 분류 문제입니다.

분류는 이산 출력 값을 추측하려고 시도한다는 것을 의미합니다. 즉, 0 또는 1이 질병에 걸린 것인지, 실제로 분류 문제에서는 출력이 2개 이상의 값이 될 수 있습니다. 예를 들어 당뇨병에는 두 가지 유형이 있을 수 있으므로 이산 출력 0, 1, 2를 예측하려고 합니다. 0은 당뇨병이 없음을 나타내고, 1은 제1형 당뇨병을 나타내고, 2는 제2형 당뇨병을 나타내지만 이것도 분류 문제입니다. .

따라서 CreateML을 사용할 경우에는 training data와 함께 label 컬럼(labelColumn), feature 컬럼(featureColumn)을 전달해야 하며, 실제 상황에 따라 여러 개 이상의 Column을 지원할 수 있습니다.

물론 사진을 보고 사물을 인식하는 것 역시 분류 문제인데, 입력은 사진이나 동영상 프레임의 모든 픽셀이다. , 등.

Create ML의 다양한 분류자(Classifier)는 해당 DataSource를 설정하여 기능과 레이블을 설명합니다. 오디오 관련 주석 정보입니다.

/// - featureColumn: The name of the column that contains the audio
// features.
///
/// - labelColumn: The name of the column that contains the audio
/// labels.

4. 회귀문제란 무엇인가

예를 들어 화성의 주택 가격을 추정하기 위해 학습 알고리즘을 적용하여 이 데이터 집합에 직선을 그리거나 직선을 맞출 수 있습니다. 3입니다. 물론 이것이 유일한 알고리즘은 아닙니다. 더 좋은 것이 있을 수도 있습니다. 예를 들어 이러한 데이터를 직선으로 맞출 필요는 없으며, 실제 상황에 따라 2차 방정식이나 고차 방정식을 사용하여 맞출 수도 있습니다.

주택 가격은 정수로만 정확하다고 가정하므로 주택 가격은 실제로 일련의 이산 값이지만 우리는 일반적으로 주택 가격을 실수, 즉 연속 값으로 간주합니다.

회귀라는 단어는 이러한 일련의 연속 값 속성을 추론하려고 한다는 의미입니다. 이것이 회귀 문제인데, 회귀를 통해 연속적인 출력을 도출하는 것입니다. 여기에 이미지 설명을 삽입하세요.
회귀 문제의 경우 CreateML에서 모델을 훈련할 때 전달해야 하는 데이터는 기본적으로 동일합니다. 즉, 훈련 데이터는 물론 레이블 열(여기서는 targetColumn으로 이름 지정, 본질)도 전달해야 합니다. 여전히 동일합니다) 및 기능 열(featureColumn)

///   - targetColumn: A String specifying the target column name in the trainingData
///   - featureColumns: An optional list of Strings specifying feature columns to be
///                     used to predict the target, if not provided, default to use all the
///                     other columns in the trainingData, except the one specified by targetColumn

5. 추천 시스템

추천 시스템은 누구에게나 생소할 수 있는데, 추천 시스템의 문제점을 정의하기 위해 예를 들어보겠습니다.

우리가 영화 제공자이고 5개의 영화와 4명의 사용자가 있다고 가정하고 사용자에게 영화를 평가하도록 요청합니다.
여기에 이미지 설명을 삽입하세요.
처음 세 편의 영화는 로맨스 영화이고 마지막 두 편의 영화는 액션 영화인데, 앨리스와 밥은 로맨스 영화를 더 선호하는 반면, 캐롤과 데이브는 액션 영화를 더 선호하는 것으로 보입니다. 그리고 단 한 명의 사용자도 모든 영화를 평가하지 않았습니다. 우리는 각자가 본 적이 없는 영화에 어떤 등급을 줄지 예측하고 이를 추천의 기초로 사용하는 알고리즘을 구축하고 싶습니다.

본 예시에서는 추천 문제의 한 형태로, 각 영화에는 두 개의 특징이 있다고 가정하며 x1은 영화 의 로맨스 지수, x2는 영화 의 액션 지수를 나타냅니다. [x 1 , x 2 ]는 영화의 특성이며, 다른 영화의 평점을 보완하기 위해 특성 데이터를 통해 각 사람에 대해 선형 회귀를 수행할 수 있는 것이 콘텐츠 기반 추천 시스템 (Content Based Recommendations)입니다. 그것에 대해 더 알고 싶으면 여기를 보세요 .

위의 예에는 사용자 매개변수와 영화 특성이 있는데 사실 이 둘 중 어느 것도 없는 또 다른 형태의 추천 문제가 있는데 이 문제를 해결하는 방법은 무엇일까요? 현재 두 가지를 동시에 학습할 수 있는 협업 필터링 알고리즘(Collaborative Filtering)이 있는데, 이는 자가 학습 기능과 동일하며, 학습된 데이터를 모두 읽을 수 있는 것은 아니지만, 이러한 데이터를 추천의 기초로 사용할 수 있습니다 . 사용자에게 영화. 자세한 내용을 알고 싶다면 여기를 읽어 보세요 .

위의 소개에서 훈련 데이터에는 권장 요소, 사용자 및 평가의 세 부분이 포함되어 있음을 알 수 있으며, CreateML에서는 훈련 데이터에도 이 세 가지 데이터 열이 포함되어야 합니다.

///  - itemColumn: Name of the Int or String typed column in the training data containing item identifiers.
///
///  - userColumn: Name of the Int or String typed column in the training data containing user identifiers.
///
///  - ratingColumn: Name of an Int or Double typed column optionally in the training data containing scores or ratings.
///                        The default is nil, which corresponds to no rating column.

6 추천 모델을 훈련하는 방법

6.1 CreateML 앱 사용

CreateML 앱은 훈련에 사용됩니다. 간단하고 사용하기 쉬운 시각적 작업입니다. 데이터를 드래그하기만 하면 됩니다. 다음은 각 모델 유형과 사용 방법에 대한 예를 소개하는 기사입니다. 여기에서 읽을 수 있습니다. 또한 이미지
CreateML 앱
분류 학습 방법에 대한 링크를 추가하세요 .

6.1 Swift 코드를 사용한 훈련

코드도 상대적으로 편리합니다. MLTextClassifier의 예는 다음과 같습니다. 데이터 형식이 다른 것을 제외하고 다른 유형의 사용은 기본적으로 동일합니다. 로지스틱 회귀 코드 예제는 참고 기사 [5]를 참조하세요. 데이터 준비는 다르지만 사용법은 기본적으로 동일합니다.

이 모델 훈련의 목적은 문장을 분석하고 이 문장의 태도가 긍정적인지 부정적인지 판단하는 것입니다.

첫 번째 단계 는 데이터를 준비하는 것입니다. 데이터 파일의 형식은 csv입니다. 데이터는 두 개의 열로 나누어져 있는데, class는 레이블 열이고 text는 특성 열입니다. 레이블 열과 특성 열의 이름은 다음과 같습니다. 필요에 따라 정의되며 순서는 임의적일 수 있습니다.
여기에 이미지 설명을 삽입하세요.
두 번째 단계 는 모델을 훈련하고 평가하는 것입니다. 모델 훈련이 완료된 후에는 모델의 정확성을 평가해야 합니다. 따라서 훈련 데이터를 두 부분으로 나누어 한 부분은 훈련에 사용하고 작은 부분은 평가 및 검증에 사용할 수 있으며, 이 예에서는 훈련 데이터와 검증 데이터의 비율이 9:1이므로 유연하게 적용할 수 있습니다. 데이터 양에 따라 조정됩니다.
그 중metrics.classificationError는 검증 세트 데이터의 오류율을 나타내며, 오류율이 상대적으로 높을 경우 데이터 세트를 조정하거나 알고리즘을 업데이트할 수 있습니다.

현재 학습 API가 업데이트되었습니다. 다음 예제에서는 macOS 13.0 및 iOS 16.0에서 더 이상 사용되지 않는 MLDataTable 데이터 형식을 사용합니다. 특정 인터페이스는 장치의 시스템 버전에 따라 선택할 수 있습니다. MLTextClassifier의 새로운 버전입니다. DataSource는 교차 검증을 위해 여러 그룹에 무작위로 여러 레이블을 할당하여 과적합, 과소적합 및 기타 문제를 줄일 수도 있습니다.

guard let url = mlFileURL,
      let allData = try? MLDataTable(contentsOf: url) else {
    
    
    return
}

let data: TrainingData = allData.randomSplit(by: 0.9)
guard let classfier = try? MLTextClassifier(trainingData: data.trainingData, textColumn: "text", labelColumn: "class", parameters: MLTextClassifier.ModelParameters()) else {
    
    
    return
}
let metrics = classfier.evaluation(on: data.testData, textColumn: "text", labelColumn: "class")
print("classificationError: \(String(describing: metrics.classificationError))")

세 번째 단계 , 모델이 사용하기 쉬운 경우 저장할 수 있습니다.

// 保存模型
func saveModel(toFile: String) {
    
    
    try? classfier?.write(toFile: toFile)
}

네 번째 단계 는 모델을 사용하여 데이터를 예측하는 것입니다.

함수를 호출하는 것만큼 간단합니다. 텍스트를 입력하고 예측 결과를 확인하면 됩니다.

func prediction(_ text: String) {
    
    

    guard let ret = try? classfier?.prediction(from: text) else {
    
    
        print("prediction error")
        return
    }
    print("prediction result: \(String(describing: ret))")
}

6. 참고문헌:

  1. WWDC 2018: Create ML에 대한 첫 번째 살펴보기
  2. CreateML: Swift로 기계 학습 모험을 시작하세요
  3. MLDataTable: iOS 개발자를 위한 Panda
  4. iOS에서의 CreateML 사용 및 해당 애플리케이션 소개
  5. CreateML을 사용하여 Core ML 영화 추천기 SwiftUI 앱 구축

추천

출처blog.csdn.net/ID314846818/article/details/130935312