如何导出 PCA 以在另一个程序中使用

数据挖掘 机器学习 Python 预处理 主成分分析
2021-09-16 10:01:51

我正在尝试为一个非常大的数据集编写一个随机森林分类器,例如我已经应用 PCA 将 643 个功能减少到 5 个 PC 的预处理的一部分。是否可以导出这些设置以便我可以

pca.transform(data) 

在另一个程序中。

我已经能够使用 pickle 对缩放器执行此操作,但是当我运行 transfrom 时,我得到了错误: Traceback(最近一次调用最后一次):

  File "<ipython-input-35-68c9849c2acc>", line 1, in <module>
    pca.transform(data)

TypeError: transform() missing 1 required positional argument: 'X'
2个回答

理想情况下,PCA 不应用作预处理特征减少的一部分。

无论如何,关于保存和重用 PCA 模型,共享一个在我的情况下运行良好的基本代码片段(因为我无法重现错误情况)。

from sklearn.decomposition import PCA
import pickle as pk
pca = PCA(n_components=2)
result = pca.fit_transform(X) # Assume X is having more than 2 dimensions    
pk.dump(pca, open("pca.pkl","wb"))
.
.
.
# later reload the pickle file
pca_reload = pk.load(open("pca.pkl",'rb'))
result_new = pca_reload .transform(X)

# result 和 result_new 在我的例子中是一样的

第一个参数transform()self参数。从您的Traceback中,可以得出data正在传递给self参数的结论。

当您没有创建要从中使用函数的类的对象时,就会发生这种情况。(假设函数没有用 装饰@staticmethod,在 的情况下transform不是。)

检查您是否无意中初始化pcapca = PCA.

对于预处理脚本 -

pca = PCA(n_components=2)
pca.fit(train_features)
scaled_train_features = pca.transform(train_features)
# save pca in a pickle file
with open('pca.pkl', 'wb') as pickle_file:
        pickle.dump(pca, pickle_file)

对于您要使用安装的其他脚本pca-

with open('pca.pkl', 'rb') as pickle_file:
    pca = pickle.load(pickle_file)
scaled_data = pca.transform(data)