def cosseno_intersecao(matriz): similaridades = zeros((matriz.shape[0], matriz.shape[0])) for u in range(matriz.shape[0]): print("\rCalculando similaridades: ", ((u+1)*100)//matriz.shape[0], "%", end="") for v in range(u+1): cos = 0. iu = nonzero(matriz[u,:])[1] # índices dos itens avaliados pelo usúario u iv = nonzero(matriz[v,:])[1] # índices dos itens avaliados pelo usuário v intersecao = intersect1d(iu, iv) # índices das itens avaliados por u e v nu = matriz[u, iu].toarray()[0] # notas de u nv = matriz[v, iv].toarray()[0] # notas de v den = (soma(nu**2) * soma(nv**2))**.5 # considera todas as notas de u e todas as notas de v if len(intersecao) > 10: nu = matriz[u, intersecao].toarray()[0] # notas dos itens avaliados por u e v nv = matriz[v, intersecao].toarray()[0] # notas dos itens avaliados por v e u num = soma(nu * nv) if den > 0.: cos = num/den similaridades[u, v] = cos similaridades[v, u] = cos return similaridades
def meanSquaredDifference(matriz): similaridades = zeros((matriz.shape[0], matriz.shape[0])) for u in range(matriz.shape[0]): print("\rCalculando similaridades: ", ((u+1)*100)//matriz.shape[0], "%", end="") for v in range(u+1): msd = 0. iu = nonzero(matriz[u, :]) # índice dos itens avaliados por u iv = nonzero(matriz[v, :]) # índice dos itens avaliados por v nu = matriz[u, :] # notas de u nv = matriz[v, :] # notas de v intersecao = intersect1d(iu, iv) # índices da interseção if len(intersecao) > 0: nu = nu[intersecao] # notas de u de itens em comum com v nv = nv[intersecao] # notas de v de itens em comum com u num = len(intersecao) den = soma((nu - nv)**2) if den > 0.: msd = num/den similaridades[u, v] = msd similaridades[v, u] = msd return similaridades
def pearson(matriz): similaridades = zeros((matriz.shape[0], matriz.shape[0])) mg = media_matriz(matriz) for u in range(matriz.shape[0]): print("\rCalculando similaridades: ", ((u+1)*100)//matriz.shape[0], "%", end="") for v in range(u+1): pearson = 0. iu = nonzero(matriz[u, :])[1] # índice dos itens avaliados por u iv = nonzero(matriz[v, :])[1] # índice dos itens avaliados por v nu = matriz[u, :].toarray()[0] # notas de u nv = matriz[v, :].toarray()[0] # notas de v intersecao = intersect1d(iu, iv) # índice dos itens em comum if len(intersecao) > 10: nu = nu[intersecao] # notas de u de itens em comum com v nv = nv[intersecao] # notas de v de itens em comum com u # mu = soma(nu)/len(nu) # média de u # mv = soma(nv)/len(nv) # média de v mu = media_usuario(nu, mg) mv = media_usuario(nv, mg) num = soma((nu - mu) * (nv - mv)) den = (soma((nu - mu)**2) * soma((nv - mv)**2))**.5 if den > 0.: pearson = num/den similaridades[u, v] = pearson similaridades[v, u] = pearson return similaridades