sklearn
ตัวประมาณค่าใช้วิธีการต่างๆเพื่อให้คุณสามารถบันทึกคุณสมบัติที่ผ่านการฝึกอบรมที่เกี่ยวข้องของตัวประมาณค่าได้ง่าย ตัวประมาณบางตัวใช้__getstate__
วิธีการด้วยตัวเอง แต่ตัวอื่น ๆ เช่นGMM
เพียงแค่ใช้การติดตั้งพื้นฐานซึ่งจะบันทึกพจนานุกรมภายในวัตถุ:
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
วิธีที่แนะนำในการบันทึกรุ่นของคุณลงในแผ่นดิสก์คือการใช้pickle
โมดูล:
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)
อย่างไรก็ตามคุณควรบันทึกข้อมูลเพิ่มเติมเพื่อให้คุณสามารถฝึกให้โมเดลของคุณในอนาคตหรือได้รับผลกระทบที่เลวร้าย(เช่นถูกขังเป็นรุ่นเก่า sklearn)
จากเอกสาร :
เพื่อสร้างโมเดลที่คล้ายกันกับ scikit-Learn รุ่นในอนาคตข้อมูลเมตาเพิ่มเติมควรได้รับการบันทึกไว้ในโมเดลดอง:
ข้อมูลการฝึกอบรมเช่นการอ้างอิงถึงสแนปชอตที่ไม่เปลี่ยนรูป
รหัสแหล่งหลามที่ใช้ในการสร้างแบบจำลอง
เวอร์ชันของ scikit-learn และการพึ่งพา
คะแนนการตรวจสอบข้ามที่ได้รับจากข้อมูลการฝึกอบรม
นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งสำหรับตัวประมาณค่า Ensembleที่พึ่งพาtree.pyx
โมดูลที่เขียนใน Cython (เช่นIsolationForest
) เนื่องจากมันสร้างการเชื่อมต่อกับการใช้งานซึ่งไม่รับประกันว่าจะมีความเสถียรระหว่างรุ่นของ sklearn มันเคยเห็นการเปลี่ยนแปลงที่เข้ากันไม่ได้ย้อนหลังในอดีต
joblib
หากรุ่นที่ท่านจะมีขนาดใหญ่มากและโหลดจะกลายเป็นความรำคาญให้คุณยังสามารถใช้มีประสิทธิภาพมากขึ้น จากเอกสาร:
ในกรณีที่เฉพาะเจาะจงของ scikit มันอาจจะน่าสนใจกว่าที่จะใช้การแทนที่ของ joblib pickle
( joblib.dump
& joblib.load
) ซึ่งมีประสิทธิภาพมากขึ้นในวัตถุที่มีอาร์เรย์ numpy ขนาดใหญ่ภายในซึ่งมักจะเป็นกรณีสำหรับการประมาณค่า scikit-Learn ที่เหมาะสม แต่สามารถดองได้ ไปยังดิสก์และไม่ใช่กับสตริง: