Khóa học
Hãy xét tình huống sau:
Bạn đã xây dựng một mô hình machine learning cực kỳ hay có thể dự đoán một giao dịch cụ thể có gian lận hay không. Giờ đây, một người bạn của bạn đang phát triển ứng dụng Android cho các hoạt động ngân hàng tổng quát và muốn tích hợp mô hình machine learning của bạn vào ứng dụng vì mục tiêu tuyệt vời đó.
Nhưng bạn của bạn phát hiện ra rằng bạn đã viết mã mô hình bằng Python trong khi anh ấy đang xây dựng ứng dụng bằng Java. Vậy thì sao? Liệu có thể tích hợp mô hình machine learning của bạn vào ứng dụng của bạn anh ấy không?
May mắn thay, bạn có sức mạnh của API. Và tình huống trên chỉ là một trong nhiều trường hợp mà nhu cầu biến mô hình machine learning thành API là cực kỳ quan trọng. Nhiều ngành hiện đang tìm kiếm các Data Scientist có thể làm điều này. Thực ra, đóng gói một mô hình machine learning thành một API không quá khó, và chính xác đó là điều bạn sẽ làm trong hướng dẫn này - Biến mô hình machine learning của bạn thành một API.
Các lựa chọn triển khai mô hình Machine Learning
Phần lớn thời gian, giá trị thực sự của mô hình machine learning nằm trong trái tim của một sản phẩm thông minh – có thể là một thành phần nhỏ của hệ thống gợi ý hoặc một chatbot thông minh. Đó là những lúc rào cản có vẻ rất khó vượt qua.
Ví dụ, đa số người làm ML sử dụng R/Python cho thử nghiệm của họ. Nhưng những người dùng các mô hình ML đó sẽ là các kỹ sư phần mềm dùng một ngăn xếp công nghệ hoàn toàn khác. Có hai cách để giải quyết vấn đề này:
- Viết lại toàn bộ mã bằng ngôn ngữ mà đội kỹ sư phần mềm sử dụng. Nghe có vẻ hay, nhưng thời gian & công sức để sao chép những mô hình phức tạp đó sẽ là lãng phí. Phần lớn ngôn ngữ như JavaScript không có thư viện mạnh cho ML. Khôn ngoan nhất là nên tránh cách này.
- Tiếp cận theo hướng API-first – Web API giúp các ứng dụng đa ngôn ngữ hoạt động tốt với nhau. Nếu một lập trình viên frontend cần dùng mô hình ML của bạn để tạo ứng dụng web dùng ML, họ chỉ cần lấy URL Endpoint nơi API được phục vụ.
Giờ, trước khi đi xa hơn, hãy tìm hiểu API thực sự là gì.
API là gì?
"Nói đơn giản, một API là một hợp đồng (giả định) giữa 2 phần mềm, nói rằng nếu phần mềm người dùng cung cấp đầu vào theo một định dạng được định nghĩa trước, thì phần mềm còn lại sẽ mở rộng chức năng và trả về kết quả cho phần mềm người dùng." - Analytics Vidhya
Bạn có thể đọc các bài viết sau để hiểu vì sao API là lựa chọn phổ biến trong giới lập trình viên:
Về bản chất, API khá giống ứng dụng web, nhưng thay vì cung cấp cho bạn một trang HTML được tạo kiểu đẹp mắt, API thường trả về dữ liệu theo một định dạng trao đổi chuẩn như JSON, XML, v.v. Khi lập trình viên có được đầu ra mong muốn, họ có thể tự do trình bày theo bất kỳ cách nào. Cũng có nhiều API ML phổ biến, ví dụ - API ML của IBM Watson có thể thực hiện những việc sau:
- Machine Translation - Hỗ trợ dịch văn bản giữa các cặp ngôn ngữ khác nhau.
- Message Resonance – Tìm độ phổ biến của một cụm từ hoặc từ đối với một nhóm khán giả xác định trước.
- Question and Answers - Dịch vụ này cung cấp câu trả lời trực tiếp cho các truy vấn được kích hoạt bởi các nguồn tài liệu chính.
- User Modelling – Dự đoán các đặc điểm xã hội của một người từ một văn bản cho trước.
Google Vision API cũng là một ví dụ tuyệt vời, cung cấp các dịch vụ dành riêng cho các tác vụ Thị giác máy tính. Bấm vào đây để hình dung những gì có thể làm với Google Vision API.
Về cơ bản, phần lớn nhà cung cấp đám mây và các công ty tập trung vào machine learning quy mô nhỏ cung cấp các API sẵn dùng. Họ phục vụ nhu cầu của các nhà phát triển/doanh nghiệp không có chuyên môn về ML nhưng muốn áp dụng ML vào quy trình hoặc bộ sản phẩm.
Các ví dụ phổ biến về API machine learning phù hợp rõ ràng cho phát triển web gồm DialogFlow, Microsoft's Cognitive Toolkit, TensorFlow.js, v.v.
Giờ khi bạn đã hiểu tương đối về API, hãy xem cách bạn có thể đóng gói một mô hình machine learning (phát triển bằng Python) thành một API trong Python.
Flask – Một framework Web Services trong Python:
Giờ bạn có thể thắc mắc web service là gì? Web service thực chất cũng là một dạng API, giả định rằng API được lưu trữ trên máy chủ và có thể được tiêu thụ. Web API, Web Service - các thuật ngữ này thường được dùng thay thế cho nhau.
Nói đến Flask, đây là một framework phát triển web service trong Python. Nó không phải là duy nhất trong Python, còn có Django, Falcon, Hug, v.v. Nhưng bạn sẽ dùng Flask cho hướng dẫn này. Để học về Flask, bạn có thể tham khảo các bài hướng dẫn này.
Nếu bạn đã tải bộ phân phối Anaconda, bạn đã có sẵn Flask. Nếu không, bạn sẽ cần tự cài đặt bằng:
pip install flask
Flask rất tối giản. Flask được các lập trình viên Python ưa chuộng vì nhiều lý do. Framework Flask đi kèm một máy chủ web nhẹ tích hợp sẵn, cần rất ít cấu hình và có thể điều khiển từ mã Python của bạn. Đây là một trong những lý do khiến nó phổ biến.
Đoạn mã sau minh họa sự tối giản của Flask một cách đẹp mắt. Mã này dùng để tạo một Web-API đơn giản mà khi nhận một URL cụ thể sẽ tạo ra đầu ra tương ứng.
from flask import Flask
app = Flask(__name__)
@app.route("")
def hello():
return "Welcome to machine learning model APIs!"
if __name__ == '__main__':
app.run(debug=True)
Sau khi chạy, bạn có thể điều hướng đến địa chỉ web (nhập địa chỉ trên trình duyệt), địa chỉ này hiển thị trên terminal, và quan sát kết quả.

