使用python基于余弦相似度探索人員相關(guān)性


課題1

畢業(yè)設(shè)計(jì)里面涉及到人員相關(guān)度的計(jì)算,在這里我提出了一個(gè)猜想,大致如下:

現(xiàn)有數(shù)據(jù):學(xué)生id、學(xué)生手機(jī)mac地址、時(shí)間戳、地點(diǎn)id

構(gòu)想:通過學(xué)生mac地址某地點(diǎn)出現(xiàn)頻次,構(gòu)建頻次矩陣,比如說現(xiàn)有六個(gè)地點(diǎn),ABCDEF,某學(xué)生出現(xiàn)的頻次分別為1、5、2、4、7、3,則[1,5,2,4,7,3]即為該學(xué)生在矩陣中的表現(xiàn)形式。(總的來說就是講每個(gè)學(xué)生的出現(xiàn)頻次規(guī)律抽象成一個(gè)向量,該向量由n個(gè)Term組成,每個(gè)Term都有一個(gè)權(quán)重,不同的頻次根據(jù)學(xué)生在總矩陣中影響相關(guān)度的權(quán)重)

實(shí)現(xiàn)步驟:
1.數(shù)據(jù)預(yù)處理,建立空間向量模型,表現(xiàn)形式為:[[3,4,1,5,6,7],[6,4,5,5,2,1],......];
2.特征抽取完之后,對(duì)矩陣進(jìn)行正則化處理。
3.計(jì)算余弦相似度。

image.png

分子:兩個(gè)向量的點(diǎn)乘積
分母:兩個(gè)向量的模的乘積


知識(shí)點(diǎn):

1.利用python進(jìn)行矩陣的正則化

正則化的過程是將每個(gè)樣本縮放到單位范數(shù)(每個(gè)樣本的范數(shù)為1),如果后面要使用如二次型(點(diǎn)積)或者其它核方法計(jì)算兩個(gè)樣本之間的相似性這個(gè)方法會(huì)很有用。

Normalization主要思想是對(duì)每個(gè)樣本計(jì)算其p-范數(shù),然后對(duì)該樣本中每個(gè)元素除以該范數(shù),這樣處理的結(jié)果是使得每個(gè)處理后樣本的p-范數(shù)(l1-norm,l2-norm)等于1。

         p-范數(shù)的計(jì)算公式:||X||p=(|x1|^p+|x2|^p+...+|xn|^p)^1/p

該方法主要應(yīng)用于文本分類和聚類中。例如,對(duì)于兩個(gè)TF-IDF向量的l2-norm進(jìn)行點(diǎn)積,就可以得到這兩個(gè)向量的余弦相似性。

sklearn數(shù)據(jù)預(yù)處理函數(shù):

from sklearn import preprocessing

2.python字典排序
知識(shí)點(diǎn)參照: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六個(gè)感知點(diǎn),對(duì)應(yīng)的八個(gè)人的頻次矩陣。TAT,因?yàn)檫t遲拿不到數(shù)據(jù),只能靠自己模擬數(shù)據(jù)玩玩了,慘_(:з」∠)_


arr_normalized = preprocessing.normalize(arr)
#將原始矩陣正則化

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

a=dict()
#初始化字典

for i in range(1,len(arr)):
#比較第一名同學(xué)跟其他同學(xué)的余弦相似度
    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
#結(jié)果歸一化
    result[n][0]=i
    result[n][1]=sim
    n=n+1
#結(jié)果存入數(shù)組


    a[i] = sim
#結(jié)果存入字典

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

#在這里,用了字典對(duì)象a以及初始化了數(shù)組result分別存儲(chǔ)計(jì)算結(jié)果。其實(shí)兩種方法皆可,但是字典排序?qū)懫饋砀涌焖佟?
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)]
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • ML & DM 集成學(xué)習(xí) 模型融合 ensemble http://wakemeup.space/?p=109 E...
    章魚哥呀閱讀 2,118評(píng)論 0 6
  • 數(shù)學(xué)是計(jì)算機(jī)技術(shù)的基礎(chǔ),線性代數(shù)是機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的基礎(chǔ),了解數(shù)據(jù)知識(shí)最好的方法我覺得是理解概念,數(shù)學(xué)不只是上學(xué)...
    闖王來了要納糧閱讀 23,267評(píng)論 2 48
  • 隨著智能時(shí)代慢慢的到來,有一些基本概念都不知道真的是要落伍了,作為正在積極學(xué)習(xí)向上的青年,我想總結(jié)一份筆記,此份筆...
    yuquanle閱讀 1,771評(píng)論 0 0
  • 在這信仰迷失的世間 我想尋找一絲美好 看遍古往今來的文字 走遍萬水千山的風(fēng)景 尋遍不計(jì)其數(shù)的世人 我的期待,僅僅是...
    游春閱讀 403評(píng)論 1 4
  • 今年除夕夜我在微博上看春晚直播,叫做@春晚,網(wǎng)友們不僅可以評(píng)論、提問,還可以參與抽獎(jiǎng)活動(dòng)。觀看數(shù)據(jù),有三四千萬...
    Miky姐閱讀 311評(píng)論 0 0

友情鏈接更多精彩內(nèi)容