Core ML (Core Machine Learning) là bộ thư viện được Apple thêm vào trong iOS 11, đã có khá nhiều bài viết về cách dùng nó cho lập trình viên iOS rồi. Tuy nhiên, theo mình thấy thì các bài viết chỉ hướng dẫn cách dùng model đã có sẵn, mà trong thực tế thì nhiều lúc chúng ta phải tự tạo ra model để dùng chứ tuỳ bài toán chúng ta gặp phải. Do đó, tôi viết bài này để hướng dẫn các bạn cách tạo ra một model để sử dụng Core ML như thế nào cũng như các vấn đề gặp phải trong lúc thực hiện. Nào, bắt đầu thôi.
Dữ liệu để tạo ra model, các bạn có thể tải tại đây:
https://drive.google.com/file/d/0BycvTb1uT3G0M0F5czA4YkVCcnc/view?usp=sharing

I. Bài toán:
Bộ dữ liệu này tôi tìm được khi lang thang trên mạng, trong bộ dữ liệu này có các cột UserID, Gender, Age, EstimatedSalary, Purchased. Từ bộ dữ liệu này tôi đặt ra bài toán là từ Độ Tuổi (Age) và Lương Dự Kiến (EstimatedSalary) thì có quyết định trả (Purchased) hay không?
Ok, vậy là có bài toán, qua bước tiếp theo thôi.

II. Tạo model để training:
Trước khi bắt đầu tôi xin nói qua một chút về các bước để thực hiện dự đoán từ một bộ dữ liệu có sẵn:
– Đầu tiên là chúng ta phải có dữ liệu dùng để huấn luyện, có thể là dữ liệu thô (chưa qua xử lý) hoặc dữ liệu đã qua xử lý.
– Tiếp theo, dựa vào bài toán của chúng ta để từ bộ dữ liệu huấn luyện thực hiện công việc trích xuất các thuộc tính (features extraction), ở bộ dữ liệu dùng ở bài viết này thì thuộc tính cần dùng là độ tuổi và lương dự kiến, do đó ta coi nó là bộ dữ liệu đã được trích xuất thuộc tính. Để hiểu thêm thì các bạn nên tìm đọc các tài liệu về Machine Learning (Máy học), ở đây tôi chỉ nói sơ mà thôi.
– Sau khi có bộ dữ liệu đã trích xuất thuộc tính rồi thì chúng ta thực hiện huấn luyện (training) để tạo ra một mô hình (model) dự đoán. Đây là bước mà tôi sẽ nói ở trong bài viết này.
– Cuối cùng là dùng model đã training để dự đoán kết quả.
Như vậy là sơ qua các bước ta cần phải làm, giờ thì bắt đầu!!!

1. Những thứ cần chuẩn bị:
a. Cài đặt python:
Python hiện nay là ngôn ngữ mạnh mẽ và được hỗ trợ cho Machine Learning nhiều nhất và do đó Apple cũng dùng python.
Trước hết các bạn cài python lên máy (nếu máy chưa có), để kiểm tra thử máy bạn đã cài python chưa thì các bạn mở terminal lên và gõ:
python --version

Lưu ý, nếu máy bạn đang cài python version 3.0 trở lên thì phải cài thêm python version 2.7 vào, lý do vì sao tôi sẽ nói ở phần sau.

b. Cài coremltools:
Để chuyển sử dụng một model tạo ra bằng python thì cần một tool để chuyển đổi, Apple cung cấp tool đó có tên là coremltools.
Yêu cầu để cài đặt coremltools là phải chạy trên python 2.7, do đó tôi nói các bạn cài là có lý do, vì không để ý điểm này nên khi cài đặt tôi đã gặp khó khăn vì máy tôi đang chạy python 3.6, phải google mới cài được.
Để cài đặt coremltools, với máy chỉ có python 2.7 thì các bạn chỉ cần gõ:
pip install coremltools

Còn nếu máy bạn mặc định là python 3.0 trở lên và mới cài python 2.7 vào sau thì gõ:
sudo pip2 install coremltools

Chi tiết hướng dẫn các bạn tham khảo link sau: https://apple.github.io/coremltools/

c. Cài đặt các gói hỗ trợ khác:
Dựa vào yêu cầu thuật toán nào của model, ta cần cài các gói hỗ trợ tương ứng, chi tiết các bạn xem ở link tham khảo của coremltools ở trên.
Trong khuôn khổ bài này, chúng ta cần cài các gói sau: sklearn, numpy, pandas
Chi tiết cách cài đặt các bạn tham khảo google.
Lưu ý là cài đặt ở python 2.7 nhé.

2. Tạo model bằng python:
Ở đây tôi dùng thuật toán Linear SVM để làm ví dụ, tôi tạo một file python có tên là svm.py với nội dung như sau:

import numpy as np
import pandas as pd
import pickle

Sau đó, chúng ta cần đọc dữ liệu từ file dữ liệu đã có bằng các thêm nội dung sau vào file svm.py

# Import dữ liệu
dataset = pd.read_csv('Social_Network_Ads.csv');
# Đọc dữ liệu cột Age, EstimatedSalary
X = dataset.iloc[:, [2,3]].values
# Đọc dữ liệu cột Purchased
y = dataset.iloc[:, 4].values

Vì giá trị của cột Age và cột EstimatedSalary có khoảng cách rất lớn nên ta cần chuẩn hoá nó về một vùng giá trị để tránh sai lêch kết quả dự đoán. Lý do vì sao các bạn đọc thêm về Machine Learning. Thêm nội dung sau vào file svm.py

# Feature Scaling
from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
X = sc.fit_transform(X)

Tạo model và lưu nó lại

from sklearn import svm
clf = svm.SVC(kernel='linear', C = 1.0)
clf.fit(X,y)

# save the model to disk
from sklearn.externals import joblib
filename = 'Social_Network_Ads_model.sav'
pickle.dump(clf, open(filename, 'wb'))

Bây giờ các bạn mở terminal lên và tìm đến file svm.py đã tạo và gõ:
python svm.py

Đối với các bạn đã cài python 3 trước python 2.7 thì gõ:
python2.7 svm.py

3. Tạo model cho Core ML:
Bây giờ các bạn tạo một file python khác có tên là extract_model.py với nội dung sau:
import coremltools
from sklearn.externals import joblib
# Load model đã tạo bằng python
classifier = joblib.load('Social_Network_Ads_model.sav')

# Convert model tạo bằng python sang model cho Core ML
coremlModel = coremltools.converters.sklearn.convert(classifier, [“Age”,”EstimatedSalary”],”Purchased”)

# Lưu model đã convert
coremlModel.save(‘SocialNetworkAds.mlmodel’)

Bây giờ các bạn mở terminal lên và tìm đến file svm.py đã tạo và gõ:
python extract_model.py

III. Sử dụng model đã tạo:
Bây giờ chúng ta sử dụng thử model đã tạo được ở các bước trên. Tôi tạo một project có tên là DemoAI với giao diện như sau:

Kéo thả file SocialNetworkAds.mlmodel đã tạo ở trên vào project, click chọn file này ta sẽ thấy nội dung như sau:

Ở phần Model Class nếu không xuất hiện dòng (Swift generated source) thì check vào Target Membership

Xcode tự tạo ra một Object trùng tên với tên file model ta đã import vào project.
Mở file ViewController.swift thêm nội dung như sau:

Chạy chương trình và xem kết quả. Chúc các bạn thành công.

Leave a Reply

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

You may use these HTML tags and attributes:

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>