用数组拟合Normalizer,然后在python中使用sklearn转换另一个数组



我不确定我是否做错了什么,或者如果这不是正确的方式来做这件事。

我正在为模型的数据集中编码变量,现在,我正在使用sklearn.preprocessing中的Normalizer()来规范化我的一个变量,这是数值。

我的数据集被分成两个,一个用于训练,一个用于推理。现在,我的目标是在训练子集中对这个数值变量(我们称之为列x)进行规范化,然后使用规范化参数对推理数据集中的相同变量进行规范化。现在,两个子集没有相同数量的条目,所以,我要做的是:

nr = Normalizer()
nr.fit([df1.x])
new_col = nr.transform(df1.x)
现在,问题是……当我尝试在推理子集中的列x上使用相同的规范化参数时,因为它具有不同的行数:
new_col1 = nr.transform(df2.x)

我:

X has 10 features, but Normalizer is expecting 697 features as input.

我不确定这是否是一些重塑问题,或者Normalizer()不应该以这种方式使用,所以,任何建议都是非常欢迎的。

Normalizer用于规范化行,而StandardScaler用于规范化列。关于你的问题,似乎你想要扩展列。因此,您应该使用StandardScaler

scikit-learn变压器除了形状(n_sample, n_feature)的输入为二维数组外,pandas.Series为带轴标签的一维数组。

您可以通过将pandas.DataFrame传递给变压器来解决这个问题。

如下:

import numpy as np
import pandas as pd
from sklearn.preprocessing import StandardScaler
df1 = pd.DataFrame({'x' : np.random.uniform(low=0, high=10, size=1000)})
df2 = pd.DataFrame({'x' : np.random.uniform(low=0, high=10, size=850)})
scaler = StandardScaler()
new_col = scaler.fit_transform(df1[['x']])
new_col1 = scaler.transform(df2[['x']])

相关内容

最新更新