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)
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')
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)
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
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)
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)
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
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)
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)
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
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)
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)
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)
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)
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)
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
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)
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
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)
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)
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)
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)
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)
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)
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)
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)
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)
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)