2017-02-13 54 views
0

首先,我为一个模糊的问题表示歉意。让我解释。 我有一个熊猫数据框包含2列,即平方英尺和卧室数量。我正在尝试使用线性回归来计算价格,并且想要运行矩阵来计算梯度下降。由于平方英尺比卧室数量大1000倍,并且渐变下降不能很好地收敛,所以我试图通过规范化来处理这种尺度的属性变化。如何在python熊猫数据框中使用applymap来处理规范化的规模

我正在做的特定规范化是用卧室和四方平均值乘以它们各自的平均值,并将结果除以它们各自的标准偏差。 我写的代码是这样的: -

meanb= X[['bedrooms']].mean() 
    meanFeet=X[['sqrfeet']].mean() 
    stdb=X[['bedrooms']].std() 
    stdFeet=X[['sqrfeet']].std() 

    norb=lambda x: (x-meanb)/stdb 
    nors=lambda x: (x-meanFeet)/stdFeet 

    X['bedrooms']=X['bedrooms'].apply(norb) 
    X['sqrfeet']= X['sqrfeet'].apply(nors) 

的问题是有没有这样做,因为这如果我有列的1000年不会规模更简单的方法。 我想知道是否有一个dataframe.applymap()方法可以计算各个列的平均值和标准偏差,并对每列的各个单元格执行标准化。请注意,每列可以有不同的值范围,但都是数字。上市第一列

回答

0

假设

1.价格和

2.you想规范,除了价格列的所有列

from sklearn import preprocessing 
import numpy as np 


X, y = df.iloc[:,2:].values, df.iloc[:,1].values  
scaler = preprocessing.StandardScaler().fit(X) 
scaler.transform(X) 

OR

STD = lambda x: (x-x.mean())/x.std() 
0

谢谢您的帮助。我知道有很多方法可以做到这一点。其实,我解决它的方式如下。您可以选择性地将apply/lambda函数用于单独标记的列。例如,如果我正在使用mean和max进行标准化,我使用了以下示例代码:(请注意,我没有在此共享我的完整代码):

sqrftMax=data['sqrfeet'].max() 
    sqrftMean=data['sqrfeet'].mean() 

    #normalized list of sqrfootage. 
    nSqrft= data['sqrfeet'].apply(lambda x: (x-sqrftMean)/sqrftMax) 
    data['sqrfeet'] =nSqrft