【问题标题】:Classification model on large dataset大型数据集上的分类模型
【发布时间】:2020-08-12 13:58:07
【问题描述】:

我想在 n=3000000 和 12 列的数据集上实现分类模型。我有一个问题,因为下班后它很慢,我什么也没得到,你有建议让它跑得更快吗?

谢谢

df = pd.DataFrame(np.random.randint(0,100,size=(3000000, 12)), columns=list('ABCDEFGHIJKL'))
X=df.drop(['L'], axis=1)
y=df['L']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)

parameters = {'n_neighbors':np.arange(1,30)}
grid=GridSearchCV(KNeighborsClassifier(),parameters,cv=5)
grid.fit(X_train, y_train)

【问题讨论】:

  • 你能介绍一下班的数量吗?他们在数据集中的比率?此外,使用 1-30 的 KNN 非常高。相反,请尝试用完 1,10,30。如果你得到 10。然后尝试 5、10、15 及类似
  • 您在 300 万行数据上对 fit 进行了 150 次不同的调用,分类器占用大量内存空间,没有并行化。那会很慢。
  • 我不太清楚你的问题,但我生成了一个随机的 int64 数据集,有 12 列,每列在数据集中具有相同的权重。
  • @G.Anderson,有没有办法更快,但我根本无法处理这种大小的数据集。
  • 正如@MehulGupta 所说,'n_neighbors':np.arange(1,30) 对于您的GridSearch 而言搜索空间太大,请按照他们的建议尝试缩小范围;做一个较低的cv= 数字,更改n_jobs 以允许并行处理作为建议的一个答案

标签: python pandas scikit-learn classification large-data


【解决方案1】:

使用更多内核,即在GridSearchCVKNeighborsClassifier 中使用n_jobs=-1

parameters = {'n_neighbors':np.arange(1,30)}
grid=GridSearchCV(KNeighborsClassifier(n_jobs=-1),parameters,cv=5, n_jobs=-1)
grid.fit(X_train, y_train)

【讨论】:

  • 你好,很遗憾还是很慢
  • 你也可以减少网格空间:'n_neighbors':np.arange(1,30)
【解决方案2】:

除了减少大量邻居之外的另一个答案:从较小的数据样本构建模型。如果 KNeighborsClassifier 在 100 万次观察中看起来没有希望,那么在 300 万次观察中可能不值得花费时间和资源。

【讨论】:

    猜你喜欢
    • 2013-12-15
    • 1970-01-01
    • 2015-09-28
    • 2018-05-17
    • 2021-03-25
    • 2016-08-01
    • 2011-07-25
    • 2011-11-07
    相关资源
    最近更新 更多