示例#1
0
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
示例#2
0
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
示例#3
0
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