R—用scale()函数进行变量标准化处理

随便举个例子,比如钢铁直男小明要给他女朋友买圣诞礼物,他从某宝上搜集了10种礼物的价格、性价比和好评数信息,试图从中分析出最佳选择。

R—用scale()函数进行变量标准化处理_第1张图片

首先目前有三个维度的数据来衡量礼物,要进行对比的话,得把这三组数据组合成一个单一变量;其次是这三组数据完全不是同一量级,所以组合之前必须对其进行标准化处理。

R—用scale()函数进行变量标准化处理_第2张图片

标准化处理如上,用scale函数对price_num,useful_rate和popular_num进行处理,其原理是计算每组的平均值和标准差,各组平均值见attr(,”scaled:center”),标准差见attr(,”scaled:scale”);再将组内各个数值与其平均值的差,与其标准差的比值,作为该数值在组内的相对数值。

举例如价格,303在组内的相对数值是0.0717732,122在组内的相对数值是-1.5937331等等,这样就解决了各组量级不同无法直接对比的问题。

这个方法也可以用于各组的计量单位不同的情况,比如小明的择偶标准有身高(米)、三围(厘米)、体重(公斤)和饭量(碗)四个对比条件,且有多名单身美女的相关数据供小明分析选择,那么也可以利用上述方法。

继续返回说scale函数,其实上述scale的标准写法是z1<-scale(present[,2:4],center = TRUE,scale=TRUE),只不过center平均值和scale标准差都是默认为true,即计算的时候默认包含这两个参数。

那么false的情况呢,首先看没用标准差,只用平均值的,即不考虑各组数据的离散程度。

R—用scale()函数进行变量标准化处理_第3张图片

显然没办法参考,再看只用标准差,不用平均值。这个情况比较复杂。

R—用scale()函数进行变量标准化处理_第4张图片

首先各位看官老爷会发现标准差变了,关于这个,在解释之前我先吐槽一个事实,就是我在网上就没有找到过相对正确的答案,要么就是随便解释一下,还是漏洞一堆的那种,要么就一带而过,最可怕的是这类文章还真不少(此处抛开正规教材不谈)。

这个原因是这样的,首先标准差的计算公式是

R—用scale()函数进行变量标准化处理_第5张图片

此公式中,μ就是平均值,那现在我们不考虑平均值了,意味着μ=0,那么此时计算的数值更接近于均方差的概念,只不过不是/N,而是/N-1

R—用scale()函数进行变量标准化处理_第6张图片

那么这样得出的最终结果大家可以看到,由于不考虑数据与均值之间的差值,只从均方差上反向考虑离散性,那么整体结果会过于收敛,不是很利于我们拉开各个数据之间的距离。

解释到此为止,继续往下进行,由于这三个条件均是数越高越好,于是直接把每一个礼物的三个z值相加,找最大的就好了,或者用三者均值,也能表达同样的意思。

R—用scale()函数进行变量标准化处理_第7张图片

不过如果小明的标准是价格越低越好、其他两者越高越好,那也可以用Z_final=Z性价比+Z好评数—Z价格,总之这个倒是可以灵活应用。

以上。

你可能感兴趣的:(R—用scale()函数进行变量标准化处理)