Một vài điểm lưu ý:
-
Jupyter Notebooks rất tuyệt cho markdown, R và Python. Nhưng khi xây dựng web server, nó có thể hoạt động không nhất quán. Vì vậy, nên viết mã Flask trong một trình soạn thảo văn bản như Sublime và chạy mã từ terminal/command prompt.
-
Đảm bảo bạn không đặt tên tệp là flask.py.
-
Flask mặc định chạy trên cổng 5000. Đôi khi máy chủ Flask khởi động thành công trên cổng này, nhưng khi bạn truy cập URL (mà máy chủ in ra trên terminal) trong trình duyệt hoặc công cụ API như Postman, bạn có thể không nhận được đầu ra. Xem tình huống sau:

-
Theo Flask, máy chủ đã khởi động thành công trên cổng 5000, nhưng khi truy cập URL trong trình duyệt, nó không trả về gì. Đây có thể là trường hợp xung đột cổng. Khi đó, đổi cổng mặc định 5000 sang số cổng bạn muốn sẽ là lựa chọn tốt. Bạn có thể làm như sau:
app.run(debug=True,port=12345) -
Khi đó, máy chủ Flask sẽ trông như sau:

Giờ, hãy đi qua từng bước mã mà bạn đã viết:
-
Bạn tạo một thể hiện của lớp
Flaskvà truyền vào biến "name" (được Python tự điền). Biến này sẽ là "main" nếu tệp này được chạy trực tiếp bằng Python như một script. Nếu bạn import tệp thay vì chạy trực tiếp, giá trị của "name" sẽ là tên tệp được import. Ví dụ, nếu bạn cótest.pyvàrun.py, và bạn import test.py vào run.py thì giá trị "name" của test.py sẽ là test (app = Flask(test)). -
Phía trên định nghĩa phương thức
hello()có @app.route("").route()là một decorator báo cho Flask biết URL nào sẽ kích hoạt hàm được định nghĩa làhello(). -
Phương thức
hello()chịu trách nhiệm tạo đầu ra (Welcome to machine learning model APIs!) mỗi khi API của bạn được gọi đúng cách (hoặc được tiêu thụ). Trong trường hợp này, truy cập trình duyệt vớilocalhost:5000/sẽ tạo ra đầu ra như dự định (nếu máy chủ flask đang chạy trên cổng 5000).
Bây giờ bạn sẽ tìm hiểu một số yếu tố cần lưu ý nếu bạn biến các mô hình machine learning (xây bằng scikit-learn) thành một API Flask.
Mô hình Scikit-learn với Flask
Tạo ra các mô hình machine learning từ rất đơn giản đến rất phức tạp chưa bao giờ dễ dàng đến thế trong Python với scikit-learn. Nhưng có vài điểm bạn cần nhớ về scikit-learn:
- Scikit-learn là thư viện Python cung cấp các công cụ đơn giản và hiệu quả cho khai phá dữ liệu và phân tích dữ liệu. Scikit-learn có các mô-đun chính sau:
- Clustering
- Regression
- Classification
- Dimensionality Reduction
- Model selection
- Preprocessing
(Nhớ xem khóa học Supervised Learning with scikit-learn của DataCamp do lập trình viên cốt lõi của scikit-learn - Andreas Müller giảng dạy)
- Scikit-learn hỗ trợ tuần tự hóa (serialization) và giải tuần tự (de-serialization) các mô hình bạn huấn luyện bằng scikit-learn. Điều này giúp bạn không phải huấn luyện lại mô hình. Với một bản sao đã tuần tự hóa của mô hình làm bằng scikit-learn, bạn có thể viết một API Flask.
- Các mô hình scikit-learn yêu cầu dữ liệu ở dạng số. Vì vậy, nếu tập dữ liệu có các đặc trưng phân loại không phải số, cần chuyển chúng thành số. Cho việc chuyển đổi này, scikit-learn cung cấp các tiện ích như
LabelEncoder,OneHotEncoder, v.v. Có thể tìm thấy trong mô-đunsklearn.preprocessing. - Các mô hình scikit-learn không thể xử lý giá trị thiếu một cách ngầm định. Bạn cần tự xử lý giá trị thiếu trong dữ liệu, sau đó mới đưa vào mô hình. Để xử lý giá trị thiếu, scikit-learn cung cấp một loạt tiện ích trong mô-đun
sklearn.preprocessing.
Mã hóa nhãn và giá trị thiếu là các bước tiền xử lý dữ liệu quan trọng, rất cần thiết để xây dựng mô hình machine learning tốt. Nếu muốn học thêm, hãy xem khóa học sau của DataCamp:
Trong hướng dẫn này, bạn sẽ dùng bộ dữ liệu Titanic, một trong những bộ dữ liệu phổ biến vì nhiều lý do – bộ dữ liệu có nhiều loại biến khác nhau, có giá trị thiếu, v.v. Hướng dẫn của DataCamp này bao quát một phân tích tuyệt vời về bộ dữ liệu, và bạn có thể tải bộ dữ liệu từ đây.
Bộ dữ liệu này xử lý bài toán phân loại nhằm dự đoán một hành khách có sống sót hay không dựa trên một số thông tin về họ.
Lưu ý: Biến (Variables) và Đặc trưng (Features) được dùng thay thế cho nhau nhiều lần trong hướng dẫn này.
Để đơn giản hơn nữa, bạn sẽ chỉ dùng bốn biến: age, sex, embarked và survived trong đó survived là nhãn lớp.
# Import dependencies
import pandas as pd
import numpy as np
# Load the dataset in a dataframe object and include only four features as mentioned
url = "http://s3.amazonaws.com/assets.datacamp.com/course/Kaggle/train.csv"
df = pd.read_csv(url)
include = ['Age', 'Sex', 'Embarked', 'Survived'] # Only four features
df_ = df[include]
"Sex" và "Embarked" là các đặc trưng phân loại với giá trị không phải số nên cần chuyển đổi số. Đặc trưng “Age” có giá trị thiếu. Những giá trị này có thể được điền bằng một thống kê tóm tắt như trung vị hoặc trung bình. Giá trị thiếu có thể rất có ý nghĩa, và đáng để điều tra chúng đại diện cho điều gì trong ứng dụng thực tế.
Scikit-learn coi các ô không chứa gì là NaN. Ở đây, bạn sẽ chỉ thay NaN bằng 0 và viết một hàm trợ giúp cho việc đó.
categoricals = []
for col, col_type in df_.dtypes.iteritems():
if col_type == 'O':
categoricals.append(col)
else:
df_[col].fillna(0, inplace=True)
Các dòng mã trên thực hiện:
- Lặp qua tất cả cột trong dataframe
dfvà thêm các cột (có giá trị không phải số) vào danh sáchcategorical. -
Nếu cột không có giá trị không phải số (chỉ
Agetrong trường hợp này), thì kiểm tra có giá trị thiếu hay không và điền chúng bằng 0.Điền NaN bằng một giá trị duy nhất có thể gây hệ quả ngoài ý muốn, đặc biệt nếu giá trị bạn dùng để thay nằm trong khoảng quan sát được của biến số đó. Vì 0 không phải là giá trị tuổi hợp lệ được quan sát, bạn không đưa vào thiên lệch như khi dùng, ví dụ, 36! - Nguồn
Giờ bạn đã xử lý giá trị thiếu và tách các cột không phải số, sẵn sàng chuyển chúng thành số. Bạn sẽ dùng One Hot Encoding. Pandas cung cấp phương thức đơn giản get_dummies() để tạo biến OHE cho một dataframe.
df_ohe = pd.get_dummies(df_, columns=categoricals, dummy_na=True)
Khi dùng OHE, một cột mới được tạo cho mỗi tổ hợp cột/giá trị, theo định dạng column_value. Ví dụ - với biến “Embarked”, OHE sẽ tạo “Embarked_C”, “Embarked_Q”, “Embarked_S”, và “Embarked_nan”.
Giờ khi đã tiền xử lý xong dữ liệu, bạn sẵn sàng huấn luyện mô hình machine learning. Bạn sẽ dùng classifier Logistic Regression.
from sklearn.linear_model import LogisticRegression
dependent_variable = 'Survived'
x = df_ohe[df_ohe.columns.difference([dependent_variable])]
y = df_ohe[dependent_variable]
lr = LogisticRegression()
lr.fit(x, y)
LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
verbose=0, warm_start=False)
Bạn đã xây dựng mô hình machine learning. Giờ bạn sẽ lưu mô hình này. Về mặt kỹ thuật, bạn sẽ tuần tự hóa mô hình. Trong Python, điều này gọi là Pickling.
Lưu mô hình: Tuần tự hóa và Giải tuần tự
Bạn sẽ dùng joblib của sklearn cho việc này.
from sklearn.externals import joblib
joblib.dump(lr, 'model.pkl')
['model.pkl']
Mô hình Logistic Regression giờ đã được lưu trữ. Bạn có thể nạp mô hình này vào bộ nhớ chỉ với một dòng mã. Việc nạp lại mô hình vào không gian làm việc được gọi là Giải tuần tự (Deserialization).
lr = joblib.load('model.pkl')
Giờ bạn đã sẵn sàng dùng Flask để phục vụ mô hình đã lưu. Bạn đã thấy Flask tối giản thế nào để bắt đầu.
Tạo API từ mô hình Machine Learning bằng Flask
Để phục vụ mô hình với Flask, bạn sẽ làm hai việc sau:
- Nạp mô hình đã lưu vào bộ nhớ khi ứng dụng khởi động,
- Tạo một endpoint API nhận các biến đầu vào, chuyển chúng về định dạng phù hợp và trả về dự đoán.
Cụ thể hơn, đầu vào mẫu của bạn cho API sẽ như sau:
[
{"Age": 85, "Sex": "male", "Embarked": "S"},
{"Age": 24, "Sex": '"female"', "Embarked": "C"},
{"Age": 3, "Sex": "male", "Embarked": "C"},
{"Age": 21, "Sex": "male", "Embarked": "S"}
]
(đó là một list JSON các đầu vào)
và API của bạn sẽ xuất như sau:
{"prediction": [0, 1, 1, 0]}
Các dự đoán biểu thị trạng thái sống sót, trong đó 0 là Không và 1 là Có.
JSON là viết tắt của JavaScript Object Notation, một trong những định dạng trao đổi dữ liệu được dùng rộng rãi nhất. Nếu bạn cần giới thiệu nhanh, vui lòng theo các hướng dẫn này.
Hãy viết hàm predict() sẽ thực hiện:
- Nạp mô hình đã lưu vào bộ nhớ khi ứng dụng khởi động,
- Tạo endpoint API nhận biến đầu vào, chuyển về định dạng phù hợp và trả về dự đoán.
Bạn đã thấy cách nạp mô hình đã lưu. Giờ, bạn sẽ tập trung vào cách dùng nó để dự đoán trạng thái sống sót khi nhận đầu vào.
from flask import Flask, jsonify
app = Flask(__name__)
@app.route('/predict', methods=['POST'])
def predict():
json_ = request.json
query_df = pd.DataFrame(json_)
query = pd.get_dummies(query_df)
prediction = lr.predict(query)
return jsonify({'prediction': list(prediction)})
Tuyệt vời! Nhưng bạn có một vấn đề nhỏ.
Hàm bạn viết chỉ hoạt động khi yêu cầu đến chứa đầy đủ mọi giá trị có thể của các biến phân loại, điều này có thể không đúng trong thực tế. Nếu yêu cầu đến không bao gồm tất cả giá trị có thể của biến phân loại thì theo định nghĩa hiện tại của predict(), get_dummies() sẽ tạo ra một dataframe có ít cột hơn so với số cột mà bộ phân loại mong đợi, dẫn đến lỗi thời gian chạy.
Để giải quyết, bạn cũng sẽ lưu danh sách các cột trong quá trình huấn luyện mô hình. Bạn có thể tuần tự hóa bất kỳ đối tượng Python nào vào tệp .pkl. Bạn sẽ dùng joblib tương tự như trước.
(Hãy nhớ, như đã đề cập, luôn tốt hơn nếu làm toàn bộ mã phía máy chủ trong trình soạn thảo văn bản và chạy từ terminal)
model_columns = list(x.columns)
joblib.dump(model_columns, 'model_columns.pkl')
['model_columns.pkl']
Vì bạn đã lưu danh sách cột, bạn chỉ cần xử lý giá trị thiếu tại thời điểm dự đoán. Bạn sẽ phải nạp các cột mô hình khi ứng dụng khởi động.
@app.route('/predict', methods=['POST']) # Your API endpoint URL would consist /predict
def predict():
if lr:
try:
json_ = request.json
query = pd.get_dummies(pd.DataFrame(json_))
query = query.reindex(columns=model_columns, fill_value=0)
prediction = list(lr.predict(query))
return jsonify({'prediction': prediction})
except:
return jsonify({'trace': traceback.format_exc()})
else:
print ('Train the model first')
return ('No model here to use')
Bạn đã đưa vào tất cả thành phần cần thiết trong API "/predict", và giờ bạn chỉ cần viết lớp main.
if __name__ == '__main__':
try:
port = int(sys.argv[1]) # This is for a command-line argument
except:
port = 12345 # If you don't provide any port then the port will be set to 12345
lr = joblib.load(model_file_name) # Load "model.pkl"
print ('Model loaded')
model_columns = joblib.load(model_columns_file_name) # Load "model_columns.pkl"
print ('Model columns loaded')
app.run(port=port, debug=True)
API của bạn giờ đã sẵn sàng để được host. Nhưng trước khi đi xa hơn, hãy điểm lại những gì bạn đã làm đến lúc này:
Ghép nối tất cả lại:
- Bạn đã nạp bộ dữ liệu Titanic và chọn bốn đặc trưng.
- Bạn đã thực hiện tiền xử lý dữ liệu cần thiết.
- Bạn đã xây dựng classifier Logistic Regression và tuần tự hóa nó.
- Bạn cũng tuần tự hóa tất cả các cột từ quá trình huấn luyện như một giải pháp cho việc số cột ít hơn mong đợi bằng cách lưu danh sách cột từ huấn luyện.
- Sau đó, bạn viết một API đơn giản bằng Flask để dự đoán một người có sống sót vụ đắm tàu dựa trên tuổi, giới tính và thông tin cảng lên tàu.
Hãy đặt tất cả mã vào một chỗ để bạn không bị bỏ sót. Cũng là một thực hành lập trình tốt nếu bạn tách mã mô hình Logistic Regression và mã API Flask thành các tệp .py riêng.
Vậy model.py của bạn sẽ như sau:
# Import dependencies
import pandas as pd
import numpy as np
# Load the dataset in a dataframe object and include only four features as mentioned
url = "http://s3.amazonaws.com/assets.datacamp.com/course/Kaggle/train.csv"
df = pd.read_csv(url)
include = ['Age', 'Sex', 'Embarked', 'Survived'] # Only four features
df_ = df[include]
# Data Preprocessing
categoricals = []
for col, col_type in df_.dtypes.iteritems():
if col_type == 'O':
categoricals.append(col)
else:
df_[col].fillna(0, inplace=True)
df_ohe = pd.get_dummies(df_, columns=categoricals, dummy_na=True)
# Logistic Regression classifier
from sklearn.linear_model import LogisticRegression
dependent_variable = 'Survived'
x = df_ohe[df_ohe.columns.difference([dependent_variable])]
y = df_ohe[dependent_variable]
lr = LogisticRegression()
lr.fit(x, y)
# Save your model
from sklearn.externals import joblib
joblib.dump(lr, 'model.pkl')
print("Model dumped!")
# Load the model that you just saved
lr = joblib.load('model.pkl')
# Saving the data columns from training
model_columns = list(x.columns)
joblib.dump(model_columns, 'model_columns.pkl')
print("Models columns dumped!")
api.py của bạn sẽ như sau:
# Dependencies
from flask import Flask, request, jsonify
from sklearn.externals import joblib
import traceback
import pandas as pd
import numpy as np
# Your API definition
app = Flask(__name__)
@app.route('/predict', methods=['POST'])
def predict():
if lr:
try:
json_ = request.json
print(json_)
query = pd.get_dummies(pd.DataFrame(json_))
query = query.reindex(columns=model_columns, fill_value=0)
prediction = list(lr.predict(query))
return jsonify({'prediction': str(prediction)})
except:
return jsonify({'trace': traceback.format_exc()})
else:
print ('Train the model first')
return ('No model here to use')
if __name__ == '__main__':
try:
port = int(sys.argv[1]) # This is for a command-line input
except:
port = 12345 # If you don't provide any port the port will be set to 12345
lr = joblib.load("model.pkl") # Load "model.pkl"
print ('Model loaded')
model_columns = joblib.load("model_columns.pkl") # Load "model_columns.pkl"
print ('Model columns loaded')
app.run(port=port, debug=True)
Khá gọn gàng! Giờ bạn sẽ kiểm thử API này bằng một công cụ gọi là Postman. Hãy đảm bảo model.py và api.py ở cùng thư mục và bạn đã biên dịch cả hai trước khi kiểm thử. Tham khảo ảnh chụp màn hình terminal sau, được chụp sau khi cả hai tệp .py đã biên dịch thành công.

