python - Python 中的 List-Then-Eliminate 实现
问题描述
我正在尝试使用数据集实现 List-Then-Eliminate 算法。但是,最后我得到了错误的向量空间。我无法弄清楚问题是什么。
基本上,我遍历所有的训练实例。对于每个假设,我使用最后 5 位来检查训练实例x
是否相同,然后比较c(x)
任何援助将不胜感激。下面是我的代码。
def gen_vector_space(k):
return [''.join(x) for x in itertools.product('01', repeat=k)]
#basically values from 0-65536 in binary
vector_space = gen_vector_space(pow(2,4))
for train_inst in train_data:
result = train_inst[-1]
d = train_inst[:-1]
for h in vector_space:
if h[-5:-1] == d:
if (h[-1] != result):
vector_space.remove(h)
print(len(vector_space))
解决方案
我建议对创建向量空间的函数进行编辑。从您的原始功能开始:
def create_space(k):
return [''.join(x) for x in itertools.product('01', repeat=k)]
当您调用该函数时,您将完全迭代该范围以构建列表,然后再次迭代列表以过滤掉值。解决此问题的两种方法:
函数中的 if 语句
# Redefine your function to only return values that matter to you
def create_space(k, d, result):
"""
This will filter out your limits, takes result and d as params
"""
vector_space = []
for x in itertools.product('01', repeat=k):
if x[-5:-1]==d and x[-1]!= result:
vector_space.append(x)
return vector_space
# define k, d, and result here
vector_space = create_space(k, d, result)
生成器方法
或者,yield
关键字将一次计算一个值,因此您只需迭代一次:
def create_space(k):
for x in itertools.product('01', repeat=k):
yield x
vector_space = []
# define d and result here
for x in create_space(k):
if x[-5:-1]==d and x[-1]!= result:
vector_space.append(x)
使用这两种方法中的任何一种都需要注意的是,我在迭代它时不会编辑已经建立的对象。相反,我已经在创建空间之前进行了过滤,这样您就可以在第一时间获得您想要的东西。
推荐阅读
- reactjs - React 测试用例在测试库中失败
- c# - 如何使用 bool 来判断玩家是否跳过
- python - 使用 pip 构建 CMake 扩展
- javascript - writeFile 输出问题。没有显示我期望看到的内容
- php - 我无法在 godady 托管服务器上运行命令“composer require classiebit/addchat-laravel-pro”
- java - 可选登录 Spring + JWT
- typescript - 回调参数的条件类型
- ios - AVPlayer 没有播放本地保存的视频文件
- javascript - React Native setState 根本不工作(功能组件),甚至不同步
- c# - 在c#中将可空字符串转换为可空int