为何调用DecisionTree类方法时持续出现AttributeError?
解决'DecisionTree' object has no attribute 'gini'错误
常见原因及修复方案
1. 缩进错误(最可能)
Python是缩进敏感语言,类的方法必须和__init__保持同级缩进。检查你的gini方法是否被错误缩进为__init__函数的内部方法。
正确缩进的代码示例:
class DecisionTree(): def __init__(self, data, features, rows, min_samples_split=2, max_depth=5, depth=None, **kwargs): self.data = data self.features = list(self.data.columns) # 注意:此处会覆盖传入的features参数,若不符合预期需修改 self.rows = data.index self.min_samples_split = min_samples_split self.max_depth = max_depth self.depth = depth self.counts = Counter() self.root = None self.child = None def gini(self): t = len(self.data) p = self.data.groupby(self.features).size()/t return 1 - sum(p **2)
2. 类定义被意外覆盖
检查代码中是否在定义DecisionTree类之后,出现了重新赋值DecisionTree变量的情况,比如:
# 错误示例:覆盖了类的定义 DecisionTree = some_other_object
若存在此类代码,删除或修改该赋值语句即可。
3. 代码执行顺序问题
确保在创建tree1实例之前,已经完整定义了DecisionTree类及其gini方法,不要在实例化后才补充方法定义。
额外提示
你的__init__方法中,self.features = list(self.data.columns)会直接覆盖传入的features参数,如果你原本想使用传入的特征列表,应修改为:
self.features = features # 保留传入的参数值
内容的提问来源于stack exchange,提问作者BarbG
相关产品推荐
相关产品推荐

