【发布时间】:2014-09-06 08:04:44
【问题描述】:
我正在尝试对数据集运行分类算法,但在运行某些使用 sklearn 的 PCA 模块的迭代时遇到问题。
import pandas as pd
from sklearn.ensemble import RandomForestClassifier
from sklearn.decomposition import PCA
train = pd.DataFrame.from_csv('testData.csv')
target = train['is_exciting']
test.drop(['is_exciting'], axis = 1, inplace = True)
np.shape(train)
>>>(619326, 62)
model = RandomForestClassifier(n_estimators=100)
如果我只将原始训练数据输入我的分类器,运行时间约为 20 分钟:
model.fit(train, target)
但是,当我运行另一个迭代时,我首先使用 PCA 转换我的数据,它没有在 3 小时内完成运行。 (我最终杀了它。)
pca = PCA(n_components=10)
x = pca.fit_transform(train)
print np.shape(x)
>>>(619326L, 10L)
model.fit(x, target)
什么给了?减少了 52 个变量,我认为 PCA 版本会更快地完成,但它似乎根本不想运行!它是否与传递一个 numpy 数组和一个 pandas 数据帧有关?我的数据框要么有 1,0 个标志(整数),要么有 z 分值(我相信是浮点数)。我在这里有点难过 - 欢迎任何帮助!
【问题讨论】:
-
理论上应该可以。您是否尝试过在较小的数据子集上运行它?这可能会给你一个提示。可能是 PCA 期间出了点问题。
-
我有 - 我在数据的 20 * 5 小部分上运行它并且有效,但完整的数据集需要很长时间。如果 10 对于 PCA 功能来说是一个错误的数字,那有关系吗?我只是不明白为什么它只是一个浮点数组时会这么慢。
-
在将 train 传递给 RandomForestClassifier 或 PCA 之前,您能否将其转换为 numpy 数组? Pandas Dataframes 不受官方支持,因为输入可能会发生奇怪的事情。
-
您使用的是 scikit-learn 0.15(昨天发布)吗?随机森林在该版本中获得了巨大的性能提升。
-
(只是预感)PCA 不仅会删除维度,还会重新调整数据轴的方向。这意味着树学习算法将在生长其树时找到不同的,甚至更多的候选分割点。我可以想象这会发生,尤其是。当您的原始数据包含整数特征值时。
标签: python pandas scikit-learn