1

假设我有一个 RxC列联表。这意味着有 R 行和 C 列。我想要一个维度为 RC × (R + C - 2) 的矩阵 X,它包含行的 R - 1“主效应”和列的 C - 1“主效应”。例如,如果你有R=C=2 (R = [0, 1], C = [0, 1]) 和主效应,有多种方法可以参数化设计矩阵 (X),但以下是一种方法:

1 0
0 1
1 0
0 0

请注意,这是 4 x 2 = RC x (R + C - 2),您省略了每一行的一层和每一列的一层。

对于 R 和 C 的任何值,我如何在 Python 中执行此操作,即 R = 3,C = 4([0 1 2] 和 [0 1 2 3])?我只有 R 和 C 的值,但我可以使用它们来使用np.arange(R)and构造数组np.arange(C)

4

2 回答 2

1

以下应该有效:

R = 3
C = 2

ir = np.zeros((R, C))
ir[0, :] = 1
ir = ir.ravel()

mat = []
for i in range(R):
    mat.append(ir)
    ir = np.roll(ir, C)

ic = np.zeros((R, C))
ic[:, 0] = 1
ic = ic.ravel()

for i in range(C):
    mat.append(ic)
    ic = np.roll(ic, R)

mat = np.asarray(mat).T

结果是:

array([[ 1.,  0.,  0.,  1.,  0.],
       [ 1.,  0.,  0.,  0.,  1.],
       [ 0.,  1.,  0.,  1.,  0.],
       [ 0.,  1.,  0.,  0.,  1.],
       [ 0.,  0.,  1.,  1.,  0.],
       [ 0.,  0.,  1.,  0.,  1.]])

感谢大家的帮助!

于 2017-08-30T14:35:41.200 回答
0

使用 LabelBinarizer 或 One-Hot Encoding 创建设计矩阵

由于他所有的标签都在相似的列中,我们可以使用具有 LabelBinarizer/One Hot Encoding 的 sklearns 预处理包,它将同一列中的标签转换为多个列,将 1 放在它出现的索引处

示例 NA
PA
PD
NA

LabelBinarizer 后
NA PA PD
1 0 0
0 1 0
0 0 1
1 0 0

于 2019-08-16T13:03:09.877 回答