老师,我想问一下return的问题

来源:5-4 向量化

会边缘ob的码农

2019-04-01

def fit(self,x_train,y_train):
assert x_train.ndim==1,"only solve 2d problem"
assert len(x_train)==len(y_train),"wrong input"
x_mean=np.mean(x_train)
y_mean=np.mean(y_train)
num=(x_train-x_mean).dot(y_train-y_mean)
d=(x_train-x_mean).dot(x_train-x_mean)
self.a=num/d
self.b=y_mean-self.a*x_mean
return "a is %f , b is %f " % (self.a , self.b )

然后运行jupter报错
in fit(self, x_train, y_train)
14 self.a=num/d
15 self.b=y_mean-self.a*x_mean
—> 16 return "a is %f , b is %f " % (self.a , self.b )
17 def predict(self,x_p):
18 assert x_p.ndim==1,“wrong input”

TypeError: not enough arguments for format string
a和b都有值

写回答

1回答

liuyubobobo

2019-04-01

在这句return以前,实际打印一下,看看a和b的值都是什么,a和b的值有问题吗?


另外,现代Python,应该使用"a is {} , b is {} ".format(self.a , self.b ) 的形式更安全。%是已过时的写法。如果确认a和b的值没有问题,修改成使用format,看有没有问题?


最后,为了防止Jupyter Notebook记忆了错误状态,如果你确认自己的逻辑没有问题,尝试重启Jupyter Notebook。(Kernel -> Restart and Run all)

//img.mukewang.com/szimg/5ca1c4b0000102a904930235.jpg


==========


这个课程的所有代码,都可以通过课程的官方github获得。也可以通过慕课网内的代码仓获得。传送门:https://git.imooc.com/coding-169/coding-169 


具体的代码遇到问题,可以先尝试在你的环境下运行课程的官方代码,看是否有同样的问题。如果没有问题,可以仔细比对调试一下,看看自己的代码问题在哪里:)


继续加油!:)

1
2
liuyubobobo
回复
会边缘ob的码农
所以你需要在函数里面打印一下a, b的值,看一下根据你的传参,函数里的a, b是什么?是不是计算过程或者传参过程产生了什么bug?或者把整个fit函数的逻辑拆开,一行一行运行,看看哪里出现了问题。你需要debug一下:)
2019-04-02
共2条回复

Python3入门机器学习 经典算法与应用  

Python3+sklearn,兼顾原理、算法底层实现和框架使用。

5839 学习 · 2437 问题

查看课程