图解-使用变异系数获取权重,并比较效果
Posted 小基基o_O
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图解-使用变异系数获取权重,并比较效果相关的知识,希望对你有一定的参考价值。
前言
变异系数
- Coefficient of Variation
- 计算公式: 变 异 系 数 = 标 准 差 / 平 均 值 变异系数=标准差/平均值 变异系数=标准差/平均值
- 比较 两组 量纲不同的数据 的 离散程度,不能用标准差,可考虑变异系数
不适用场景:数据下限小于0(导致平均值近0)
变异系数越大,离散程度越大
变异系数权重法
- 通过变异系数来赋权
- 计算方法: 变 异 系 数 权 重 i = 变 异 系 数 i / 全 部 变 异 系 数 的 和 变异系数权重_i=变异系数_i / 全部变异系数的和 变异系数权重i=变异系数i/全部变异系数的和
- 使用变异系数计得的权重值会随着数据的变化而变化,不需要标签,可认为是一种无监督学习
- 离散程度较大的列会获得较高的权重参数
- 该方法应用场景不多,通常不建议使用
什么场景考虑使用?没有标签 且 缺乏业务经验 时
Min-Max标准化
- 计算方法: 新 数 据 = ( 原 数 据 − 最 小 值 ) / ( 最 大 值 − 最 小 值 ) 新数据 = ( 原数据 - 最小值 ) / ( 最大值 - 最小值 ) 新数据=(原数据−最小值)/(最大值−最小值)
- 效果:
1、数据映射到[0,1]
2、消除量纲差异
3、放大差距 - 场景:
老师给学生评分(主观评分,如:文明分、品德分…)时,分数的区间是[0,100]
,即使有些学生很顽劣,也不会低于80分,结果所有学生的分数在80~100,优劣学生之间相差不到20%;使用Min-Max标准化或许可以还原出学生之间真实差距
Python代码实现+效果可视化
-
原始数据(第1个表)
-
平均分 可理解为 全部特征的权重相等
5个员工平均分差别不大
员工1最弱逼,员工5最流弊,员工234相等
对平均分进行min-max标准化后,员工1的弱逼程度被放大
技术能力的变异系数最大,权重最高
MinMax标准化后的数据的平均分(第2个表)
- 员工4>3>2(不再相等) 对min-max标准化后的数据进行变异系数法加权(第3个表)
- 员工1反而变得最流弊,员工5反而变得最弱比
from pandas import DataFrame, Series
from sklearn.preprocessing import minmax_scale
from numpy import ndarray
# 原始数据
df: DataFrame = DataFrame(
'员工编号': ['员工1', '员工2', '员工3', '员工4', '员工5'],
'技术能力': [149, 120, 90, 60, 31],
'管理能力': [80, 90, 100, 110, 120],
'交际能力': [70, 90, 110, 130, 150],
)
print(df)
# 变异系数
coefficient_of_variation: Series = df.std() / df.mean()
print(coefficient_of_variation)
# 权重
weight: Series = coefficient_of_variation / sum(coefficient_of_variation)
print(weight)
# 对原始数据进行Min-Max标准化
mm: ndarray = minmax_scale(df[df.columns[1:]])
print(mm)
# Min-Max标准化后的数据与权重进行矩阵乘法,计算出总分
score: Series = mm.dot(weight)
print(score)
# 对总分进行MinMax标准化
df['MinMax标准化的总分']: Series = minmax_scale(score)
print(df['MinMax标准化的总分'])
以上是关于图解-使用变异系数获取权重,并比较效果的主要内容,如果未能解决你的问题,请参考以下文章
权重计算方法三:变异系数法(Coefficient of Variation)