如何使用panda或numpy或任何适当的python模块将给定的数据集转换为以平均值为中心并按比例缩放到单位方差,数据还包含一些缺失的值,如"Nan",在建模任务之前也应删除这些值。请帮助。
感谢
Ex。数据集。
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)
但我不确定这种方法是否是最新的,或者它是否会忽略"楠",或者它会自动为"楠"采取适当的步骤,因为在原始数据中没有"楠"值,但为了理解解决方案,如果发生这种情况,我在两个位置手动合并了"楠"。
感谢
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
值得注意的一点是,如果你以后的统计分析(比如线性回归或其他什么)需要假设特征之间没有显著的相关性,并且你注意到特征之间有很多相关性,那么单独缩放每一列是不够的(预处理.scale会自动进行)。
如果确实是这样的话,我建议首先使用sklearn的PCA分解和"white=True"。这将有效地将数据缩放为单位方差和零均值,同时消除特征之间的线性相关性(通过投影到正交方向,解释数据的大部分可变性)。
供参考:http://scikit-learn.org/stable/modules/generated/sklearn.decomposition.PCA.html#sklearn.decomposition.PCA
希望这能有所帮助!