【问题标题】:How can I increase speed/performance with Scikit-learn regression and Pandas?如何使用 Scikit-learn 回归和 Pandas 提高速度/性能?
【发布时间】:2014-07-14 20:01:34
【问题描述】:

我今天正在玩出色的 Scikit-learn。我在minor_axis上切片的面板中形成x,在列上切片的DataFrame中形成y。目前我正在进行无休止的迭代,是否有任何 .apply() 大师知道如何加快速度?

from pandas import *
import numpy as np
from sklearn import linear_model
np.random.seed(247)
x = Panel(np.random.rand(3,25,10))
y = y = DataFrame(np.random.rand(25,5))
r2 = Series(index=y.columns)
for i in y.columns:
    X = x.ix[:,:,i]
    Y = y.ix[:,i]
    r2.ix[i] = linear_model.LinearRegression().fit(X,Y).score(X,Y)

In [325]: r2
Out[325]: 
0    0.061945
1    0.091734
2    0.004635
3    0.015835
4    0.027906
dtype: float64

我的想法是按列应用此功能(或类似功能)。玩过 .apply() 但因为它是双重(或三重)函数调用,即 f1.().f2(x,y) 或 f1.().f2(x,y).f3(x,y) 它给我一个错误。任何想法都将不胜感激,我认为这将是一个非常有用的代码! 长宽

【问题讨论】:

  • 这看起来已经是最优化的了。如果您的 X 在循环中没有改变,那么您可以使用估算器的多目标功能同时处理所有 Ys。
  • 嗨,我的 x 和 y 确实发生了变化,都有相同的列索引

标签: python pandas scikit-learn


【解决方案1】:

您可以并行进行计算。这并没有真正让你的代码“更好”,但肯定会让事情变得更快。有点像……

代码:

#!/usr/bin/env python

import pandas as pd
import numpy as np
from sklearn import linear_model
from multiprocessing import Pool
import time

np.random.seed(247)
x = pd.Panel(np.random.rand(3, 25, 2000000))
y = pd.DataFrame(np.random.rand(25, 1000000))

def main(i):
    X = x.ix[:,:,i]
    Y = y.ix[:,i]
    r2 = linear_model.LinearRegression().fit(X, Y).score(X, Y)
    return r2

if __name__ = '__main__':
    start_time = time.time()

    p = Pool()
    result = p.map(main, range(1000000))
    print result[:2]  # print first 2 r2's

    end_time = time.time()
    print 'Iterations took %f seconds.' % (end_time - start_time)

输出:

[0.07197, 0.24436]
"Iterations took 159.226 seconds."

我运行了一百万次回归,如您所见,它花费了大约 2.5 分钟。这将根据您拥有的核心数量而有所不同。 result 将是您的分数列表,因此您可以轻松地在示例中重现 r2 Series。祝你好运!

【讨论】:

  • 看起来很有趣,会有戏。 Pool() 是否与 Pandas 日期(时间戳)配合得很好,你要遍历那些而不是数字吗?
  • 您也可以考虑使用sklearn.externals.joblib.Parallel 进行此操作。
猜你喜欢
  • 2020-10-30
  • 2018-07-31
  • 2016-07-24
  • 2016-10-23
  • 2013-12-26
  • 2018-07-04
  • 2020-11-01
  • 2019-05-14
  • 2017-12-25
相关资源
最近更新 更多