有时会遇到数据特别集中的分布在某一个区间,如果要在这个区间内选取一个值作为阈值时,选取的阈值稍微有些变动就会导致数据量变化很大,因此需要将密集分布的数据分散开来,此时可以用到softmax的锐化操作,代码如下:
import numpy as np
def softmax(x,t):
x = x/t # 对输入进行锐化操作,其中t是系数
x = np.exp(x) # 对所有元素求指数
tmp = np.sum(x) # 求元素和
x /= tmp # 求somftmax
return x
def main():
score = [0.001*i for i in range(5)]
score = np.array(score)
for t in [0.8,0.6,0.4,0.1,0.001]:
score_soft = softmax(score,t)
score_var = np.var(score_soft)
print('系数:',i)
print('转换后得分:',score_soft)
print('转换后得分的方差:',score_var)
print('-------------')
main()
输出结果如下:
无论是人工观察还是计算方差都可以证明当锐化系数越小时离散程度越大。