Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 缩放数据时,为什么列车数据集使用';适合';和';转换';,但测试数据集仅使用';转换';?_Python_Scikit Learn - Fatal编程技术网

Python 缩放数据时,为什么列车数据集使用';适合';和';转换';,但测试数据集仅使用';转换';?

Python 缩放数据时,为什么列车数据集使用';适合';和';转换';,但测试数据集仅使用';转换';?,python,scikit-learn,Python,Scikit Learn,缩放数据时,为什么列车数据集使用“拟合”和“变换”,而测试数据集仅使用“变换” SAMPLE_COUNT = 5000 TEST_COUNT = 20000 seed(0) sample = list() test_sample = list() for index, line in enumerate(open('covtype.data','rb')): if index < SAMPLE_COUNT: sample.append(line) else:

缩放数据时,为什么列车数据集使用“拟合”和“变换”,而测试数据集仅使用“变换”

SAMPLE_COUNT = 5000
TEST_COUNT = 20000
seed(0)
sample = list()
test_sample = list()
for index, line in enumerate(open('covtype.data','rb')):
    if index < SAMPLE_COUNT:
        sample.append(line)
    else:
        r = randint(0,index)
        if r < SAMPLE_COUNT:
            sample[r] = line
        else:
            k = randint(0,index)
            if k < TEST_COUNT:
                if len(test_sample) < TEST_COUNT:
                    test_sample.append(line)
                else:
                    test_sample[k] = line
from sklearn.preprocessing import StandardScaler
for n, line in enumerate(sample):
sample[n] = map(float, line.strip().split(','))
y = np.array(sample)[:,-1]
scaling = StandardScaler()

X = scaling.fit_transform(np.array(sample)[:,:-1]) ##here use fit and transform

for n,line in enumerate(test_sample):
test_sample[n] = map(float,line.strip().split(','))
yt = np.array(test_sample)[:,-1]

Xt = scaling.transform(np.array(test_sample)[:,:-1])##why here only use transform
SAMPLE\u COUNT=5000
测试计数=20000
种子(0)
示例=列表()
测试样本=列表()
对于索引,枚举中的行(open('covtype.data','rb'):
如果索引<样本计数:
sample.append(行)
其他:
r=randint(0,索引)
如果r<样本计数:
样本[r]=行
其他:
k=randint(0,索引)
如果k<测试计数:
如果len(测试样本)<测试计数:
测试样本追加(行)
其他:
测试样本[k]=线
从sklearn.preprocessing导入StandardScaler
对于n,枚举中的行(示例):
示例[n]=map(float,line.strip().split(','))
y=np.数组(样本)[:,-1]
scaling=StandardScaler()
X=scaling.fit_变换(np.array(sample)[:,:-1])##这里使用fit和transform
对于n,枚举中的行(测试样本):
test_sample[n]=map(float,line.strip().split(','))
yt=np.数组(测试样本)[:,-1]
Xt=scaling.transform(np.array(test_sample)[:,:-1])##为什么这里只使用transform
正如注释所述,为什么Xt只使用变换而不使用拟合?

我们使用
fit()
fit\u transform()
来学习(训练模型)列车数据集
transform()
可用于针对测试数据集的训练模型。

我们对列车数据使用
fit_transform()
,以便我们了解列车数据的缩放参数,同时缩放列车数据。 我们仅在测试数据上使用
transform()
,因为我们使用在列车数据上学习的缩放参数来缩放测试数据

这是按比例进行的标准程序。您总是在火车上学习缩放参数,然后在测试中使用它们。这里有一篇文章对此做了很好的解释:

fit()用于计算转换所需的参数,transform()用于缩放数据以转换为模型的标准格式

fit_tranform()是两个函数的组合,这两个函数可以有效地完成上述工作


因为fit_transform()已经在计算和转换训练数据,所以只剩下测试数据的转换,因为已经计算并存储了转换所需的参数,所以只剩下测试数据的转换(),因此只使用transform()而不是fit_transform()

我们有两个数据集:训练数据集和测试数据集。假设我们只有两个功能:

“x1”和“x2”

现在考虑这个(一个非常假设的例子):

训练数据中的样本具有值:“x1”=100和“x2”=200 缩放时,“x1”的值为0.1,“x2”的值也为0.1。对此,响应变量值为100。这些数据仅通过训练数据的平均值和标准值进行计算

测试数据中的样本值为:“x1”=50,“x2”=100。当根据试验数据值进行缩放时,'x1'=0.1和'x2'=0.1。这意味着我们的函数也将预测该样本的响应变量值100。但这是错误的。不应该是100。由于上述两个样本特征的非标度值不同,因此指向不同的响应值,因此应预测其他情况。只有当我们根据训练数据对其进行缩放时,我们才会知道正确的预测是什么,因为这些是我们的线性回归函数已经学习到的值

我试图在下面解释这一逻辑背后的直觉:

在应用线性回归和拟合线性回归函数之前,我们决定对训练数据集中的两个特征进行缩放。当我们缩放训练数据集的特征时,所有“x1”特征根据不同样本的平均值和标准偏差w.r.t调整为其“x1”特征值。“x2”特性也会发生同样的情况。 这本质上意味着,每个特征都已转换为仅基于训练数据的新数字。好像每个特征都有一个相对的位置。相对于训练数据的平均值和标准差。因此,每个样本的新“x1”和“x2”值仅取决于训练数据的平均值和标准差

现在,当我们拟合线性回归函数时,它会根据训练数据集的缩放特征学习参数(即,学习预测响应值)。这意味着它正在学习根据训练数据集中不同样本的“x1”和“x2”的特定平均值和标准偏差进行预测。因此,预测值取决于:

*学习参数。而这又取决于

*训练数据的特征值(已缩放)。由于缩放,训练数据的特征取决于

*训练数据的平均值和标准


如果我们现在将standardscaler()拟合到测试数据,测试数据的'x1'和'x2'将有自己的平均值和标准。这意味着这两个特征的新值将反过来仅与测试数据中的数据相关,因此与训练数据没有任何联系。这几乎就像它们被随机值减去或除以,现在得到了新的值,而这些值并不能表达它们与训练数据的关系

可能有两种方法: 具有拟合和转换列车数据的第一进近比例,仅转换测试数据 第二次安装和改造整套设备:培训+测试

如果您想一想:模型在上线时将如何处理缩放?:当新数据到达时,新数据的行为将与回测中看不见的测试数据一样

在第一种情况下,新数据将仅进行缩放转换,并且您的mod