【问题标题】:Normalisation : Some advice please标准化:请提供一些建议
【发布时间】:2021-03-16 07:00:20
【问题描述】:

我有一个DF,如下所示:

       ECON1     ECON2     ECON3     FOOD1     FOOD2     FOOD3      ENV1  \
28  0.310071  0.096913  0.228500  0.234986  0.260894  0.267858  0.489309   
28  0.353609  0.045075  0.222571  0.222803  0.248388  0.330560  0.060107   
28  0.280600  0.170201  0.232027  0.226792  0.233379  0.316765  0.114550   
28  0.299062  0.127866  0.198080  0.189948  0.222982  0.327082  0.052881   

        ENV2      HEA1      HEA2      HEA3     PERS1     PERS2     PERS3  \
28  0.206320  0.252537  0.266968  0.248452  0.184450  0.093345  0.173952   
28 -0.206570  0.263673  0.126182  0.265908  0.134481  0.191341  0.113324   
28  0.237818  0.257337  0.102037  0.214423  0.159002  0.321451  0.165960   
28  0.345857  0.272412  0.069192  0.251301  0.130606  0.132732  0.174925   

        COM1      COM2      POL1      POL2  
28  0.781430  0.487822  0.361886  0.233124  
28  0.083918  0.005381  0.266604  0.237078  
28  0.395897  0.257888  0.330607  0.229079  
28  0.000000  0.000000  0.307907  0.238908  

这个DF 是归一化的结果,如下所示:

DF.apply(lambda x: x / np.linalg.norm(x), axis=0)

我的问题是这种类型的标准化不能保证非负值。我本可以使用:

DF.apply(lambda x: (x - x.min() )/ (x.max() - x.min()), axis=0)

但这里的问题是我得到的列都是zeros 或所有ones。当您尝试使用这些值(进行因子分析或相关性分析)时,它们看起来是常数,而实际上不是,这些只是标准化过程的结果。

有没有办法在保证数据的积极性和可变性的同时进行规范化?

【问题讨论】:

    标签: python-3.x dataframe normalization


    【解决方案1】:

    如果所有值都相等(全为零、全一或其他),则除以 0(因为value.max() - value.min()),默认情况下会在 Python 中引发错误。但是,Pandas 返回 NaN 而不是引发此类错误。因此,如果对您有意义,您可以使用 0 轻松填充这些值:

    df.apply(lambda x: (x - x.min())/ (x.max() - x.min()), axis=0).fillna(0.0)
    

    相当于使用scikit-learn中的preprocessing.MinMaxScaler

    from sklearn import preprocessing
    min_max_scaler = preprocessing.MinMaxScaler()
    pd.DataFrame(min_max_scaler.fit_transform(df))
    

    【讨论】:

    • 亲爱的凯娜。谢谢你。 DF 是归一化的结果。我不想规范化 DF,它已经规范化了。我正在寻找一种不同的方式来规范化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-20
    • 2011-12-24
    • 2011-01-09
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    相关资源
    最近更新 更多