在数据挖掘、机器学习任务中,我们可能需要通过梯度下降、模拟退火、遗传算法等方法寻找某个问题的最优解
为了解决这个问题,首先需要定义一个解空间,比如一个简单的解空间可以是 (0,0,0) 到 (9,9,9) 之间的 10x10x10 立方体
我现在遇到的问题是这样的: 有一个 n 维的特征,比如假设是 10 维的,选取其中的 3 个维度,赋予每个维度一个 0-9 之间的权重,所以权重向量可以是像这样的:
[0 0 a 0 b 0 0 0 c 0]
我们需要选取 3 个最佳的子特征,然后赋予其最佳的权重
如果直接把解空间定义成 (0,0,0,0,0,0,0,0,0,0) 到 (9,9,9,9,9,9,9,9,9,9) 显然是非常低效的,搜索产生的大部分解都不符合题设
一种思路是我们先把 a, b, c 三者的 index 取出来,然后再接上其权重,构成一个长度是 6 的向量:
[2 4 8 a b c]
然后在此基础上进行优化,但是这还是会带来一个问题:本质上我们需要的是一个组合,但是这个向量的前 3 位构成的是一个排列 (2 4 8 和 4 2 8 是重复的)
如果我们限定 v[0] < v[1] < v[2],确实可以把解限定为不重复的排列,但是当 v[0] 很大时,比如 v = [7 8 9 a b c] 时,此时我们能调整的只有 v[0] 和 v[3] v[4] v[5]
此时我们必须通过一个过滤器,把无效解给过滤掉,但是这又会造成优化搜索过度偏向于权重 a b c (有 75% 的概率是在调整 a b c),使得最优解的搜索变得低效
求助各位,对于这样的一个问题:在一个较长的特征中,选取其中 n 个子特征,然后赋予其最佳的权重的较为合理的实现方式是什么?
[0 0 a 0 b 0 0 0 c 0]
~ ~ ~
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.