在机器学习中 scikit学习 在库中,我们需要将经过训练的模型保存在一个文件中,并对其进行恢复,以便重用它,将该模型与其他模型进行比较,在新数据上测试该模型。数据的保存被称为 系列化 ,而恢复数据时调用 反序列化 . 此外,我们还处理不同类型和大小的数据。有些数据集很容易训练,即训练时间较短,但即使使用GPU,大小较大(超过1GB)的数据集也可能需要很长时间在本地机器上训练。当我们在不同的项目或以后的某个时候需要相同的训练数据时,为了避免训练时间的浪费,存储训练模型以便将来随时使用。 有两种方法可以在scikit learn中保存模型:
null
- 泡菜串 :pickle模块实现了一个基本但功能强大的算法,用于序列化和反序列化Python对象结构。
Pickle模型提供以下功能—— 泡菜。倾倒 要序列化对象层次结构,只需使用dump()。 泡菜。负载 要反序列化数据流,可以调用loads()函数。
- 例子: 让我们在iris数据集上应用K最近邻,然后保存模型。
Python3
import numpy as np # Load dataset from sklearn.datasets import load_iris iris = load_iris() X = iris.data y = iris.target # Split dataset into train and test X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.3 , random_state = 2018 ) # import KNeighborsClassifier model from sklearn.neighbors import KNeighborsClassifier as KNN knn = KNN(n_neighbors = 3 ) # train model knn.fit(X_train, y_train) |
- 使用pickle将模型保存到字符串-
Python3
import pickle # Save the trained model as a pickle string. saved_model = pickle.dumps(knn) # Load the pickled model knn_from_pickle = pickle.loads(saved_model) # Use the loaded pickled model to make predictions knn_from_pickle.predict(X_test) |
- 输出:
- 使用joblib将模型作为文件进行pickle :Joblib是pickle的替代品,因为它在承载大型numpy数组的对象上更有效。这些函数还接受类似文件的对象,而不是文件名。
乔布里。倾倒 序列化对象层次结构的步骤 乔布里。负载 对数据流进行反序列化
- 使用joblib保存到pickle文件–
Python3
import joblib # Save the model as a pickle in a file joblib.dump(knn, 'filename.pkl' ) # Load the model from the file knn_from_joblib = joblib.load( 'filename.pkl' ) # Use the loaded model to make predictions knn_from_joblib.predict(X_test) |
- 输出:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END