腌制懒惰的学习者

2024-10-03 00:25:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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并给出正确答案的


Tags: 数据对象from算法model字节sys空间
1条回答
网友
1楼 · 发布于 2024-10-03 00:25:06

是的,数据保存在私有属性中,但是由于python实际上并不尊重私有方法/属性,所以在公布合适的模型之前,您需要考虑隐私问题

对于KNeighborsClassifier,属性是_fit_X(在编写本文时;作为私有属性,开发人员不会考虑太多更改)

相关问题 更多 >