TypeError: got multiple values for argument ‘x‘

今日手写高斯朴素贝叶斯算法,执行概率密度函数方法出现:TypeError: got multiple values for argument 'x',这个报错是说x传入多个值,实际不是该问题导致,因为报错提示给误导了很长的时间去排查参数问题。

代码如下:一个MyGaussianNB类下,自定义高斯分布的方法和预测方法

class MyGaussianNB(object):
    def _gaussian_distribution(x, mu, sigma):
    return (1 / (np.sqrt(2 * np.pi) * sigma)) * np.exp(-((x - mu) ** 2) / (2 * sigma ** 2))
    
    def predict(self, X):
        prob *= self._gaussian_distribution(x = x, mu = mu, sigma = sigma

根据代码和我们截图标注的位置可以看到,调用_gaussian_distribution方法时我们传递了3个参数,那为什么还一直在报错了

解决方案:

def _gaussian_distribution(self, x, mu, sigma):在方法中加一个 self参数

解析:_gaussian_distribution是我们定义的一个成员方法(实例方法),成员方法(实例方法)而的第一个参数必须是self,它代表类的实例本身。

self._gaussian_distribution(x = x[features_idx], mu = self.y_params[j]['mu'][features_idx], sigma = self.y_params[j]['sigma'][features_idx]),通过这种方法调用我们是调用成员方法,但是之前_gaussian_distribution方法缺少参数self,所以该方法它是属于类方法,定义在类上,如果要访问类方法需要使用类.方法()。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mumu-hn

点击打赏,感谢一路同行❤️

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值