我正在研究概率矩阵分解。我想将评分矩阵分为训练和验证。我所看到的代码不是随机样本。
我一直在试图找出方法。
为简单起见,原始矩阵R为(10,10)。我正在寻找一个火车矩阵,它是(10,10),但是只能说70%随机采样了矩阵R的值,其他所有值均为0。验证矩阵也为(10,10),但是具有剩下30%的值,其余为0。
这里的关键是保持矩阵的大小相同。
有人知道该怎么做吗?
编辑: 仔细考虑:如果您进行逐元素加法,TrainingMatrix + ValidationMatrix = Matrix R
答案 0 :(得分:0)
我的解决方案。让我知道是否有更简便/快速的方法。
import copy
#Figuring out Matrix Sampling
np.random.seed(3)
training_percent = .7
R = np.arange(100).reshape(10,10)
print("R:")
print(R)
#Get the indexes of the non-zero elements
non_zero_is,non_zero_js = np.nonzero(R)
#Randomly sample the indexes
sampled_indexes_of_non_zeros = np.random.choice(len(i),
int(np.floor(training_percent * len(i))), replace=False)
#Training Mask
training_mask = np.zeros(R.shape,dtype=bool)
for position in sampled_indexes_of_non_zeros:
training_mask[non_zero_is[position],non_zero_js[position]] = True
#Training Matrix
training_matrix = R.copy()
training_matrix[~training_mask] = 0
print("\ntraining_martix:")
print(training_matrix)
#Validation Matrix
validation_matrix = R.copy()
validation_matrix[training_mask] = 0
print("\nvalidation_martix:")
print(validation_matrix)