【问题标题】:Normalization by min-max & stand deviation method to only certain columns using Python or R使用 Python 或 R 通过 min-max 和标准偏差方法对某些列进行归一化
【发布时间】:2019-07-19 22:20:43
【问题描述】:

我有一个包含 37 个变量和 50,000 行的数据框。既有分类特征,也有数值特征。我想对数据框中的某些列执行规范化功能。

这是一个假数据集:

diagnosis   gender  area    age weight    score   compactness   class
 447          1     95.88   50  117.66      674.8      80         0
 167          0     109.3   65  118.8       886.3      35.6       2
 444          0     117.5   80  160.85      990        64.2       2
 100          0     88.05   35  94.98       582.7      35.23      1
 227          1     97.45   40  15.51       684.5      70         1

我只想对面积、重量、分数、紧凑性进行归一化。我该怎么做?顺便说一句,我从here 找到了一个标准偏差方法,但它意味着对整个数据集进行规范化,代码是:

# identify outliers with standard deviation
from numpy.random import seed
from numpy.random import randn
from numpy import mean
from numpy import std

# calculate summary statistics
data_mean, data_std = mean(data), std(data)
# identify outliers
cut_off = data_std * 3
lower, upper = data_mean - cut_off, data_mean + cut_off
# identify outliers
outliers = [x for x in data if x < lower or x > upper]
print('Identified outliers: %d' % len(outliers))
# remove outliers
outliers_removed = [x for x in data if x >= lower and x <= upper]
print('Non-outlier observations: %d' % len(outliers_removed))

我的问题是如何仅对数据框中的某些列进行规范化?提前感谢您的帮助!

【问题讨论】:

  • 在baseR中,您可以使用您要使用的列的名称(v=c("weight","score" ...))创建一个向量,然后使用dataset[,v]=apply(dataset[,v],2, function(x){ ... }将函数仅应用于这些列
  • 如果只是选择变量,那么可以使用df[, grep("area|age|weight|score", names(df))]。
  • @boski 你愿意给我更多细节吗?我使用 R 尝试了这个,然后我迷路了 m
  • @tmfmnk 你能给我更多的提示吗? tks
  • grep() 在 df 的列名中查找给定的变量。对于匹配的列,它返回它们的列索引,然后根据该列索引对 df 进行子集化。

标签: python r normalization


【解决方案1】:

我实际上有一个用于自动标准化的书面函数。如下:

n <-function(x){
  d=dim(x)
  c=colMeans(x)
  xm=sapply(1:d[2],function(i){
    x[,i]=x[,i]-c[i]
  })
  # xm is the x with removed means
  v=var(xm) # variance matrix
  xn=sapply(1:d[2],function(i){
    xm[,i]=xm[,i]/sqrt(v[i,i])
  })
  xn
}

然后只需将此函数应用于所需的列。

tochange=c("age","weight","score")
df[,tochange]=n(df[,tochange])
> df
     diagnosis gender   area        age     weight      score
[1,]       447      1  95.88 -0.2161373  0.3000106 -0.5282662
[2,]       167      0 109.30  0.5943775  0.3212536  0.7290858
[3,]       444      0 117.50  1.4048924  1.1048216  1.3455747
[4,]       100      0  88.05 -1.0266521 -0.1226130 -1.0757939
[5,]       227      1  97.45 -0.7564805 -1.6034728 -0.4706004
     compactness class
[1,]       80.00     0
[2,]       35.60     2
[3,]       64.20     2
[4,]       35.23     1
[5,]       70.00     1

【讨论】:

  • 感谢您的帮助!
猜你喜欢
  • 2017-11-01
  • 2015-03-09
  • 2021-11-07
  • 2018-11-04
  • 1970-01-01
  • 2014-11-23
  • 2016-07-28
  • 2020-07-22
  • 2016-10-19
相关资源
最近更新 更多