手把手构建人工智能产品
##/*-------------------------------------*/
##/* 手把手构建人工智能产品
##https://www.cnblogs.com/by-dream/p/9403984.html
##https://www.cnblogs.com/ywl925/archive/2012/11/21/2780861.html
##/*-------------------------------------*/
#第三章--排序任务评估指标--DCG--P105
"""
DCG是这样一个指标:项目得分和一个权重的乘积,该权重和项目位置排序成反比
问题:
理解项目位置排序成反比中log的作用
1、如果score得分很高,位置却靠后
2、如果score得分很低,位置却靠前
"""
import math
def dcg(score,rank):
score_0=score[0] #score_0为序列第一项的得分
dcg_sum=score_0
count=1
for i in score[1:]:
count+=1
# print(i/math.log(count,2))
dcg_sum+=(i/math.log(count,2))
# print(dcg_sum)
return dcg_sum
score_list=[3,1,2,3,2]
rank=[i for i in range(1,len(score_list)+1)]
dcg_value=dcg(score_list,rank)
print(dcg_value)
24.872442982665962
"""
假设搜索回来的5个结果,其相关性分数分别是 3、2、3、0、1、2
那么 CG = 3+2+3+0+1+2
可以看到只是对相关的分数进行了一个关联的打分,并没有召回的所在位置对排序结果评分对影响。而我们看DCG:
i reli log2(i+1) reli /log2(i+1)
1 3 1 3
2 2 1.58 1.26
3 3 2 1.5
4 0 2.32 0
5 1 2.58 0.38
6 2 2.8 0.71
所以 DCG = 3+1.26+1.5+0+0.38+0.71 = 6.86
"""
score_list=[3,2,3,0,1,2]
rank=[1,2,3,4,5,6]
log_list=[math.log(i+1,2) for i in rank]
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#做一下对数函数的图
x=[i for i in range(2,100)]
y_t=[(math.log(i,2)) for i in x]
y=[1/i for i in y_t]
log_data=pd.DataFrame()
log_data['x']=x
log_data['y']=y
log_data = log_data.set_index(keys=['x'])
ax=log_data['y'].plot(kind='line',
style = '--o',color='c',figsize=(10,10))
plt.show()
构建用户画像中所用到的AI算法
##/*-------------------------------------*/
##/* 构建用户画像中所用到的AI算法
##http://www.woshipm.com/user-research/2856287.html
##/*-------------------------------------*/
"""
时间衰减因子
时间衰减因子体现了标签的热度随着时间逐渐冷却的过程,它来源于牛顿冷却定律。
图16-牛顿冷却定律原始公式
定律描述的是物体的冷却速度与其当前温度和室温之间的温差成正比。
运用于新闻领域,一条新闻可能在今天它的“温度”是最高的,但是随着时间,这条新闻会逐渐的变成和普通新闻一样的“温度”。
经过对牛顿冷却定律的推导,我们得出了以下公式:
图17-冷却系数计算公式
将公式翻译成中文:当前温度=原始温度 X exp(-冷却系数 X 间隔时间)
运用于标签的翻译:当前权重=原始权重 X exp(-冷却系数 X 间隔时间)
如:将用户发生行为的当日该偏好的权重设置为1,10天后设置为0.2,也就是经过9天后权重会衰减是0.2,将已知变量代入到图13的公式中,经过指数的运算得到冷却系数,从而得到时间衰减因子。
"""
import math
math.exp( x )
0.2=math.exp(-1* x*9 )
math.log(0.2)/(-9)