我正在学习机器学习课程,并建议(关于平衡课程)使用以下字符串:
X_train_to_add = X_train[y_train.as_matrix() == 1, :][indices_to_add, :]
Run Code Online (Sandbox Code Playgroud)
其中y_train是pandas数据帧(通过它转换为numpy数组as.matrix()).我不知道如何使用矩阵作为切片的索引.
将陈述分解为各个组成部分可能会有所帮助。该语句等价于以下语句序列:
y = y_train.as_matrix()
row_mask = y == 1
X_masked = X_train[row_mask,:]
X_train_to_add = X_masked[indices_to_add, :]
Run Code Online (Sandbox Code Playgroud)
让我们看一个具体的例子。假设y、X_train、 和indices_to_add具有以下值:
>>> import numpy as np
>>> y = np.array([1, 2, -1, 1, 1])
>>> X_train = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15]])
>>> indices_to_add = np.array([2, 0])
Run Code Online (Sandbox Code Playgroud)
首先,我们创建一个布尔数组,指示 的哪些元素y等于1,我们将其称为“行掩码”。
>>> row_mask = y == 1
>>> row_mask
array([ True, False, False, True, True], dtype=bool)
Run Code Online (Sandbox Code Playgroud)
接下来,我们使用行掩码来选择 的行,X_train使得 的对应值 为row_mask(True或者等效地,选择 的对应值y等于 的行1)。
>>> X_masked = X_train[row_mask,:]
>>> X_masked
array([[ 1, 2, 3],
[10, 11, 12],
[13, 14, 15]])
Run Code Online (Sandbox Code Playgroud)
最后,我们使用索引数组从先前的结果中选择某些行。请注意,这些索引指的是 的行X_masked,而不是原始矩阵X_train。
>>> X_train_to_add = X_masked[indices_to_add,:]
>>> X_train_to_add
array([[13, 14, 15],
[ 1, 2, 3]])
Run Code Online (Sandbox Code Playgroud)
您可以在文档中看到更多 numpy 索引的示例。