sklearn
bộ ướ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 một bộ ước tính. Một số ước lượng thực hiện __getstate__
phương pháp bản thân, nhưng những người khác, giống như GMM
chỉ cần sử dụng base implementation mà chỉ đơn giản giúp tiết kiệm các đối tượng từ điển bên trong:
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 khuyến khích để lưu mô hình của bạn để đĩ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 để có thể đào tạo lại mô hình trong tương lai hoặc gặp hậu quả nghiêm trọng (chẳng hạn như bị khóa vào phiên bản cũ của sklearn).
Từ documentation:
Để 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-học, metadata bổ sung nên được lưu dọc theo ngâm mô hình:
Dữ liệu huấn luyện, ví dụ một tham chiếu đến một bản chụp bất biến
Mã nguồn python sử dụng để tạo ra các mô hình
Các phiên bản của scikit-học và phụ thuộc của nó
Các kiểm chứng chéo điểm số thu được trên dữ liệu huấn luyện
Điều này đặc biệt đúng đối với các bộ ước lượng Ensemble dựa trên mô-đun tree.pyx
được viết bằng Cython (chẳng hạn như IsolationForest
), vì nó tạo ra sự ghép nối với người thực hiện tation, 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 không tương thích ngược trong quá khứ.
Nếu mô hình của bạn trở nên rất lớn và tải trở thành mối phiền toái, bạn cũng có thể sử dụng hiệu quả hơn joblib
. Từ các tài liệu:
Trong trường hợp cụ thể của scikit, nó có thể là thú vị hơn để sử dụng thay thế joblib của pickle
(joblib.dump
& joblib.load
), đó là hiệu quả hơn trên các đối tượng mang mảng NumPy lớn trong nội bộ như thường là trường hợp cho các trình ước tính tìm hiểu được trang bị scikit, nhưng chỉ có thể dưa vào đĩa chứ không phải một chuỗi:
Hoạt động như một sự quyến rũ! Tôi đã cố gắng để sử dụng np.savez và tải nó trở lại tất cả cùng và điều đó không bao giờ giúp đỡ. Cảm ơn rất nhiều. – Kartos