Pickle是否为像KNeighboursClassifier这样的懒惰学习者保存培训数据?如果是这样的话,我们能从泡菜对象中访问这些数据吗?(要求资料私隐问题)*
例:
knn.fit(Xtrain, Ytrain)
saved_model = pickle.dumps(knn)
knn_from_pickle = pickle.loads(saved_model)
#This function works after directly loading pickled object (saved_model) and gives correct and logical output
knn_from_pickle.predict(Xtest)knn_from_pickle或saved_model变量是否包含Xtrain数据?由于Knn是一个懒惰的学习者,需要距离计算,当新的数据到达有关培训数据Xtrain。当我打印knn_from_pickle时,只显示了传递给KNeighboursClassifier算法的超参数。
正如我所观察到的,对于具有所有数据转换的65 of数据文件(Xtrain),并将整个数据用于培训,当knn模型适合并序列化如下:
saved_model = pickle.dumps(knn)
sys.getsizeof(saved_model) 占用的空间为238744字节
而其他算法(如高斯朴素Bayes )中的腌制对象占用的空间是:
saved_model = pickle.dumps(gnb)
sys.getsizeof(saved_model)占用的空间为6074字节,对于像随机森林这样的重算法:
saved_model = pickle.dumps(rf)
sys.getsizeof(saved_model)占用的空间为48863字节
考虑到KNN和其他算法的腌制对象之间有很大的空间差异,泡菜一定在为KNN存储训练数据。如果是的话,如何访问它?或者knn是如何存储在泡菜中的,如果不是,那么非腌制对象(knn_from_pickle)是如何使用预测而不适合并给出正确答案的?
发布于 2020-07-06 20:24:24
是的,数据保存在私有属性中,但是因为python实际上并不尊重私有方法/属性,所以在公布合适的模型之前,您需要记住隐私问题。
对于KNeighborsClassifier,属性是_fit_X (在编写本文时;作为一个私有属性,开发人员不会过多考虑更改该属性)。
https://stackoverflow.com/questions/62761472
复制相似问题