Nếu tất cả tệp của bạn biên dịch thành công, cấu trúc thư mục sẽ như sau: 
Lưu ý: Tệp IPYNB là tùy chọn.
Kiểm thử API của bạn trong Postman
Để kiểm thử API, bạn sẽ cần một công cụ client API. Postman chắc chắn là một trong những công cụ tốt nhất. Bạn có thể tải Postman dễ dàng từ liên kết trên.
Giao diện Postman trông như sau nếu bạn tải bản mới nhất: 
Sau khi bạn đã khởi động máy chủ Flask thành công, bạn cần nhập đúng URL với số cổng chính xác trong Postman. Nó sẽ trông tương tự như sau:

Chúc mừng! Bạn vừa xây dựng API machine learning đầu tiên của mình.
API của bạn có thể dự đoán liệu một hành khách có sống sót vụ đắm tàu Titanic dựa trên thông tin age, sex và embarked. Giờ, bạn của bạn có thể gọi nó từ mã front-end và xử lý đầu ra của API thành điều gì đó hấp dẫn.
Mở rộng thêm:
Trong hướng dẫn này, bạn đã bao quát một trong những kỹ năng được ngành công nghiệp yêu cầu nhiều nhất của một Data Scientist full-stack, tức là xây dựng API từ mô hình machine learning. Mặc dù API rất đơn giản, nhưng luôn tốt hơn khi bắt đầu từ những thứ đơn giản nhất để bạn nắm chắc cách làm chi tiết.
Bạn có thể làm nhiều hơn để cải thiện. Một số lựa chọn có thể cân nhắc:
- Viết API "/train" để huấn luyện classifier Logistic Regression với dữ liệu.
- Viết một mô hình Mạng nơ-ron bằng
kerasvà xây dựng API từ đó. - Host API của bạn lên Cloud để có thể tiêu thụ.
- Để tiến xa hơn, bạn có thể tham khảo blog Machine Learning Mastery này bàn về nhiều cách tiếp cận đạt chuẩn công nghiệp.
Khả năng và cơ hội ở đây là vô cùng lớn. Bạn chỉ cần chọn cẩn thận những gì phù hợp nhất với mình.
Nếu bạn muốn học thêm về Machine Learning trong Python, hãy tham gia khóa Preprocessing for Machine Learning in Python của DataCamp và xem hướng dẫn Machine Learning Basics - The Norms của chúng tôi.
Tài liệu tham khảo:
Sau đây là một số tài liệu tham khảo đã được sử dụng khi viết blog này: