Example #1
0
def get_flag(m, n, sum11, l_array):
    r = np.load('E:\\limbi\\n.npy')
    c = np.load('E:\\limbi\\m.npy')
    sum_ratings = len(r)
    c_flag = []
    for i in range(len(r)):
        c_flag.append(1)
    cf.show_time()
    sum1 = 0
    i = 0
    for sum1 in range(sum_ratings):
        if r[sum1] == i:
            if c[sum1] in l_array[i]:
                c_flag[sum1] = 1
            else:
                c_flag[sum1] = 0
        else:
            i += 1
            if c[sum1] in l_array[i]:
                c_flag[sum1] = 1
            else:
                c_flag[sum1] = 0
    cf.show_time()
    print(len(c_flag))
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\limbi\\c_flag{sum11}', c_flag)
Example #2
0
def d_book0(n_number, m_number):
    data = np.zeros((n_number, m_number), np.float16)
    n_a = np.load('E:\\book\\n.npy')
    m_a = np.load('E:\\book\\m.npy')
    r_a = np.load('E:\\book\\r.npy')
    t = len(n_a)
    for i in range(t):
        s_t = int(n_a[i])
        l_t = int(m_a[i])
        data[s_t][l_t] = r_a[i]
    print('set the old dateset')
    cf.show_time()
    n_a = []
    m_a = []
    r_a = []
    m_click = 0
    for i in range(m_number):
        s_t = 0
        for j in range(n_number):
            ratings_s = data[j][i]
            if ratings_s != 0:
                s_t += 1
                n_a.append(j)
                m_a.append(m_click)
                r_a.append(ratings_s)
        if s_t != 0:
            m_click += 1
            print(m_click)
    np.save('E:\\book\\n', n_a)
    np.save('E:\\book\\m', m_a)
    np.save('E:\\book\\r', r_a)
    print('order the dataset')
Example #3
0
def local_differencial_privacy(eta, p):
    r = np.load('D:\Labor\\n.npy')
    c = np.load('D:\Labor\m.npy')
    ratings = np.load('D:\Labor\\r.npy')
    D = np.load('D:\Labor\D.npy')
    D3 = np.load('D:\Labor\D3.npy')
    U = np.load('D:\\U.npy')
    V = np.load('D:\V.npy')
    m = 131262
    n = 138492
    sum = 150629
    print(sum)
    q = 2700
    k = 10
    d = 15
    # 规则化参数
    lu = 10 ** -8
    lv = 10 ** -8
    for s1 in range(1):
        print('This is the ' + str(s1 + 1) + 'iteration!')
        filename = f'D:\V{p}'
        filename1 = f'D:\\U{p}'
        # save(filename1, U)
        for it in range(k):
            # 初始化U,V的偏导矩阵
            print('The ' + str(it) + ' iteration!')
            common_function.show_time()
            # dV = np.zeros((m, d), float16)
            rt = 1 / (it + 1) / (k ** 2)
            dB = np.zeros((q, d))
            dU = np.zeros((n, d))
            sum_N = np.zeros((q, d))
            sum1 = 0
            i = 0
            while i < n:
                dV = np.zeros((m, d))
                N = np.random.laplace(0, 2 * 10 * (15 ** 0.5) / eta, (m, d))
                while i < n:
                    if r[sum1] != i:
                        i = i + 1
                        break
                    j = c[sum1]
                    T = np.dot(U[i], V[j].T)
                    dV[j] = -2 * U[i] * (ratings[sum1] - T)
                    dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
                    sum1 += 1
                x = np.dot(D, dV + N)
                y = np.dot(D, N)
                sum_N += y
                dB += x
            dB = (dB - sum_N) / sum
            dU /= sum
            U = U - rt * (dU + 2 * lu * U)
            V = V - rt * (np.dot(D3, dB) + 2 * lv * V)
            common_function.show_time()
        print(V)
        print('Get V!')
        np.save(filename, V)
        np.save(filename1, U)
Example #4
0
def get_items(r, c, ratings, m, n, sum11, k, index, eta):
    index = index + "iR//"
    sum_ratings = len(ratings)
    print('计算相关物品编号...')
    cf.show_time()
    eta_k = eta / k
    pr = math.exp(eta_k) / (math.exp(eta_k) + 1)
    sum1 = 0
    i = 0
    # 首先选择k个用户相关物品:1若相关物品大于k,则随机从中选k个;
    # 2若相关物品小于k,则不足的数量由非相关物品编号替换
    user_list = []
    other_list = []
    sum_list = []
    user_array = np.zeros((n, k))
    for number_i in range(m):
        sum_list.append(number_i)
    other_list = sum_list[:]
    while sum1 < sum_ratings:
        j = c[sum1]
        user_list.append(j)
        other_list.remove(j)
        sum2 = sum1 + 1
        if sum2 < sum_ratings:
            try:
                test = r[sum2]
            except Exception as er:
                print(er, test)
                break
            if r[sum2] != i:
                user_list_len = len(user_list)
                user_list_select = []
                if user_list_len > k:
                    user_list = sample_list(user_list, k)
                user_list_len = len(user_list)
                for user_list_number in range(user_list_len):
                    p = np.random.random()
                    if p > pr or p == pr:
                        user_list_select.append(user_list[user_list_number])
                user_list_len = len(user_list_select)
                if user_list_len < k:
                    t = k - user_list_len
                    other_list_select = sample_list(other_list, t)
                user_list_select += other_list_select
                user_list_len = len(user_list_select)
                if user_list_len > k:
                    user_list_select = sample_list(user_list_select, k)
                # print(len(user_list_select))
                # print(i)
                user_array[i] = user_list_select[:]
                user_list = []
                other_list = sum_list[:]
                i += 1
        sum1 += 1
    print(f'完成物品编号选择!! {sum11}')
    cf.show_time()
    np.save(index + f'array_list{sum11}', user_array)
    return user_array
Example #5
0
def d_book1(n_number, m_number):
    n_a = np.load('E:\\book\\n.npy')
    m_a = np.load('E:\\book\\m.npy')
    r_a = np.load('E:\\book\\r.npy')
    t = len(n_a)
    m_number = 26509
    cf.show_time()
    data = np.zeros((n_number, m_number))
    for i in range(t):
        s_t = int(n_a[i])
        l_t = int(m_a[i])
        data[s_t][l_t] = r_a[i]
    print('get new dataset')
    cf.show_time()
    n_a = []
    m_a = []
    r_a = []
    for i in range(n_number):
        for j in range(m_number):
            ratings_s = data[i][j]
            if ratings_s != 0:
                n_a.append(i)
                m_a.append(j)
                r_a.append(ratings_s)
        print(i)
    print('get the order list')
    cf.show_time()
    m_adjust = []
    m_adjust.append(m_a[0])
    for i in range(len(m_a)):
        if m_a[i] not in m_adjust:
            m_adjust.append(m_a[i])
    np.save('E:\\book\\m_adjust', m_adjust)
    print('Get new m order')
    cf.show_time()
    for i in range(len(m_a)):
        for j in range(len(m_adjust)):
            if m_a[i] == m_adjust[j]:
                m_a[i] = j
                print(j)
                break
    cf.show_time()
    print('order the m')
    n_adjust = [0]
    ss = 0
    for i in range(len(n_a) - 1):
        j = i + 1
        if n_a[j] == n_a[i]:
            n_adjust.append(ss)
        else:
            ss += 1
            n_adjust.append(ss)

    print('order the n')
    np.save('E:\\book\\n', n_a)
    np.save('E:\\book\\m', m_a)
    np.save('E:\\book\\r', r_a)
Example #6
0
def machine_learning(sum11, U, V, r, c, ratings, m, n, d, lu, lv, k, sum, D,
                     D3):
    r = np.load('D:\Labor\\n.npy')
    c = np.load('D:\Labor\m.npy')
    ratings = np.load('D:\Labor\\r.npy')
    D = np.load('D:\Labor\D.npy')
    D3 = np.load('D:\Labor\D3.npy')
    m = 131262
    # n = 138493
    n = 138493
    d = 15
    lu = 10**-8
    lv = 10**-8
    k = 10
    sum = 20000263
    n_number = 1000
    # U = load("D:\\U8.npy")
    # print(U[:3], V[:3])
    # V = load('D:\V8.npy')
    for it in range(k):
        rt = 1 / (it + 1)
        print(str(it) + ' iterations!')
        common_function.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))

        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er)
                    break
                if r[sum1] != i:
                    i += 1
                    dB = dB + dV
                    # laplace_n = np.random.laplace(0, 10 * 15 / sum11, (m, d))
                    dV = np.zeros((m, d), float16)
            else:
                dB = dB + dV
        laplace_n = np.random.laplace(0, 10 * 10 / (20 - sum11 * 2), (m, d))
        dV = dB / n + laplace_n
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        common_function.show_time()
    print('\n' + f'I have done it! {sum11}')
    save(f'D:\\U7_{sum11}', U)
    save(f'D:\V7_{sum11}', V)
Example #7
0
def machine_learning(list_in_order, sum11, U, V):
    r = np.load('E:\\book\\n.npy')
    c = np.load('E:\\book\m.npy')
    ratings = np.load('E:\\book\\r.npy')
    # D = np.load('E:\book\D.npy')
    # D3 = np.load('E:\book\D3.npy')
    length_list = len(list_in_order)
    print('length_list', length_list)
    m = 131262
    # n = 138493
    n = 138493
    d = 15
    lu = 10**-8
    lv = 10**-8
    k = 10
    sum_set_number = 20000263
    # U = load("E:\\U8.npy")
    # print(U[:3], V[:3])
    # V = load('E:\V8.npy')
    for it in range(k):
        rt = 1 / (it + 1)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))

        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum_set_number:
            j = c[sum1]
            if c[sum1] in list_in_order[:]:
                T = np.dot(U[i], V[j].T)
                dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum_set_number:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    dB = dB + dV
                    dV = np.zeros((m, d))
            else:
                dB = dB + dV
        dV = dB / n
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\U8_{sum11}', U)
    np.save(f'E:\V8_{sum11}', V)
def Hua(r, c, ratings, lu, lv, sub_index, U, V, eta, m, n, d, index, k):
    # lu = 10 ** -8
    # lv = 10 ** -8
    # k = 10
    """
    U = np.random.rand(n, d)
    V = np.random.rand(m, d)
    np.save(index + 'u_4', U)
    np.save(index + 'v_4', V)
    U = np.load(index + 'u_4.npy')
    V = np.load(index + 'v_4.npy')
    """
    sum_ratings = len(r)
    index = index + "hua\\"
    # k = 1
    # rt = (2 ** -5)
    for it in range(k):
        # rt = 1 / (it + 1)
        rt_u = 1 / (it + 1)
        rt_v = 1 / (it + 1)
        # rt_u = (2 ** -5)
        # rt_v = rt_u
        print(str(it) + ' iterations!')
        cf.show_time()
        dU = np.zeros((n, d))
        dV = np.zeros((m, d))
        sum1 = 0
        i = 0
        while sum1 < sum_ratings:
            j = int(c[sum1])
            T = np.dot(U[i], V[j].T)
            v_grant = -2 * U[i] * (ratings[sum1] - T)
            dV[j] += v_grant
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            click = sum1 + 1
            if click < sum_ratings:
                try:
                    test = r[click]
                except Exception as er:
                    print(er, test)
                    break
                if r[click] != i:
                    # dV = np.zeros((m, d))
                    i += 1
            sum1 += 1
        dV = dV + np.random.laplace(0, 10 * (d**0.5) / eta,
                                    (m, d)) * 200 * (4 / 3)
        dV = dV / n
        # dV = dV + np.random.laplace(0, 2 / eta, (m, d))
        dU /= n
        U = U - rt_u * (dU + 2 * lu * U)
        V = V - rt_v * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sub_index} Hua')
    np.save(index + f'U_4{sub_index}', U)
    np.save(index + f'V_4{sub_index}', V)
def getTopK(u, v, n, index):
    cf.show_time()
    user_top_items = np.zeros((n, 10))
    for i in range(n):
        user_score_0 = np.dot(u[i], v.T)
        list_0 = np.argsort(-user_score_0)
        user_top_items[i] = list_0[:10]
    np.save(index + 'user_top_items', user_top_items)
    cf.show_time()
    return user_top_items
Example #10
0
def machine_learning_LDP(sum11, U, V):
    r = np.load('E:\book\\n.npy')
    c = np.load('E:\book\m.npy')
    ratings = np.load('E:\book\\r.npy')
    # D = np.load('E:\book\D.npy')
    # D3 = np.load('E:\book\D3.npy')
    m = 131262
    n = 138493
    d = 15
    lu = 10**-8
    lv = 10**-8
    k = 10
    sum = 20000263
    n_number = 1000
    print('n_number', n_number)
    # U = load("E:\\U8.npy")
    # print(U[:3], V[:3])
    # V = load('E:\V8.npy')
    for it in range(k):
        rt = 1 / (it + 1)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))
        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    dB = dB + dV
                    # laplace_n = np.random.laplace(0, 10 * 15 / sum11, (m, d))
                    dV = np.zeros((m, d))
            else:
                dB = dB + dV
        dV = dB / n
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\U9_{sum11}', U)
    np.save(f'E:\V9_{sum11}', V)
Example #11
0
def get_frency_mf(sum11, U, V):
    r = np.load('D:\Labor\\n.npy')
    c = np.load('D:\Labor\m.npy')
    ratings = np.load('D:\Labor\\r.npy')
    m = 131262
    order_list = np.load('D:\RR_order_list.npy')
    # n = 138493
    n = 138493
    d = 15
    lu = 10 ** -8
    lv = 10 ** -8
    k = 10
    sum = 20000263
    n_number = 1000
    # U = load("D:\\U8.npy")
    # print(U[:3], V[:3])
    # V = load('D:\V8.npy')
    for it in range(k):
        rt = 1 / (it + 1)
        print(str(it) + '次迭代!')
        common_function.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))
        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    dB = dB + dV
                    dV = np.zeros((m, d))
            else:
                dB = dB + dV
        dV = dB / n
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        common_function.show_time()
    print('\n' + 'I have done it!')
    np.save(f'D:\\U{sum11}', U)
    np.save(f'D:\V{sum11}', V)
Example #12
0
def f_score(user_len, user_top_items, u1, v1):
    cf.show_time()
    f_score_sum = 0
    for i in range(user_len):
        user_score_1 = np.dot(u1[i], v1.T)
        list_1 = np.argsort(-user_score_1)
        temp_count = 0
        for j in range(10):
            if list_1[j] in user_top_items[i]:
                temp_count += 1
        f_score_sum += temp_count / 10
    f_score_final = f_score_sum / user_len
    print(f_score_final)
    cf.show_time()
    return f_score_final
Example #13
0
def machine_learning(m, n, d, sum11, U, V, k):
    r = np.load('E:\\movielens\\n.npy')
    c = np.load('E:\\movielens\\m.npy')
    # c = np.load('E:\\movielens\column_list.npy')
    ratings = np.load('E:\\movielens\\r.npy')
    sum_ratings = len(ratings)
    lu = 10**-8
    lv = 10**-8
    # k = 10
    # k = 1
    for it in range(k):
        rt = 1 / (it + 1)
        # 验证实验
        # rt = 1 / (it+1) / (k ** 2)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))
        dV = np.zeros((m, d))
        sum1 = 0
        i = 0
        while sum1 < sum_ratings:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum2 = sum1 + 1
            if sum2 < sum_ratings:
                try:
                    test = r[sum2]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum2] != i:
                    dB = dB + dV
                    dV = np.zeros((m, d))
                    i += 1
            else:
                dB = dB + dV
            sum1 += 1
        dV = dB / n
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\movielens\\U_0{sum11}', U)
    np.save(f'E:\\movielens\\V_0{sum11}', V)
Example #14
0
def zh_mf_without_third_part(sum11, U, V, ratings, tipss):
    m = np.alen(ratings[0])
    # n = 138493
    n = np.alen(ratings)
    d = 15
    lu = 10 ** -8
    lv = 10 ** -8
    k = 10
    if tipss == 0 or tipss == 1:
        s = np.load('D:\RR_order_list.npy')
    # print(s)
    # can = 15000 * (15 ** 0.5)
    # n_number = 1000
    # rr_order_list = load('D:\RR_order_list.npy')
    # lens = len(rr_order_list)
    # U = load("D:\\U8.npy")
    # print(U[:3], V[:3])
    # V = load('D:\V8.npy')
    for it in range(1):
        rt = 1 / (it + 1)
        print(str(it) + '次迭代!')
        common_function.show_time()
        dU = np.zeros((n, d))
        dV = np.zeros((m, d))
        for i in range(n):
            if tipss == 3 or tipss == 2:
                s = np.random.randint(0, m, 5000)
            if tipss == 1 or tipss == 3:
                laplace_noisy = np.random.laplace(0, 10 * 15 * 5000 / (0.2 * (2 * tipss + 1)), (5000, d))
                for number_tipsss in range(5000):
                    dV[int(s[number_tipsss])] += laplace_noisy[number_tipsss]
            for o in range(5000):
                j = int(s[o])
                if ratings[i][j] != 0:
                    T = np.dot(U[i], V[j].T)
                    dV[j] = dV[j] + (-2) * U[i] * (ratings[i][j] - T)
                    dU[i] = dU[i] + (-2) * V[j] * (ratings[i][j] - T)

        dV /= n
        if tipss == 0 or tipss == 2:
            laplace_noisy = np.zeros((5000, d))
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        common_function.show_time()
    print('\n' + 'I have done it!')
    np.save(f'D:\\U{tipss}' + f'_{sum11}', U)
    np.save(f'D:\V{tipss}' + f'_{sum11}', V)
Example #15
0
def machine_learning_LDP_NJ(sum11, U, V, eta, m, n, sum, d):
    r = np.load('E:\\movielens\\n.npy')
    c = np.load('E:\\movielens\\m.npy')
    # c = np.load('E:\\movielens\column_list.npy')
    ratings = np.load('E:\\movielens\\r.npy')
    lu = 10**-8
    lv = 10**-8
    k = 10
    # k = 1
    for it in range(k):
        # rt = 1 / (it + 1)
        rt = 1 / (it + 1) / (k**2)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))
        dV = np.zeros((m, d))
        sum1 = 0
        i = 0
        while sum1 < sum:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)

            dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    dB = dB + dV
                    dV = np.zeros((m, d))
            else:
                dB = dB + dV
        dV = dB / n
        dV = dV + np.random.laplace(0, 10 * (d**0.5) / eta, (m, d))
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\movielens\\U_5{sum11}', U)
    np.save(f'E:\\movielens\\V_5{sum11}', V)
Example #16
0
def machine_learning(m, n, sum, d, sum11, U, V, k, top_k):
    r = np.load('E:\\book\\n.npy')
    c = np.load('E:\\book\\m.npy')
    # c = np.load('E:\\book\column_list.npy')
    ratings = np.load('E:\\book\\r.npy')
    lu = 10**-8
    lv = 10**-8
    # k = 10
    # k = 1
    for it in range(k):
        rt = 1 / (it + 1)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))
        dV = np.zeros((m, d))
        sum1 = 0
        i = 0
        while sum1 < sum and i < top_k:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)

            dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum and i < top_k:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    dB = dB + dV
                    dV = np.zeros((m, d))
            else:
                dB = dB + dV
        dV = dB / n
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\book\\U1000_11{sum11}', U)
    np.save(f'E:\\book\\V1000_11{sum11}', V)
Example #17
0
def zh_mf(sum11, U, V, ratings, tipss):
    m = np.alen(ratings[0])
    # n = 138493
    n = np.alen(ratings)
    V0 = np.load('D:\V0.npy')
    d = 15
    lu = 10 ** -8
    lv = 10 ** -8
    k = 10

    if tipss == 0 or tipss == 1:
        s = np.load('D:\RR_order_list.npy')
    for it in range(k):
        rt = 1 / (it + 1)
        print(str(it) + '次迭代!')
        common_function.show_time()
        dU = np.zeros((n, d))
        dV = np.zeros((m, d))
        for i in range(n):
            if tipss == 3 or tipss == 2:
                s = np.random.randint(0, m, 5000)
            for o in range(5000):
                j = int(s[o])
                if ratings[i][j] != 0:
                    T = np.dot(U[i], V[j].T)
                    dV[j] = dV[j] + (-2) * U[i] * (ratings[i][j] - T) / n
                    dU[i] = dU[i] + (-2) * V[j] * (ratings[i][j] - T)
            if tipss == 1 or tipss == 3:
                laplace_noisy = np.random.laplace(0, 10 * 15 * 5000 / (0.2 * (2 * tipss + 1)), (5000, d))
                for number_tipsss in range(5000):
                    dV[int(s[number_tipsss])] += laplace_noisy[number_tipsss] / n
        # dV /= n
        if tipss == 0 or tipss == 2:
            laplace_noisy = np.zeros((5000, d))
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        common_function.show_time()
        print(np.linalg.norm(V - V0, np.inf))
    print('\n' + 'I have done it!')
    np.save(f'D:\\U{tipss}' + f'_{sum11}', U)
    np.save(f'D:\V{tipss}' + f'_{sum11}', V)
Example #18
0
def get_rmse(filename_U, filename_V):
    common_function.show_time()
    U = np.load(filename_U)
    V = np.load(filename_V)
    r = np.load('E:\Labor\\n.npy')
    c = np.load('E:\Labor\m.npy')
    ratings = np.load('E:\Labor\\r.npy')
    n = len(r)
    rmse = 0
    i = 0
    for m in range(n):
        if r[m] >= 138492:
            break
        i = r[m]
        j = c[m]
        rmse += ((ratings[m] - np.dot(U[i], V[j].T)) ** 2)
    rmse = (rmse / n) ** 0.5
    print(rmse)
    common_function.show_time()
    return rmse
Example #19
0
def machine_learning(r, c, ratings, m, n, d, sum11, U, V, k, index):
    sum_ratings = len(ratings)
    lu = 10**-8
    lv = 10**-8
    # k = 10
    # k = 1
    for it in range(k):
        rt_u = 1 / (it + 1)
        rt_v = 1 / (it + 1)
        # rt_v = 1 / (it + 1) / (k ** 2)
        # 验证实验
        # rt = 1 / (it+1) / (k ** 2)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dV = np.zeros((m, d))
        sum1 = 0
        i = 0
        while sum1 < sum_ratings:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            dV[j] += -2 * U[i] * (ratings[sum1] - T)
            dU[i] += (-2) * V[j] * (ratings[sum1] - T)
            sum2 = sum1 + 1
            if sum2 < sum_ratings:
                try:
                    test = r[sum2]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum2] != i:
                    i += 1
            sum1 += 1
        dV = dV / n
        dU /= n
        U = U - rt_u * (dU + 2 * lu * U)
        V = V - rt_v * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(index + f'U_0{sum11}', U)
    np.save(index + f'V_0{sum11}', V)
Example #20
0
def f_score(user_len, user_top_items, u1, v1, list_top_k):
    cf.show_time()
    f_score_sum = 0
    # user_top_items = np.zeros((user_len, 10))
    for i in range(user_len):
        # user_score_0 = np.dot(u[i], v.T)
        user_score_1 = np.dot(u1[i], v1.T)
        # list_0 = np.argsort(-user_score_0)
        list_1 = np.argsort(-user_score_1)
        # list_0_top10 = list_0[:10]
        # user_top_items[i] = list_0[:10]
        temp_count = 0
        for j in range(10):
            if list_1[j] in user_top_items[i]:
                # if list_1[j] in list_top_k:
                temp_count += 1
        f_score_sum += temp_count / 10
    f_score_final = f_score_sum / user_len
    # np.save('E:\\book\\user_top_items', user_top_items)
    print(f_score_final)
    cf.show_time()
    return f_score_final
Example #21
0
            else:
                dB = dB + dV
        dV = dB / n
        dV = dV + np.random.laplace(0, 10 * (d**0.5) / eta, (m, d))
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\movielens\\U_5{sum11}', U)
    np.save(f'E:\\movielens\\V_5{sum11}', V)


if __name__ == '__main__':
    cf.show_title()
    cf.show_time()
    top_k = 138493
    k = 10
    # eta = 1
    experiment = 1
    eta_list = [0.05, 0.1, 0.2, 0.4, 0.8, 1.6]
    eta = eta_list[3]

    U = np.load('E:\\movielens\\U.npy')
    V = np.load('E:\\movielens\V.npy')

    # machine_learning(0, U, V, top_k)
    # machine_learning_LDP_part(0, U, V, top_k, eta, k)
    # machine_learning_LDP(experiment, U, V, top_k, eta)
    # machine_learning_LDP_hau(0, U, V, top_k, eta)
    # machine_learning_LDP_NJ(1, U, V, top_k, eta)
Example #22
0
def get_granted(r, c, ratings, m, n, d, sum11, U, V, k, index, eta, rt,
                sum111):
    index = index + "iR//"
    # user_array = np.load(index + f"array_list{sum11}.npy")
    user_array = np.load(index + f"array_list0.npy")
    sum_ratings = len(ratings)
    lu = 10**-8
    lv = 10**-8
    t_sum = k * d * ((math.exp(eta / k) + 1) / (math.exp(eta / k) - 1))
    t_sum_1 = math.exp(eta / k)
    # 考虑迭代次数的影响
    # k = 10
    # k = 1
    for it in range(k):
        # 考虑不同的学习速率的影响
        rt_u = 1 / (it + 1) / rt
        rt_v = 1 / (it + 1) / rt
        # rt_v = 1 / (it + 1) / (k ** 2)
        # 验证实验
        # rt = 1 / (it+1) / (k ** 2)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dV = np.zeros((m, d))
        sum1 = 0
        i = 0
        item_number = np.random.randint(0, 10)
        item_index = int(user_array[i][item_number])
        click = 0
        while sum1 < sum_ratings:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            if j == item_index:
                click = 1
                granted_vetor = -2 * U[i] * (ratings[sum1] - T)
                item_number_g = np.random.randint(0, d)
                granted_number = granted_vetor[item_number_g]
                # 若选择的物品为相关物品,则进行如下梯度值计算
                t = granted_number
                if t > 1:
                    t = 1
                elif t < -1:
                    t = -1
                T = (t * (t_sum_1 - 1) + t_sum_1 + 1) / (2 * (t_sum_1 + 1))
                random_t = np.random.random()
                if random_t <= T:
                    dV[j][item_number_g] += t_sum
                else:
                    dV[j][item_number_g] -= t_sum
            # 遍历所有评分,计算并更新个人侧面向量
            dU[i] += (-2) * V[j] * (ratings[sum1] - T)
            sum2 = sum1 + 1
            if sum2 < sum_ratings:
                try:
                    test = r[sum2]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum2] != i:
                    # 若选择的物品为不相关物品,则进行如下梯度值计算
                    if click == 0:
                        item_number_g = np.random.randint(0, d)
                        T = 1 / 2
                        random_t = np.random.random()
                        if random_t <= T:
                            dV[item_index][item_number_g] += t_sum
                        else:
                            dV[item_index][item_number_g] -= t_sum
                    # 选择下次的物品编号,更新标记值
                    item_number = np.random.randint(0, 10)
                    item_index = int(user_array[i][item_number])
                    click = 0
                    # 更新用户编号
                    i += 1
            sum1 += 1
        dV = dV / n
        dU /= n
        # 一次迭代结束,更新侧面矩阵
        U = U - rt_u * (dU + 2 * lu * U)
        V = V - rt_v * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    # 进行k次迭代后,将侧面矩阵写入磁盘
    # 0为学习率为1/i,1为学习率1/k/i,2为学习率1/i/k*eta
    np.save(index + f'U_{sum111}{sum11}', U)
    np.save(index + f'V_{sum111}{sum11}', V)
