Section 7/201 menit
7. Create ML: Training Model Tanpa Python
7. Create ML: Training Model Tanpa Python
Create ML memungkinkan training model ML langsung di macOS dengan Swift — tanpa setup Python environment. Cocok untuk custom classifier sederhana.
Image Classifier dengan Create ML
swift
// Create ML: training image classifier (jalankan di macOS playground atau script)
import CreateML
import Foundation
func trainImageClassifier() async throws {
// Dataset structure:
// TrainingData/
// cat/
// image1.jpg, image2.jpg, ...
// dog/
// image1.jpg, image2.jpg, ...
let trainingDataURL = URL(fileURLWithPath: "/path/to/TrainingData")
let validationDataURL = URL(fileURLWithPath: "/path/to/ValidationData")
// Konfigurasi training
var parameters = MLImageClassifier.ModelParameters()
parameters.maxIterations = 25
parameters.validationData = .dataSource(.labeledDirectories(at: validationDataURL))
parameters.augmentationOptions = [.flip, .blur, .exposure, .noise] // Data augmentation
// Mulai training (bisa memakan beberapa menit)
let classifier = try await MLImageClassifier(
trainingData: .labeledDirectories(at: trainingDataURL),
parameters: parameters
)
// Evaluasi
let trainingMetrics = classifier.trainingMetrics
let validationMetrics = classifier.validationMetrics
print("Training accuracy: \(1 - trainingMetrics.classificationError)")
print("Validation accuracy: \(1 - (validationMetrics?.classificationError ?? 1))")
// Simpan sebagai .mlpackage
let modelURL = URL(fileURLWithPath: "/path/to/output/AnimalClassifier.mlpackage")
let metadata = MLModelMetadata(
author: "MyApp",
shortDescription: "Klasifikasi anjing dan kucing",
license: "MIT",
version: "1.0"
)
try classifier.write(to: modelURL, metadata: metadata)
print("Model saved to: \(modelURL.path)")
}
Text Classifier dengan Create ML
swift
// Create ML: training text classifier untuk kategori konten
import CreateML
import Foundation
func trainTextClassifier() async throws {
// Dataset: CSV dengan kolom "text" dan "label"
// text,label
// "Produk ini sangat bagus!",positive
// "Kualitas buruk, tidak sesuai deskripsi",negative
let trainingCSV = URL(fileURLWithPath: "/path/to/reviews_train.csv")
let trainingData = try MLDataTable(contentsOf: trainingCSV)
var parameters = MLTextClassifier.ModelParameters()
parameters.algorithm = .maxEnt(revision: 1) // atau .transferLearning untuk akurasi lebih tinggi
parameters.language = .indonesian
let classifier = try await MLTextClassifier(
trainingData: trainingData,
textColumn: "text",
labelColumn: "label",
parameters: parameters
)
print("Training accuracy: \(1 - classifier.trainingMetrics.classificationError)")
let modelURL = URL(fileURLWithPath: "/path/to/output/SentimentClassifier.mlpackage")
try classifier.write(to: modelURL, metadata: MLModelMetadata(
author: "MyApp",
shortDescription: "Analisis sentimen ulasan produk"
))
}
Tabular Classifier / Regressor
swift
// Create ML: training model untuk data tabular (prediksi numerik atau kategori)
import CreateML
import Foundation
func trainHousePriceRegressor() async throws {
// CSV: size_m2, bedrooms, bathrooms, location, price
let dataURL = URL(fileURLWithPath: "/path/to/house_prices.csv")
let allData = try MLDataTable(contentsOf: dataURL)
// Split 80/20
let (trainingData, testData) = allData.randomSplit(by: 0.8, seed: 42)
var parameters = MLBoostedTreeRegressor.ModelParameters()
parameters.maximumDepth = 6
parameters.maximumIterations = 100
parameters.earlyStoppingRounds = 5
let regressor = try await MLBoostedTreeRegressor(
trainingData: trainingData,
targetColumn: "price",
parameters: parameters
)
// Evaluasi di test set
let evaluationMetrics = regressor.evaluation(on: testData)
print("RMSE: \(evaluationMetrics.rootMeanSquaredError)")
print("Max Error: \(evaluationMetrics.maximumError)")
let modelURL = URL(fileURLWithPath: "/path/to/output/HousePricePredictor.mlpackage")
try regressor.write(to: modelURL)
}