コード例 #1
0
def sparse_mat_decompose(user_preference: ss.csr_matrix, latent_factor_num: int = 1) -> (ss.csr_matrix, ss.csr_matrix):
    """
    分解稀疏的用户偏好矩阵至两个初始化矩阵 U 和 V,U 的列数和 V 的行数为 latent_factor_num
    :param user_preference: 分解用户偏好矩阵
    :param latent_factor_num: U 的列数和 V 的行数
    :return: U, V
    """
    rows_num, column_num = user_preference.shape
    not_nan_elements_num = user_preference.count_nonzero()
    avg = user_preference.sum() / not_nan_elements_num
    init_element = np.sqrt(avg / latent_factor_num)
    u_init, v_init = np.full((rows_num, latent_factor_num), init_element), \
                     np.full((latent_factor_num, column_num), init_element)
    return ss.csr_matrix(u_init), ss.csr_matrix(v_init)