Pickle是否为像KNeighboursClassifier form sci kit这样的懒惰学习者保存培训数据?如果是这样,我们可以从pickle对象访问这些数据吗?(询问数据隐私问题)*
例如:
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)
pickle中的knn_或保存的_模型变量是否包含Xtrain
数据?由于Knn是一个懒惰的学习者,并且需要计算距离,因此当新数据到达训练数据时Xtrain
。当我打印knn_from_pickle
时,我刚刚显示了传递给KNeighboursClassifier算法的超参数
正如我所观察到的,对于包含所有数据转换的65KB数据文件(Xtrain),并将整个数据用于训练,当knn模型适合并序列化时,如下所示:
saved_model = pickle.dumps(knn)
sys.getsizeof(saved_model)
占用的空间238744字节
而其他算法(如Gaussian Naive Bayes)的pickle对象占用的空间为:
saved_model = pickle.dumps(gnb)
sys.getsizeof(saved_model)
占用的空间6074字节,对于Random Forest等重算法:
saved_model = pickle.dumps(rf)
sys.getsizeof(saved_model)
占用的空间48863字节
看到KNN和其他算法的pickle对象之间的空间差异,pickle必须以某种方式为KNN存储训练数据。如果是,如何访问它?或者knn是如何存储在pickle中的,如果否,那么unpickle对象(knn_from_pickle)是如何使用predict without fit并给出正确答案的
是的,数据保存在私有属性中,但是由于python实际上并不尊重私有方法/属性,所以在公布合适的模型之前,您需要考虑隐私问题
对于
KNeighborsClassifier
,属性是_fit_X
(在编写本文时;作为私有属性,开发人员不会考虑太多更改)相关问题 更多 >
编程相关推荐