Example #23
0
def ML_LDP_part(m, n, d, sum11, U, V, eta, k, c_flag, l_array, r_q):
    r = np.load('E:\\limbi\\n.npy')
    c = np.load('E:\\limbi\\m.npy')
    ratings = np.load('E:\\limbi\\r.npy')
    D = np.load('E:\\limbi\\Dl1.npy')
    D3 = np.load('E:\\limbi\\Dl3.npy')
    n, l_items = np.shape(l_array)
    q = r_q
    lu = 10**-8
    lv = 10**-8
    # k = 10
    sum_ratings = len(r)
    eta /= d
    t_sum = q * ((math.exp(eta / k) + 1) / (math.exp(eta / k) - 1))
    t_s = math.exp(eta / k)
    print(l_array[:10][:10], c_flag[:10])
    for it in range(k):
        # rt = 1 / (it + 1) / (k ** 2)
        # rt = 1 / (it + 1)
        rt = 1 / (it + 1)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))
        dl = np.zeros((l_items, d))
        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum_ratings:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            if c_flag[sum1] == 1:
                dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum2 = sum1 + 1
            if sum2 < sum_ratings:
                try:
                    test = r[sum2]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum2] != i:
                    for o in range(l_items):
                        tts = int(l_array[i][o])
                        dl[o] = dV[tts]
                    x = np.dot(D, dl)
                    for ls in range(d):
                        s = np.random.randint(0, q)
                        t = x[s][ls]
                        if t > 1:
                            t = 1
                        elif t < -1:
                            t = -1
                        T = (t * (t_s - 1) + t_s + 1) / (2 * (t_s + 1))
                        random_t = np.random.random()
                        if random_t <= T:
                            x[s][ls] = t_sum
                        else:
                            x[s][ls] = -t_sum
                    x_z = np.dot(D3, x)
                    for o in range(l_items):
                        tts = int(l_array[i][o])
                        dB[tts] += x_z[o]
                    dV = np.zeros((m, d))
                    i += 1
            else:
                for o in range(l_items):
                    tts = int(l_array[i][o])
                    dl[o] = dV[tts]
                x = np.dot(D, dl)
                for ls in range(d):
                    s = np.random.randint(0, q)
                    t = x[s][ls]
                    if t > 1:
                        t = 1
                    elif t < -1:
                        t = -1
                    T = (t * (t_s - 1) + t_s + 1) / (2 * (t_s + 1))
                    random_t = np.random.random()
                    if random_t <= T:
                        x[s][ls] = t_sum
                    else:
                        x[s][ls] = -t_sum
                x_z = np.dot(D3, x)
                for o in range(l_items):
                    tts = int(l_array[i][o])
                    dB[tts] += x_z[o]
                dV = np.zeros((m, d))
                i += 1
            sum1 += 1
        dV = dB / n
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\limbi\\U_5{sum11}', U)
    np.save(f'E:\\limbi\\V_5{sum11}', V)
Example #24
0
def zh_select_GD_DR(n, m, r, c, ratings, d, sum11, U, V, eta, k, index, frency,
                    flag, flag_v, delt):
    sum_ratings = len(ratings)
    lu = 10**-8
    lv = 10**-8
    factor = eta * math.sqrt(n) / ((delt * d * k) * math.sqrt(2 * d))
    # k = 10
    # k = 1
    for it in range(k):
        rt_u = 1 / (it + 1)
        rt_v = 1 / (it + 1) * factor
        # rt_v = 1 / (it + 1) / (k ** 2)
        # 验证实验
        # rt = 1 / (it+1) / (k ** 2)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dV = np.zeros((m, d))
        sum1 = 0
        i = 0
        f = 0
        # factor = eta / ((delt * d * k) * math.sqrt(2*d))
        while sum1 < sum_ratings:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            if flag[sum1] == 1 and f == 0:
                # factor_temp = factor / math.sqrt(frency[i])
                dV[j] += np.random.laplace(0, delt * d * k / eta,
                                           d) - 2 * U[i] * (ratings[sum1] - T)
                # if factor_temp < 1:
                #     dV[j] += (np.random.laplace(0, 2*5*d*k/eta, d) - 2 * U[i] * (ratings[sum1] - T)) * factor_temp
                # else:
                #     dV[j] += -2 * U[i] * (ratings[sum1] - T)
                f = 1
            dU[i] += (-2) * V[j] * (ratings[sum1] - T)
            sum2 = sum1 + 1
            if sum2 < sum_ratings:
                try:
                    test = r[sum2]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum2] != i:
                    ss = int(flag_v[i])
                    if f == 0:
                        # factor_temp = factor / math.sqrt(frency[i])
                        dV[ss] += np.random.laplace(0, delt * d * k / eta, d)
                        # if factor_temp < 1:
                        #     dV[ss] += (np.random.laplace(0, 2*5*d*k/eta, d)) * factor_temp
                        # else:
                        #     dV[ss] += np.random.laplace(0, 2*5*d*k/eta, d)
                    # 可以考虑使用Nuyen提出的算法,单个加噪,另外可以尝试看
                    f = 0
                    i += 1
            sum1 += 1
        dV = dV / n
        dU /= n
        U = U - rt_u * (dU + 2 * lu * U)
        V = V - rt_v * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(index + f'U_7{sum11}', U)
    np.save(index + f'V_7{sum11}', V)
Example #25
0
def machine_learning_LDP_part(m, n, sum, d, sum11, U, V, top_k_user, eta, k):
    r = np.load('E:\\movielens\\n.npy')
    # c = np.load('E:\\movielens\m.npy')
    c = np.load('E:\\movielens\\m_adjust.npy')
    ratings = np.load('E:\\movielens\\r.npy')
    list_in_order4 = np.load('E:\\movielens\\list_in_order4.npy')
    D4 = np.load('E:\\movielens\\D4.npy')
    D5 = np.load('E:\\movielens\\D5.npy')
    m_d = 5000
    # q = 2700
    q = 500
    lu = 10**-8
    lv = 10**-8

    t_sum = q * d * ((math.exp(eta / k) + 1) / (math.exp(eta / k) - 1))
    for it in range(k):
        rt = 1 / (it + 1) / (k**2)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((q, d))
        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum and i < top_k_user:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            if j >= 0:
                dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum and i < top_k_user:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    dv_x = np.zeros((m_d, d))
                    for o in range(m_d):
                        dv_x[o] = dV[int(list_in_order4[o])]
                    x = np.dot(D4, dv_x)
                    s = np.random.randint(0, q)
                    l = np.random.randint(0, d)
                    if x[s][l] > 0:
                        x[s][l] = t_sum
                    else:
                        x[s][l] = -t_sum
                    dB = dB + x
                    dV = np.zeros((m, d))
            else:
                dB = dB + x
        dV = np.zeros((m, d))
        dv_x = dB / n
        dv_xt = np.dot(D5, dv_x)
        for o in range(m_d):
            dV[int(list_in_order4[o])] = dv_xt[o]
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\movielens\\U_3{sum11}', U)
    np.save(f'E:\\movielens\\V_3{sum11}', V)
