2017-02-13 30 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