我有一个矩阵,我试图通过将每个特征列转换为零均值和单位标准差来进行标准化。
我有以下使用的代码,但我想知道该方法是否实际执行了我尝试的方法,或者它是否使用了不同的方法。
from sklearn import preprocessing
mat_normalized = preprocessing.normalize(mat_from_df)
答案 0 :(得分:2)
sklearn.preprocessing.normalize
将每个样本向量缩放到单位范数。 (默认轴是1,而不是0.)这是证明:
from sklearn.preprocessing import normalize
np.random.seed(444)
data = np.random.normal(loc=5, scale=2, size=(15, 2))
np.linalg.norm(normalize(data), axis=1)
# array([ 1., 1., 1., 1., 1., 1., ...
听起来你正在寻找sklearn.preprocessing.scale
将每个特征向量缩放到~N(0,1)。
from sklearn.preprocessing import scale
# Are the scaled column-wise means approx. 0.?
np.allclose(scale(data).mean(axis=0), 0.)
# True
# Are the scaled column-wise stdevs. approx. 1.?
np.allclose(scale(data).std(axis=0), 1.)
# True
答案 1 :(得分:1)
与the documentation州相似:
sklearn.preprocessing.normalize(X, norm='l2', axis=1, copy=True, return_norm=False)
将输入向量分别缩放到单位范数(向量长度)。
因此它采用标准(默认为L2范数),然后确保向量是单位。
因此,如果我们将 n×m - 矩阵作为输入,则输出为 n×m - 矩阵。每个 m -vector都被规范化。对于norm='l2'
(默认值),这意味着计算长度(通过组件的平方和的平方根),并且每个元素除以该长度,使得结果是长度为1
的向量。