Example #26
0
def ML_LDP_part_prove(m, n, sum, d, sum11, U, V, top_k_user, eta, k):
    r = np.load('E:\\book\\n.npy')
    c = np.load('E:\\book\m.npy')
    c_flag = np.load('E:\\book\\m_adjust.npy')
    ratings = np.load('E:\\book\\r.npy')
    list_in_order4 = np.load('E:\\book\\list_in_order4.npy')
    D4 = np.load('E:\\book\\D4.npy')
    D5 = np.load('E:\\book\\D5.npy')
    m_d = 5000
    # q = 2700
    q = 500
    lu = 10**-8
    lv = 10**-8

    for it in range(k):
        # rt = 1 / (it + 1) / (k ** 2)
        rt = 1 / (it + 1) / k
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((q, d))
        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum and i < top_k_user:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            if c_flag[sum1] >= 0:
                dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum and i < top_k_user:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    dv_x = np.zeros((m_d, d))
                    for o in range(m_d):
                        dv_x[o] = dV[int(list_in_order4[o])]
                    x = np.dot(D4, dv_x)
                    s = np.random.randint(0, q)
                    x[s] += np.random.laplace(0, 2 * d * k / eta, d)
                    dB = dB + x
                    dV = np.zeros((m, d))
            else:
                dB = dB + x
        dV = np.zeros((m, d))
        dv_x = dB / n
        dv_xt = np.dot(D5, dv_x)
        for o in range(m_d):
            dV[int(list_in_order4[o])] = dv_xt[o]
        dU /= n
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\book\\U1000_7{sum11}', U)
    np.save(f'E:\\book\\V1000_7{sum11}', V)
