擅长:python、mysql、java
<p>如果使用设计矩阵上的<code>OneHotEncoder</code>来获得一个热的设计矩阵,那么交互就是列之间的乘法。如果<code>X_1hot</code>是您的一个热门设计矩阵,其中示例是线,那么对于二阶交互,您可以编写</p>
<pre><code>X_2nd_order = (X_1hot[:, np.newaxis, :] * X_1hot[:, :, np.newaxis]).reshape(len(X_1hot), -1)
</code></pre>
<p>将有重复的互动,它也将包含原始功能。在</p>
<p>任意顺序会使你的设计矩阵爆炸。如果你真的想这么做,那么你应该研究一下多项式核化,这样你就可以很容易地达到任意程度。在</p>
<p>使用您提供的数据帧,我们可以进行如下操作。首先,从数据框中手动构建一个热设计的方法:</p>
^{pr2}$
<p>列名存储在<code>state_names</code>中,指示符矩阵是<code>X_1hot</code>。然后计算二阶特征</p>
<pre><code>X_2nd_order = (X_1hot[:, np.newaxis, :] * X_1hot[:, :, np.newaxis]).reshape(len(X_1hot), -1)
</code></pre>
<p>为了知道二阶矩阵的列的名称,我们这样构造它们</p>
<pre><code>from itertools import product
one_hot_interaction_names = ["%s___%s" % (column1, column2)
for column1, column2 in product(state_names, state_names)]
</code></pre>