【发布时间】:2018-04-10 13:09:30
【问题描述】:
我实现了CN2分类算法,它归纳出规则对表格的数据进行分类:
IF Attribute1 = a AND Attribute4 = b THEN class= 1 类
我当前的实现使用iterrows() 函数循环通过包含训练数据的pandas DataFrame,如果它满足规则,则为每一行返回True 或False,但是,我知道这是一个非常低效的解决方案。我想对代码进行矢量化,我目前的尝试是这样的:
DataFrame = df
age prescription astigmatism tear rate
1 1 2 1
2 2 1 1
2 1 1 2
rule = {'age':[1],'prescription':[1],'astigmatism':[1,2],'tear rate':[1,2]}
df.isin(rule)
这会产生:
age prescription astigmatism tear rate
True True True True
False False True True
False True True True
我已将规则编码为一个字典,其中包含目标属性的单个值和非目标属性的所有可能值的集合。
如果规则的条件是否满足,我想要的结果是每行的单个 True 或 False 以及评估为全部 True 的行的索引。目前我只能为每个值获取一个带有 T/F 的 DataFrame。具体来说,在我展示的示例中,我希望结果是第一行的索引,这是唯一满足规则的行。
【问题讨论】:
-
还要在问题中添加预期输出?可能在寻找
df[df.isin(rule).all(axis=1)]或df.index[df.isin(rule).all(1)] -
您是否需要
df.isin(rule).any(axis=1)来检查每行是否至少有一个值是True或df.isin(rule).all(axis=1)来检查所有值是否为真?
标签: python-3.x pandas classification vectorization