首页 > 解决方案 > 如何在 python 中获取数据集中列的所有记录的 sigmoid?

问题描述

我想在我的数据集中取一列的 sigmoid。

我已经为相同的定义了一个函数

import math

def sigmoid(x):
    return 1 / (1 + math.exp(-x))

但是我如何一次给出列的所有值?

标签: pythonpandasdataframenumpylogistic-regression

解决方案


您可以使用apply,但它不是 vecorized 解决方案。更好/更快的方法是np.exp用于 vecorized 方法。

df = pd.DataFrame({'A': [10, 40, -6, 1, 0, -1, -60, 100, 0.2, 0.004, -0.0053]})

import math

def sigmoid(x): 
    return 1 / (1 + math.exp(-x))

df['s1'] = df.A.apply(sigmoid)
df['s2'] = 1 / (1 + np.exp(-df.A))
print (df)
           A            s1            s2
0    10.0000  9.999546e-01  9.999546e-01
1    40.0000  1.000000e+00  1.000000e+00
2    -6.0000  2.472623e-03  2.472623e-03
3     1.0000  7.310586e-01  7.310586e-01
4     0.0000  5.000000e-01  5.000000e-01
5    -1.0000  2.689414e-01  2.689414e-01
6   -60.0000  8.756511e-27  8.756511e-27
7   100.0000  1.000000e+00  1.000000e+00
8     0.2000  5.498340e-01  5.498340e-01
9     0.0040  5.010000e-01  5.010000e-01
10   -0.0053  4.986750e-01  4.986750e-01

#110 k rows
df = pd.DataFrame({'A': [10, 40, -6, 1, 0, -1, -60, 100, 0.2, 0.004, -0.0053] * 10000})


In [15]: %timeit df['s1'] = df.A.apply(sigmoid)
57.4 ms ± 6.78 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

In [16]: %timeit df['s2'] = 1 / (1 + np.exp(-df.A)) 
2.64 ms ± 81.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

推荐阅读