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 ที่เหมาะสม แต่สามารถดองได้ ไปยังดิสก์และไม่ใช่กับสตริง: