使用python基于余弦相似度探索人员相关性


课题1

毕业设计里面涉及到人员相关度的计算,在这里我提出了一个猜想,大致如下:

现有数据:学生id、学生手机mac地址、时间戳、地点id

构想:通过学生mac地址某地点出现频次,构建频次矩阵,比如说现有六个地点,ABCDEF,某学生出现的频次分别为1、5、2、4、7、3,则[1,5,2,4,7,3]即为该学生在矩阵中的表现形式。(总的来说就是讲每个学生的出现频次规律抽象成一个向量,该向量由n个Term组成,每个Term都有一个权重,不同的频次根据学生在总矩阵中影响相关度的权重)

实现步骤:
1.数据预处理,建立空间向量模型,表现形式为:[[3,4,1,5,6,7],[6,4,5,5,2,1],......];
2.特征抽取完之后,对矩阵进行正则化处理。
3.计算余弦相似度。

image.png

分子:两个向量的点乘积
分母:两个向量的模的乘积


知识点:

1.利用python进行矩阵的正则化

正则化的过程是将每个样本缩放到单位范数(每个样本的范数为1),如果后面要使用如二次型(点积)或者其它核方法计算两个样本之间的相似性这个方法会很有用。

Normalization主要思想是对每个样本计算其p-范数,然后对该样本中每个元素除以该范数,这样处理的结果是使得每个处理后样本的p-范数(l1-norm,l2-norm)等于1。

         p-范数的计算公式:||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p

该方法主要应用于文本分类和聚类中。例如,对于两个TF-IDF向量的l2-norm进行点积,就可以得到这两个向量的余弦相似性。

sklearn数据预处理函数:

from sklearn import preprocessing

2.python字典排序
知识点参照:python字典排序

python代码


# -*- coding: UTF-8 -*-
__author__ = 'Suzibo'

import numpy as np
import pandas as pd
from sklearn import preprocessing
from sklearn import feature_extraction
#from sklearn.feature_extraction.text import TfidfTransformer
#from sklearn.feature_extraction.text import CountVectorizer

arr = np.array([[3,5,3,0,5,5],
                [3,4,3,3,5,1],
                [5,7,8,12,1,0],
                [5,1,3,1,1,2],
                [0,7,3,1,5,1],
                [7,1,2,3,6,1],
                [0,9,2,1,4,1],
                [3,0,3,1,0,5]])
#模拟了ABCDEF六个感知点,对应的八个人的频次矩阵。TAT,因为迟迟拿不到数据,只能靠自己模拟数据玩玩了,惨_(:з」∠)_


arr_normalized = preprocessing.normalize(arr)
#将原始矩阵正则化

result = np.zeros(((len(arr)-1),2))
n=0
#初始化结果矩阵(N行2列的0矩阵)

a=dict()
#初始化字典

for i in range(1,len(arr)):
#比较第一名同学跟其他同学的余弦相似度
    num = np.sum(arr_normalized[0]*arr_normalized[i])
#向量乘积
    denom = np.linalg.norm(arr_normalized[0]) * np.linalg.norm(arr_normalized[i])
#向量模的乘积
    cos = num/denom
    sim = 0.5 + 0.5*cos
#结果归一化
    result[n][0]=i
    result[n][1]=sim
    n=n+1
#结果存入数组


    a[i] = sim
#结果存入字典

print result
print sorted(a.iteritems(),key=lambda asd:asd[1],reverse=True)

#在这里,用了字典对象a以及初始化了数组result分别存储计算结果。其实两种方法皆可,但是字典排序写起来更加快速。

result:
[[ 1.          0.92443667]
 [ 2.          0.7434795 ]
 [ 3.          0.85627822]
 [ 4.          0.91615085]
 [ 5.          0.84737882]
 [ 6.          0.88826077]
 [ 7.          0.83610165]]
sorted(a.iteritems(),key=lambda asd:asd[1],reverse=True):
[(1, 0.9244366688881116), (4, 0.91615085086634984), (6, 0.88826076864678882), (3, 0.85627822353819516), (5, 0.84737881773469248), (7, 0.83610165222088828), (2, 0.74347950132065999)]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351

推荐阅读更多精彩内容

  • ML & DM 集成学习 模型融合 ensemble http://wakemeup.space/?p=109 E...
    章鱼哥呀阅读 1,798评论 0 6
  • 数学是计算机技术的基础,线性代数是机器学习和深度学习的基础,了解数据知识最好的方法我觉得是理解概念,数学不只是上学...
    闯王来了要纳粮阅读 22,685评论 2 48
  • 随着智能时代慢慢的到来,有一些基本概念都不知道真的是要落伍了,作为正在积极学习向上的青年,我想总结一份笔记,此份笔...
    yuquanle阅读 1,408评论 0 0
  • 在这信仰迷失的世间 我想寻找一丝美好 看遍古往今来的文字 走遍万水千山的风景 寻遍不计其数的世人 我的期待,仅仅是...
    游春阅读 356评论 1 4
  • 今年除夕夜我在微博上看春晚直播,叫做@春晚,網友們不僅可以評論、提問,還可以參與抽獎活動。觀看數據,有三四千萬...
    Miky姐阅读 272评论 0 0