4

如果我第一次没有做到这一点,我深表歉意,因为我对这个论坛和 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))

类型错误:*:“float”和“numpy.ndarray”不支持的操作数类型

我尝试将 1.0 切换为 1,然后在错误中获取 'int' 而不是 'float' 并使用 '.astype(np.float)' 和其他尝试。我一直在寻找类似的问题并查看了文档,但无法找到解决方案(或理解我确实在阅读解决方案!): http ://docs.scipy.org/doc/numpy/reference/generated /numpy.exp.html

如何在 Python 中计算逻辑 sigmoid 函数?

我的理解是指数函数应该对数组中的每个元素执行逐元素取幂。

我错过了什么?

4

3 回答 3

2

删除**,它将被修复

np.exp里面有幂函数,这就是你得到错误的原因

于 2013-11-24T22:13:36.990 回答
1

numpy.exp 是一个函数,您正在尝试将幂运算符应用于该函数。Python 显然不知道你在说什么。

您需要选择 numpy exponentiation 或 Python exponentiation,而不是两者。查看您链接到的文档中的语法。

于 2013-07-16T01:13:15.463 回答
0

除了@roippi 指出的语法错误,您还可以使用numpyI/O 函数;无需通过 csv 模块。

另一个问题是csv模块给了你字符串,所以你train_data最终不是一个ndarray带有浮点数dtype的(关于什么样的对象被存储在一个 numpy 数组中的行话)。

例如,这样的事情应该可以工作:

>>> !cat train.csv
a,b,c
1,2,3
2,3,4
4,5,6
>>> train_data = np.loadtxt("train.csv", skiprows=1, delimiter=",")
>>> train_data
array([[ 1.,  2.,  3.],
       [ 2.,  3.,  4.],
       [ 4.,  5.,  6.]])
>>> np.exp(train_data)
array([[   2.71828183,    7.3890561 ,   20.08553692],
       [   7.3890561 ,   20.08553692,   54.59815003],
       [  54.59815003,  148.4131591 ,  403.42879349]])

或者,您可以简单地强制转换。从你所拥有的开始,可能是这样的:

>>> train_data
array([['2', '3'],
       ['3', '4'],
       ['5', '6']], 
      dtype='|S1')

(注意dtype这里。)您可以指定类型:

>>> train_data.astype(float)
array([[ 2.,  3.],
       [ 3.,  4.],
       [ 5.,  6.]])
>>> np.array(train_data, dtype=float)
array([[ 2.,  3.],
       [ 3.,  4.],
       [ 5.,  6.]])
于 2013-07-16T01:20:35.343 回答