sklearn
công cụ ước tính thực hiện các phương pháp để giúp bạn dễ dàng lưu các thuộc tính được đào tạo có liên quan của công cụ ước tính. Một số công cụ ước tính tự thực hiện __getstate__
các phương thức, nhưng một số khác, như GMM
chỉ sử dụng triển khai cơ sở chỉ đơn giản là lưu các từ điển bên trong các đối tượng:
def __getstate__(self):
try:
state = super(BaseEstimator, self).__getstate__()
except AttributeError:
state = self.__dict__.copy()
if type(self).__module__.startswith('sklearn.'):
return dict(state.items(), _sklearn_version=__version__)
else:
return state
Phương pháp được đề xuất để lưu mô hình của bạn vào đĩa là sử dụng pickle
mô-đun:
from sklearn import datasets
from sklearn.svm import SVC
iris = datasets.load_iris()
X = iris.data[:100, :2]
y = iris.target[:100]
model = SVC()
model.fit(X,y)
import pickle
with open('mymodel','wb') as f:
pickle.dump(model,f)
Tuy nhiên, bạn nên lưu dữ liệu bổ sung để bạn có thể đào tạo lại mô hình của mình trong tương lai hoặc chịu hậu quả nghiêm trọng (chẳng hạn như bị khóa trong phiên bản cũ của sklearn) .
Từ tài liệu :
Để xây dựng lại một mô hình tương tự với các phiên bản tương lai của scikit-learn, siêu dữ liệu bổ sung phải được lưu cùng với mô hình ngâm:
Dữ liệu đào tạo, ví dụ như tham chiếu đến ảnh chụp nhanh bất biến
Mã nguồn python được sử dụng để tạo mô hình
Các phiên bản của scikit-learn và các phụ thuộc của nó
Điểm xác nhận chéo thu được trên dữ liệu đào tạo
Điều này đặc biệt đúng đối với các công cụ ước tính của Bộ đồng phục dựa trên tree.pyx
mô-đun được viết bằng Cython (chẳng hạn như IsolationForest
), vì nó tạo ra một khớp nối với việc triển khai, không được đảm bảo ổn định giữa các phiên bản của sklearn. Nó đã thấy những thay đổi ngược không tương thích trong quá khứ.
Nếu mô hình của bạn trở nên rất lớn và tải trở nên phiền toái, bạn cũng có thể sử dụng hiệu quả hơn joblib
. Từ tài liệu:
Trong trường hợp cụ thể của scikit, có thể thú vị hơn khi sử dụng thay thế pickle
( joblib.dump
& joblib.load
) của joblib , hiệu quả hơn đối với các đối tượng mang các mảng numpy lớn trong nội bộ như thường được sử dụng cho các công cụ ước tính tìm hiểu scikit, nhưng chỉ có thể chọn vào đĩa và không vào chuỗi: