sigmoid函数 - TypeError

时间:2013-07-16 01:07:30

标签: python arrays numpy

道歉,如果我第一次没有做到这一点,因为我不熟悉这个论坛和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)

错误

当我运行时,我收到以下错误:

追踪(最近一次通话):   文件“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然后在错误中使用'。'来代替'float'并使用'.astype(np.float)'和其他尝试。我已经查找了类似的问题并查看了文档,但一直无法找到解决方案(或者理解我确实在阅读解决方案!): http://docs.scipy.org/doc/numpy/reference/generated/numpy.exp.html

How to calculate a logistic sigmoid function in Python?

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

我错过了什么?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

删除**并将修复

np.exp内置了幂函数,这就是您收到错误的原因

答案 2 :(得分:0)

除了@roippi指出的语法错误之外,您还可以使用numpy I / 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.]])
相关问题