首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我如何存储一个合适的PCA,以便我可以转换未见的测试数据集?我不希望将大型训练数据集保留在CPU上。

我如何存储一个合适的PCA,以便我可以转换未见的测试数据集?我不希望将大型训练数据集保留在CPU上。
EN

Stack Overflow用户
提问于 2021-12-06 19:56:19
回答 1查看 681关注 0票数 0

我有一个很大的训练数据集。我的训练数据集包含1050个手势,每个手势包含12000个数据点。向机器学习模型提供如此多的数据点将导致性能非常慢和精度很低。因此,我使用PCA从高维空间中删除不相关的特征,并将最重要的特征投影到低维子空间中,从而提高了分类精度并减少了计算时间。使用PCA,我们将每个手势的12,000个数据点减少到15台PC,而不影响从数据中提取的信息。

在将来,我想把我的机器学习模型存储到一个Arduino上。Arduino是一个小芯片,大约有256 is的存储空间。我使用的训练数据集的存储容量为225 My,因此无法满足PCA的要求。

是否有一种方法可以执行PCA并将PCA安装到我的训练数据集中,这样我就可以在将来在Arduino上转换我未见过的测试数据集,而不必将训练数据集存储到我的Arduino以进行拟合?

下面是我的代码,以适合我的训练数据集

代码语言:javascript
运行
复制
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA

transposed_normDF.columns = transposed_normDF.columns.map(str)
features = [str(i) for i in range(0,11999)]
x = transposed_normDF.loc[:, features].values
y = df.loc[:,['label']].values

pca = PCA(n_components=0.99)
principalComponents = pca.fit_transform(x)

pc = pca.explained_variance_ratio_.cumsum()
x1 = StandardScaler().fit_transform(principalComponents)
full_newdf = pd.DataFrame(data = x1
             , columns = [f'pc_stdscaled_{i}' for i in range(len(pc))])
full_finalDf = pd.concat([full_newdf, df[['label']]], axis = 1)
print(full_finalDf)
print(full_newdf.shape)

下面是我的代码,用于转换未见数据

代码语言:javascript
运行
复制
pca = PCA(n_components=0.99)

newdata_transformed = pca.transform(in_data)
pc = pca.explained_variance_ratio_.cumsum()
x1 = StandardScaler().fit(principalComponents)
X1 = x1.transform(newdata_transformed)
newdf = pd.DataFrame(data = X1
             , columns = [f'pc_stdscaled_{i}' for i in range(len(pc))])
newdf.head()
EN

回答 1

Stack Overflow用户

发布于 2021-12-06 21:03:12

是的,可以将PCA安装在训练集上,然后在另一个程序上重用。您可以使用pickle保存模型并加载它。下面是这方面的代码片段:

代码语言:javascript
运行
复制
from sklearn.decomposition import PCA
import pickle as pk
from sklearn.datasets import make_blobs

X, y = make_blobs(n_samples=10, centers=3, n_features=20, random_state=0)
pca = PCA(n_components=2)
result = pca.fit_transform(X) # Assume X is having more than 2 dimensions    
input = X[0]
result = pca.transform([input])
print(result) # output: [[ 25.27946068  -2.74478573]]
pk.dump(pca, open("pca.pkl","wb"))

保存已安装的PCA后,您可以在另一个程序中重新加载并转换新的输入样本,而无需加载培训数据如下:

代码语言:javascript
运行
复制
# later reload the pickle file, no training data needed
pca_reloaded = pk.load(open("pca.pkl",'rb')) 
result_new = pca_reloaded.transform([input]) # X_new is a new data sample
print(result_new) # output: [[ 25.27946068  -2.74478573]]

当您比较resultresult_new时,您会发现它们是相等的。

来源:https://datascience.stackexchange.com/questions/55066/how-to-export-pca-to-use-in-another-program

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70251197

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档