在使用 python 和 pandas 进行机器学习建模之前,我如何转换描述符均值居中并缩放为单位方差

how can i transformed descriptors mean centered and scaled to unit variance prior to Machine learning modeling using python and pandas

如何使用 pandas 或 numpy 或任何适当的 python 模块将给定数据集转换为均值中心并缩放为单位方差,数据还包含一些缺失值 "Nan" 在建模任务请求帮助之前也应该删除。

感谢

例如。数据集。

GA_ID   PN_ID   PC_ID   MBP_ID  GR_ID   AP_ID   class
0.033   6.652   6.681   0.194   0.874   3.177     0
0.034   9.039   6.224   0.194   1.137   Nan       0
0.035   10.936  10.304  1.015   0.911   4.9       1
0.022   10.11   9.603   1.374   0.848   4.566     1
0.035   2.963   17.156  0.599   0.823   9.406     1
0.033   10.872  10.244  1.015   0.574   4.871     1
0.035   21.694  22.389  1.015   0.859   9.259     1
0.035   10.936  10.304  1.015   0.911   Nan       1
0.035   10.936  10.304  1.015   0.911   4.9       1
0.035   10.936  10.304  1.015   0.911   4.9       0
0.036   1.373   12.034  0.35    0.259   5.723     0
0.033   9.831   9.338   0.35    0.919   4.44      0

我用过:

from sklearn import preprocessing
import numpy as np
raw_data = open("/home/zebrafish/Desktop/scklearn/data.csv")
dataset = np.loadtxt(raw_data, delimiter=",")
X = dataset[:,0:5]
y = dataset[:,6]
X_pro = preprocessing.scale(X)

但我不确定这种方法是否最新,或者它会忽略 "Nan" 还是会自动为 "Nan" 采取适当的步骤,因为在原始数据中没有 "Nan" 值,但为了了解解决方案(如果出现),我在两个位置手动合并了 "Nan"。

谢谢


                   Question Update 

通过谷歌搜索和研究数据,我可能发现这种方法可以基于行对数据进行规范化,而我想对基于列的数据进行规范化。

那么什么是列基归一化的合适方法。

感谢

正如您已经开始的那样,一个简单的方法是通过 sklearn 的预处理库

您可以从删除 NaN 值开始:

from sklearn.preprocessing import Imputer
imp = Imputer(missing_values='Nan', strategy='mean', axis=1)
cleaned_X = imp.fit_transform(X)

在这种情况下,您的 'Nan' 值将替换为该列中其余值的平均值 (AP_ID),而不是完全删除行(并丢失数据)。

接下来,为了按列归一化你的数据,你的方法其实是正确的:

scaled_X = preprocessing.scale(cleaned_X)

默认情况下,sklearn 将按特征(列)规范化您的变量;要按样本(行)归一化,您可以将 'axis = 1' 添加到 scale 函数的参数中。但是,请怀疑您是否愿意这样做。

供参考: http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.scale.html

值得注意的一点是,如果您稍后的统计分析(比如线性回归或您有什么)需要假设特征之间没有显着相关性,并且您注意到特征之间有很多相关性 - 缩放每列独立是不够的(preprocessing.scale 会自动完成)。

如果确实如此,我建议首先使用 sklearn 的 PCA 分解和 'whiten = True'。这将有效地将数据缩放到单位方差和零均值,同时消除特征之间的线性相关性(通过投影到解释数据的大部分可变性的正交方向)。

供参考:http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA

希望这对您有所帮助!