你们能告诉我怎样才能使下面的代码更像Python吗?在
代码正确。这是机器学习课程讲义4的问题1b。我应该在这两个数据集上使用牛顿算法来拟合logistic假设。但他们用的是matlab,我用的是scipy
我有一个问题是,在我将一个值初始化为0.0之前,矩阵一直舍入为整数。有更好的方法吗?在
谢谢
import os.path
import math
from numpy import matrix
from scipy.linalg import inv #, det, eig
x = matrix( '0.0;0;1' )
y = 11
grad = matrix( '0.0;0;0' )
hess = matrix('0.0,0,0;0,0,0;0,0,0')
theta = matrix( '0.0;0;0' )
# run until convergence=6or7
for i in range(1, 6):
#reset
grad = matrix( '0.0;0;0' )
hess = matrix('0.0,0,0;0,0,0;0,0,0')
xfile = open("q1x.dat", "r")
yfile = open("q1y.dat", "r")
#over whole set=99 items
for i in range(1, 100):
xline = xfile.readline()
s= xline.split(" ")
x[0] = float(s[1])
x[1] = float(s[2])
y = float(yfile.readline())
hypoth = 1/ (1+ math.exp(-(theta.transpose() * x)))
for j in range(0,3):
grad[j] = grad[j] + (y-hypoth)* x[j]
for k in range(0,3):
hess[j,k] = hess[j,k] - (hypoth *(1-hypoth)*x[j]*x[k])
theta = theta - inv(hess)*grad #update theta after construction
xfile.close()
yfile.close()
print "done"
print theta
一个明显的变化是去掉了“fori in range(1100):”而只需迭代文件行。要迭代两个文件(xfile和yfile),请压缩它们。也就是说用类似的东西来代替那个块:
(这是假设文件是100行,(即你想要整个文件)。如果您有意限制在第一个100行,您可以使用以下内容:
^{pr2}$但是,在同一个文件上迭代6次也是低效的—最好提前将其加载到内存中,然后在那里循环,即在循环之外,有:
里面只有:
在代码的顶部:
在Python2.6及更早版本中,整数除法始终返回整数,除非其中至少有一个浮点数。在Python3.0中(以及2.6中的未来division),division的工作方式更像我们人类期望的那样。在
如果希望整数除法返回一个整数,并且您已经从future导入,请使用double//。那就是
^{pr2}$相关问题 更多 >
编程相关推荐