Example #27
0
def machine_learning_LDP_hau(sum11, U, V, eta, m, n, sum, d):
    r = np.load('E:\\movielens\\n.npy')
    c = np.load('E:\\movielens\\m.npy')
    ratings = np.load('E:\\movielens\\r.npy')
    lu = 10**-8
    lv = 10**-8
    # k = 10
    k = 10
    # eta = 0.1
    t_sum = m * d * ((math.exp(eta / k) + 1) / (math.exp(eta / k) - 1))
    t_sum_1 = math.exp(eta / k)
    for it in range(k):
        rt = 1 / (it + 1) / (k**2)
        # rt = 1 / (it + 1)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((m, d))
        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            # if j >= 0:
            dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    s = np.random.randint(0, m)
                    ls = np.random.randint(0, d)
                    t = dV[s][ls]
                    if t > 1:
                        t = 1
                    elif t < -1:
                        t = -1
                    T = (t * (t_sum_1 - 1) + t_sum_1 + 1) / (2 * (t_sum_1 + 1))
                    random_t = np.random.random()
                    if random_t <= T:
                        dV[s][ls] = t_sum
                    else:
                        dV[s][ls] = -t_sum
                    dB = dB + dV
                    dV = np.zeros((m, d))
            else:
                dB = dB + dV
        dV = dB / n
        dU /= n
        # dV_t = np.dot(D, dV)
        # dV = np.dot(D3, dV_t)
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (dV + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\movielens\\U_4{sum11}', U)
    np.save(f'E:\\movielens\\V_4{sum11}', V)
Example #28
0
def d_limbi(m_number, n_number):
    '''
    m = np.load('E:\\limbi\\m.npy')
    n = np.load('E:\\limbi\\n.npy')
    r = np.load('E:\\limbi\\r.npy')
    m_array = np.zeros((3, len(m)))
    m_array[0] = n[:]
    m_array[1] = m[:]
    m_array[2] = r[:]
    m_list = np.zeros((1, m_number))
    for i in range(len(m)):
        j = m[i]
        m_list[0][j] += 1
    long_list = []
    for i in range(m_number):
        if m_list[0][i] > 140:
            long_list.append(i)
    print('get score is over 140')
    t = len(m)
    m_a = []
    n_a = []
    r_a = []
    for i in range(t):
        if m[i] in long_list:
            m_a.append(m[i])
            n_a.append(n[i])
            r_a.append(r[i])
    print('get the new set')
    np.save('E:\\limbi\\n', n_a)
    np.save('E:\\limbi\\m', m_a)
    np.save('E:\\limbi\\r', r_a)
    '''
    # test = np.zeros((20, 30))
    # print(test)
    '''
    data = np.zeros((n_number, m_number), np.float16)
    n_a = np.load('E:\\limbi\\n.npy')
    m_a = np.load('E:\\limbi\\m.npy')
    r_a = np.load('E:\\limbi\\r.npy')
    t = len(n_a)
    for i in range(t):
        s_t = int(n_a[i])
        l_t = int(m_a[i])
        data[s_t][l_t] = r_a[i]
    print('set the old dateset')
    cf.show_time()
    n_a = []
    m_a = []
    r_a = []
    m_click = 0
    for i in range(m_number):
        s_t = 0
        for j in range(n_number):
            ratings_s = data[j][i]
            if ratings_s != 0:
                s_t += 1
                n_a.append(j)
                m_a.append(m_click)
                r_a.append(ratings_s)
        if s_t != 0:
            m_click += 1
            print(m_click)
    np.save('E:\\limbi\\n', n_a)
    np.save('E:\\limbi\\m', m_a)
    np.save('E:\\limbi\\r', r_a)
    print('order the dataset')
    '''
    n_a = np.load('E:\\limbi\\n.npy')
    m_a = np.load('E:\\limbi\\m.npy')
    r_a = np.load('E:\\limbi\\r.npy')
    t = len(n_a)
    m_number = 26509
    cf.show_time()
    data = np.zeros((n_number, m_number))
    for i in range(t):
        s_t = int(n_a[i])
        l_t = int(m_a[i])
        data[s_t][l_t] = r_a[i]
    print('get new dataset')
    cf.show_time()
    n_a = []
    m_a = []
    r_a = []
    for i in range(n_number):
        for j in range(m_number):
            ratings_s = data[i][j]
            if ratings_s != 0:
                n_a.append(i)
                m_a.append(j)
                r_a.append(ratings_s)
        print(i)
    print('get the order list')
    cf.show_time()
    '''
    m_adjust = []
    m_adjust.append(m_a[0])
    for i in range(len(m_a)):
        if m_a[i] not in m_adjust:
            m_adjust.append(m_a[i])
    np.save('E:\\limbi\\m_adjust', m_adjust)
    print('Get new m order')
    cf.show_time()
    for i in range(len(m_a)):
        for j in range(len(m_adjust)):
            if m_a[i] == m_adjust[j]:
                m_a[i] = j
                print(j)
                break
    cf.show_time()
    print('order the m')
    n_adjust = [0]
    ss = 0
    for i in range(len(n_a)-1):
        j = i + 1
        if n_a[j] == n_a[i]:
            n_adjust.append(ss)
        else:
            ss += 1
            n_adjust.append(ss)
    '''
    print('order the n')
    np.save('E:\\limbi\\n', n_a)
    np.save('E:\\limbi\\m', m_a)
    np.save('E:\\limbi\\r', r_a)
Example #29
0
def machine_learning_LDP(m, n, sum, d, sum11, U, V, top_k, eta):
    r = np.load('E:\\movielens\\n.npy')
    c = np.load('E:\\movielens\m.npy')
    ratings = np.load('E:\\movielens\\r.npy')
    D = np.load('E:\\movielens\D.npy')
    D3 = np.load('E:\\movielens\D3.npy')
    # m = 131262
    # n = 138493
    # d = 15
    q = 2700
    lu = 10**-8
    lv = 10**-8
    # k = 10
    k = 10
    # sum = 20000263
    # eta = 0.1
    t_sum = q * d * ((math.exp(eta / k) + 1) / (math.exp(eta / k) - 1))
    t_sum_1 = math.exp(eta / k)
    for it in range(k):
        rt = 1 / (it + 1) / (k**2)
        print(str(it) + '次迭代!')
        cf.show_time()
        dU = np.zeros((n, d))
        dB = np.zeros((q, d))
        sum1 = 0
        i = 0
        dV = np.zeros((m, d))
        while sum1 < sum and i < top_k:
            j = c[sum1]
            T = np.dot(U[i], V[j].T)
            # if j >= 0:
            dV[j] = -2 * U[i] * (ratings[sum1] - T)
            dU[i] = dU[i] + (-2) * V[j] * (ratings[sum1] - T)
            sum1 += 1
            if sum1 < sum and i < top_k:
                try:
                    test = r[sum1]
                except Exception as er:
                    print(er, test)
                    break
                if r[sum1] != i:
                    i += 1
                    x = np.dot(D, dV)
                    s = np.random.randint(0, q)
                    ls = np.random.randint(0, d)
                    t = x[s][ls]
                    if t > 1:
                        t = 1
                    elif t < -1:
                        t = -1
                    T = (t * (t_sum_1 - 1) + t_sum_1 + 1) / (2 * (t_sum_1 + 1))
                    random_t = np.random.random()
                    if random_t <= T:
                        x[s][ls] = t_sum
                    else:
                        x[s][ls] = -t_sum
                    dB = dB + x
                    dV = np.zeros((m, d))
            else:
                dB = dB + x
        dV = dB / n
        dU /= n
        # dV_t = np.dot(D, dV)
        # dV = np.dot(D3, dV_t)
        U = U - rt * (dU + 2 * lu * U)
        V = V - rt * (np.dot(D3, dV) + 2 * lv * V)
        cf.show_time()
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\movielens\\U_2{sum11}', U)
    np.save(f'E:\\movielens\\V_2{sum11}', V)
Example #30
0
def s_items(m, n, d, sum11, U, V, eta, k, l_i):
    r = np.load('E:\\limbi\\n.npy')
    c = np.load('E:\\limbi\\m.npy')
    t_sum = math.exp(eta / (2 * l_i))
    sum_ratings = len(r)
    cf.show_time()
    sum1 = 0
    user_items = []
    sum_items = []
    for ii in range(m):
        sum_items.append(ii)
    other_items = sum_items[:]
    s_i = []
    l_array = np.zeros((n, l_i))
    i = 0
    while sum1 < sum_ratings and i < n:
        j = c[sum1]
        user_items.append(j)
        other_items.remove(j)
        sum2 = sum1 + 1
        if sum2 < sum_ratings and i < n:
            try:
                test = r[sum1]
            except Exception as er:
                print(er, test)
                break
            if r[sum2] != i:
                s = len(user_items)
                if s >= l_i:
                    if s > l_i:
                        for o in range(s - l_i):
                            l_o = len(user_items)
                            rand_number = np.random.randint(0, l_o - 1)
                            del user_items[rand_number]
                else:
                    for o in range(l_i - s):
                        l_o = len(other_items)
                        tt = np.random.randint(0, l_o - 1)
                        user_items.append(other_items[tt])
                        del other_items[tt]
                for o in range(l_i):
                    rand_number = np.random.random()
                    if rand_number <= t_sum / (t_sum + 1):
                        s_i.append(user_items[o])
                # l_other = s_r(0, m-l_i-1, l_i-len(s_i))
                for o in range(l_i - len(s_i)):
                    l_o = len(other_items)
                    tt = np.random.randint(0, l_o - 1)
                    s_i.append(other_items[tt])
                    del other_items[tt]
                s_i.sort()
                l_array[i] = s_i
                i += 1
                other_items = sum_items[:]
                s_i = []
                user_items = []
        sum1 += 1
    cf.show_time()
    print(l_array[0])
    print('\n' + f'I have done it! {sum11}')
    np.save(f'E:\\limbi\\l_array{sum11}', l_array)