我正在研究概率矩阵分解。我想将评分矩阵分为训练和验证。我看到的代码不是随机样本。
我一直在努力想办法做到这一点。
举个简单的例子,原始矩阵R是(10,10)。我正在寻找一个训练矩阵,它是(10,10),但只有矩阵R的值的70%随机采样,其他值都是0。并且验证矩阵也是(10,10),但是具有剩余的30%以上的值,其余的值为0。
这里的关键是保持矩阵的大小不变。
有人知道怎么做吗?
编辑:考虑更多: TrainingMatrix + ValidationMatrix =矩阵R,如果你做元素加法
发布于 2020-05-14 17:47:03
我的解决方案。如果有更简单/更快的方法,请告诉我。
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)
https://stackoverflow.com/questions/61802412
复制相似问题