0

首先,我为一个模糊的问题道歉。让我解释。我有一个熊猫数据框,其中包含 2 列,即平方英尺和卧室数量。我正在尝试使用线性回归计算价格,并希望运行矩阵来计算梯度下降。由于平方英尺比卧室数量大 1000 倍,而且梯度下降不能很好地收敛,我试图通过归一化来处理属性中的这种尺度差异。

我正在做的特定归一化是用它们各自的平均值减去卧室和平方英尺的各个列单元格,然后将结果除以它们各自的标准偏差。我写的代码是这样的:-

  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() 方法可以计算各个列的平均值和标准差,并对每列的各个单元格执行归一化。请注意,每一列可以有不同的值范围,但都是数字。

4

2 回答 2

0

谢谢你的帮助。我了解到有很多方法可以做到这一点。实际上,我解决它的方式如下。您可以有选择地将 apply/lambda 函数用于单个标记的列。例如,如果我使用平均值和最大值进行归一化,我使用了以下示例代码:(请注意,我没有在这里分享我的完整代码):

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

  #normalized list of sqrfootage.
  nSqrft= data['sqrfeet'].apply(lambda x: (x-sqrftMean)/sqrftMax)
  data['sqrfeet'] =nSqrft
于 2017-05-13T20:15:38.927 回答
0

认为

1.第一栏列出的价格和

2.你想标准化除价格列之外的所有列

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)

或者

STD = lambda x: (x-x.mean())/x.std()
于 2017-05-13T04:12:57.047 回答