相似度与距离计算python代码实现
- #定义几种距离计算函数
- #更高效的方式为把得分向量化之后使用scipy中定义的distance方法
- from math import sqrt
- def euclidean_dis(rating1, rating2): #欧式距离计算
- """计算2个打分序列间的欧式距离. 输入的rating1和rating2都是打分dict
- 格式为{'小时代4': 1.0, '疯狂动物城': 5.0}"""
- distance = 0
- commonRatings = False
- for key in rating1:
- if key in rating2:
- distance += (rating1[key] - rating2[key])^2
- commonRatings = True
- #两个打分序列之间有公共打分电影
- if commonRatings:
- return distance
- #无公共打分电影
- else:
- return -1
- def manhattan_dis(rating1, rating2): #曼哈顿距离计算
- """计算2个打分序列间的曼哈顿距离. 输入的rating1和rating2都是打分dict
- 格式为{'小时代4': 1.0, '疯狂动物城': 5.0}"""
- distance = 0
- commonRatings = False
- for key in rating1:
- if key in rating2:
- distance += abs(rating1[key] - rating2[key])
- commonRatings = True
- #两个打分序列之间有公共打分电影
- if commonRatings:
- return distance
- #无公共打分电影
- else:
- return -1
- def cos_dis(rating1, rating2): #余弦相似度计算
- """计算2个打分序列间的cos距离. 输入的rating1和rating2都是打分dict
- 格式为{'小时代4': 1.0, '疯狂动物城': 5.0}"""
- distance = 0
- dot_product_1 = 0
- dot_product_2 = 0
- commonRatings = False
- for score in rating1.values():
- dot_product_1 += score^2
- for score in rating2.values():
- dot_product_2 += score^2
- for key in rating1:
- if key in rating2:
- distance += rating1[key] * rating2[key]
- commonRatings = True
- #两个打分序列之间有公共打分电影
- if commonRatings:
- return 1-distance/sqrt(dot_product_1*dot_product_2)
- #无公共打分电影
- else:
- return -1
- def pearson_dis(rating1, rating2): #皮尔逊相似度计算
- """计算2个打分序列间的pearson距离. 输入的rating1和rating2都是打分dict
- 格式为{'小时代4': 1.0, '疯狂动物城': 5.0}"""
- sum_xy = 0
- sum_x = 0
- sum_y = 0
- sum_x2 = 0
- sum_y2 = 0
- n = 0
- for key in rating1:
- if key in rating2:
- n += 1
- x = rating1[key]
- y = rating2[key]
- sum_xy += x * y
- sum_x += x
- sum_y += y
- sum_x2 += pow(x, 2)
- sum_y2 += pow(y, 2)
- # now compute denominator
- denominator = sqrt(sum_x2 - pow(sum_x, 2) / n) * sqrt(sum_y2 - pow(sum_y, 2) / n)
- if denominator == 0:
- return 0
- else:
- return (sum_xy - (sum_x * sum_y) / n) / denominator
相似度与距离计算python代码实现的更多相关文章
- 计算Python代码运行时间长度方法
在代码中有时要计算某部分代码运行时间,便于分析. import time start = time.clock() run_function() end = time.clock() print st ...
- 皮尔逊相关系数的计算(python代码版)
from math import sqrt def multipl(a,b): sumofab=0.0 for i in range(len(a)): temp=a[i]*b[i] sumofab+= ...
- 余弦相似性计算及python代码实现
A:西米喜欢健身 B:超超不爱健身,喜欢打游戏 step1:分词 A:西米/喜欢/健身 B:超超/不/喜欢/健身,喜欢/打/游戏 step2:列出两个句子的并集 西米/喜欢/健身/超超/不/打/游戏 ...
- 10行Python代码计算汽车数量
当你还是个孩子坐车旅行的时候,你玩过数经过的汽车的数目的游戏吗? 在这篇文章中,我将教你如何使用10行Python代码构建自己的汽车计数程序. 以下是环境及相应的版本库: Python版本 3.6.9 ...
- 【Python学习】指定两点地理位置经纬度的距离计算
指定两点地理位置经纬度的距离计算 #coding=utf-8 from math import * # input Lat_A 纬度A # input Lng_A 经度A # input Lat_B ...
- Python地理位置信息库geopy的使用(二):根据中心点坐标,方向,距离计算坐标
上一篇文章我们介绍了geopy的基本使用,这一篇文章我们根据中心点坐标,方向,距中心点距离计算出对应的坐标点,这种用法官网并没有给出详细的文档,我们这里做一下说明 生成坐标点的具体方法 import ...
- 机器学习中常用的距离及其python实现
1 概述 两个向量之间的距离(此时向量作为n维坐标系中的点)计算,在数学上称为向量的距离(Distance),也称为样本之间的相似性度量(Similarity Measurement).它反映为某类事 ...
- 【路径规划】 Optimal Trajectory Generation for Dynamic Street Scenarios in a Frenet Frame (附python代码实例)
参考与前言 2010年,论文 Optimal Trajectory Generation for Dynamic Street Scenarios in a Frenet Frame 地址:https ...
- [转] Python 代码性能优化技巧
选择了脚本语言就要忍受其速度,这句话在某种程度上说明了 python 作为脚本的一个不足之处,那就是执行效率和性能不够理想,特别是在 performance 较差的机器上,因此有必要进行一定的代码优化 ...
随机推荐
- postman工具测试接口
本篇文章主要介绍怎么在postman工具中进行接口的测试? 从以下几个方面进行介绍: 1.先介绍下接口测试 2.不同类型的接口请求方式如何在postman中进行测试 1.1 接口 什么是接口? 接口一 ...
- <zk的典型应用场景>
Overview zk是一个典型的发布/订阅模式的分布式数据管理与协调框架,开发人员可以使用它来进行分布式数据的发布与订阅. 另一方面,通过对zk中丰富的数据节点进行交叉使用,配合watcher事件通 ...
- BSTR 转 char*
#include <comdef.h> #include <comutil.h> #pragma comment(lib,"comsuppw.lib") _ ...
- ios中xib文件的用法
ZQRView文件: // // ZQRView.h // // // Created by zzqqrr on 17/8/20. // // #import <UIKit/UIKit.h> ...
- kbmMW 5.08.01压力测试报告
上图为客户端测试结果,运行14小时,无异常报告.基于洞主封装的HttpsysTransport,基于ClientQuery完成25万多次数据库访问操作,含查询并对查询结果进行修改及增加新记录,然后提交 ...
- 初玩OpenWRT之编译TP-Link WR841N V8固件
0x00 安装依赖 安装git以下载OpenWrt源码.安装编译工具以进行交叉编译: sudo apt-get update sudo apt-get install build-essential ...
- binarysearchtree
public class binarytree<Value> { private Node root = null; private class Node{ private Value v ...
- 【Python】socket编程-1
一.什么是socket编程:网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket,编程传输层,socket本质是编程接口(API) 二.网络七层协议:物里层 数据链 ...
- Caution: request is not finished yet
/********************************************************************** * Caution: request is not fi ...
- Ubuntu16.04安装OpenCV3.2以及PCL1.8
最近在学习slam14讲,需要配置一些环境<视觉slam十四讲> 这本书中已经给出如何配置相关环境的比较详细的说明,但是有些环境并无卵用,比如OpenCV以及PCL 这里给出自己屡试不爽的 ...