【发布时间】:2013-07-14 00:53:57
【问题描述】:
抱歉,如果我第一次没有做到这一点,因为我是这个论坛和 Python 的新手。我正在尝试进行逻辑回归并想计算 sigmoid 函数。
代码:
import numpy as np
csv_file_object = csv.reader(open('train.csv', 'rb'))
header = csv_file_object.next()
train_data=[]
for row in csv_file_object:
train_data.append(row[1:])
train_data = np.array(train_data)
X = train_data
X = np.c_[ np.ones(N), X ] # print type(X) gives <type 'numpy.ndarray'>
def sigmoid(z):
s = 1.0 / (1.0 + np.exp**(-1.0 * z))
return s
print sigmoid(X)
错误
当我运行它时,我收到以下错误:
Traceback(最近一次调用最后一次): 文件“C:\Users...”,第 63 行,在
中print sigmoid(X)
文件“C:\Users...”,第 59 行,sigmoid
s = 1.0 / (1.0 + np.exp**(-1.0 * z))
TypeError: *: 'float' 和 'numpy.ndarray' 的操作数类型不受支持
我尝试将 1.0 切换为 1,然后在错误中获取 'int' 而不是 'float' 并使用 '.astype(np.float)' 和其他尝试。我已经寻找了类似的问题并查看了文档,但无法找到解决方案(或了解我确实在阅读解决方案!): http://docs.scipy.org/doc/numpy/reference/generated/numpy.exp.html
How to calculate a logistic sigmoid function in Python?
我的理解是指数函数应该对数组中的每个元素执行逐元素取幂。
我错过了什么?
【问题讨论】:
-
exp(-1.0*z) 应该可以解决您的问题,(numpy.exp 是指数函数,而不是欧拉数)