【问题标题】:Python: create a polynomial of degree nPython:创建一个 n 次多项式
【发布时间】:2011-12-21 21:46:50
【问题描述】:

我有一个功能集

[x1,x2....xm]

现在我想创建多项式特征集 这意味着如果度数是 2,那么我就有了特征集

[x1.... xm,x1^2,x2^2...xm^2, x1x2, x1x3....x1,xm......xm-1x1....xm-1xm]

所以它只包含 2 阶的术语.. 同样是如果顺序是三个..那么你也会有三次项..

如何做到这一点?

编辑 1:我正在从事一个机器学习项目,其中我有接近 7 个特征......并且对这个线性特征的非线性回归给出了好的结果......因此我认为可以获得更多的数字特征我可以将这些特征映射到更高的维度.. 所以一种方法是考虑特征向量的多项式阶...... 生成 x1*x1 也很容易.. :) 但是获得其余的组合有点棘手..

如果订单是 3,组合可以给我 x1x2x3 的结果吗?

【问题讨论】:

    标签: python algorithm


    【解决方案1】:

    使用

    itertools.combinations(list, r)
    

    其中list 是特征集,r 是所需多项式特征的阶数。然后将上面给出的子列表的元素相乘。那应该给你{x1*x2, x1*x3, ...}。您需要构建其他部分,然后合并所有部分。

    [编辑] 更好:itertools.combinations_with_replacement(list, r) 将很好地提供已排序的长度为 r 且允许重复元素的元组。

    【讨论】:

    • itertools.combinations(firstOrderFeatures, 3) 应该为您提供三个一阶特征的所有独特组合。它将有{x1, x2, x3},但没有其他 5 个排列。
    • 不应该是itertools.combinations_with_replacement吗? 2 阶特征是 x1^2、x1x2、x2^2 而不是(就像组合会给你)只是 x1x2。
    • 你是对的。 itertools.combinations_with_replacement(list, r) 将很好地提供已排序的长度为 r 的元组,允许重复元素。
    【解决方案2】:

    您可以使用itertools.product 创建从原始集合中选择的所有可能的 n 值集合;但请记住,这将生成 (x2, x1) 以及 (x1, x2)

    同样,itertools.combinations 将生成不重复或重新排序的集合,但这意味着您不会得到 (x1, x1)

    你到底想做什么?你需要这些结果值做什么?你确定你想要那些x1^2 类型的术语(多次拥有相同的功能是什么意思)?在这种情况下到底什么是“特征”?

    【讨论】:

      【解决方案3】:

      以卡尔的回答为灵感,尝试使用产品,然后利用设置的对象。类似的,

      set([set(comb) for comb in itertools.product(range(5),range(5)])
      

      这将消除重复出现的对。然后您可以将集合转回列表并根据需要对其进行排序或迭代。

      编辑: 这实际上会杀死x_m^2 术语,所以构建排序的元组而不是集合。这将允许这些术语是可散列且不重复的。

      set([tuple(sorted(comb)) for comb in itertools.product(range(5),range(5))])
      

      【讨论】:

      • 您不能将集合放入集合中。你必须使用frozensets,所以它们是可散列的
      猜你喜欢
      • 1970-01-01
      • 2021-12-01
      • 2015-03-28
      • 2021-05-15
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多