Python sigmoid函数-类型错误
如果我第一次没有正确理解,我深表歉意,因为我对这个论坛和Python都是新手。我正在尝试进行逻辑回归,并希望计算S形函数 代码:Python sigmoid函数-类型错误,python,arrays,numpy,Python,Arrays,Numpy,如果我第一次没有正确理解,我深表歉意,因为我对这个论坛和Python都是新手。我正在尝试进行逻辑回归,并希望计算S形函数 代码: import numpy as np csv_file_object = csv.reader(open('train.csv', 'rb')) header = csv_file_object.next() train_data=[]
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…”,第59行,以sigmoid格式
s = 1.0 / (1.0 + np.exp**(-1.0 * z))
TypeError:不支持*:“float”和“numpy.ndarray”的操作数类型
我尝试将1.0转换为1,然后在错误中使用“.astype(np.float)”和其他尝试获取“int”而不是“float”。我曾寻找过类似的问题,并查看过文档,但未能找到解决方案(或理解我确实在阅读解决方案!):
我的理解是,指数函数应该对数组中的每个元素执行按元素的指数运算
我缺少什么?numpy.exp是一个函数,您正在尝试对该函数应用求幂运算符。Python显然不知道您在谈论什么
您需要选择numpy求幂或Python求幂,而不是两者都选择。查看您链接到的文档中的语法。除了@roippi指出的语法错误外,您还可以使用
numpy
I/O函数;无需通过csv模块
另一个问题是,csv
模块为您提供字符串,因此您的train_数据
最终不是带有floatdtype
的ndarray
(用于在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.]])
拆下**,它将被固定
np.exp
里面有幂函数,这就是为什么会出现错误的原因啊,是的,我在看解决方案。谢谢。太好了,这是一种更简单的I/O方法。这对于解决这个问题也是必要的,因为我有一个字符串数组。谢谢。exp(-1.0*z)应该可以解决您的问题,(numpy.exp是指数函数,而不是欧拉数)
>>> train_data.astype(float)
array([[ 2., 3.],
[ 3., 4.],
[ 5., 6.]])
>>> np.array(train_data, dtype=float)
array([[ 2., 3.],
[ 3., 4.],
[ 5., 6.]])