【问题标题】:sklearn classification runtimesklearn 分类运行时
【发布时间】: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


【解决方案1】:

所以我能做的最好的事情就是减少 PCA 数据集运行的特征数量。在 7 个功能时,它运行得相对较快,但是一旦我添加了 10 个功能,我就没有完成它,我不确定它是否与正在开发的数据有关,但我最终选择了 7 个,并且在我的输出中没有看到任何不良结果。

【讨论】:

    猜你喜欢
    • 2018-10-31
    • 2020-04-09
    • 2014-06-11
    • 2021-07-06
    • 2018-05-19
    • 2015-07-19
    • 2015-11-20
    • 1970-01-01
    • 2021-07-19
    相关资源
    最近更新 更多