通俗理解 fit,transform,fit_transform,以及训练集用fit_transform且测试集用transform的原因

本文介绍了机器学习中fit, transform和fit_transform的概念和区别。fit用于计算训练集的参数,transform则使用这些参数对数据进行转换。fit_transform是两者的组合,适用于训练数据。归一化作为预处理步骤,使得数值特征具有可比性。关键在于,由于测试集应保持原始分布,因此只对测试集应用transform,避免重新计算参数。" 104873409,8763734,C# 中的命名空间、类型与继承详解,"['C#编程', '面向对象', '内存管理', '字符串处理']

目录

通俗解释

归一化(Normalization)

为什么只对训练集做fit_transform,对测试集只做transform?


最近刚接触机器学习,在kaggle的教程上跟着学习了下,对这几个知识点正好不太熟悉,查完一系列文章后做个简单的总结。 

通俗解释

fit(): Method calculates the parameters μ and σ and saves them as internal objects.

解释:简单来说,就是求得训练集X的均值,方差,最大值,最小值,这些训练集X固有的属性。

transform(): Method using these calculated parameters apply the transformation to a particular dataset.

解释:在fit的基础上,进行标准化,降维,归一化等操作(看具体用的是哪个工具,如PCA,StandardScaler等)。作用是通过找中心和缩放等实现标准化

fit_transform(): joins the fit() and transform() method for transformation of dataset.

解释:fit_transform是fit和transform的组合,既包括了训练又包含了转换。对部分数据先拟合fit,找到该part的整体指标,如均值、方差、最大值最小值等等(根据具体转换的目的),然后对该trainData进行转换transform,从而实现数据的标准化、归一化等等

import pandas as pd import numpy as np import torch from sklearn.preprocessing import StandardScaler from pyDOE import lhs def load_battery_data(file_path, input_dim=7, n_train=1000, n_test=100): """ 加载电池RUL数据,使用LHS方法抽取训练和测试样本(提取第2-8列作为特征) """ # 读取CSV文件 data = pd.read_csv(file_path) # 提取第2列到第8列作为特征(索引1到7),第9列作为RUL标签 features = data.iloc[:, 1:8].values # 第二列到第八列 target = data.iloc[:, 8].values # 第九列RUL # 标准化特征 scaler = StandardScaler() features_scaled = scaler.fit_transform(features) # 使用LHS方法生成样本索引 n_samples = len(features) sample_indices = lhs(n_samples, samples=n_train + n_test) sample_indices = np.round(sample_indices * (n_samples - 1)).astype(int) # 确保索引唯一 sample_indices = np.unique(sample_indices) if len(sample_indices) < n_train + n_test: print("警告: LHS生成了重复索引,正在重新生成...") return load_battery_data(file_path, input_dim, n_train, n_test) # 划分训练和测试索引 train_indices = sample_indices[:n_train] test_indices = sample_indices[n_train:n_train + n_test] # 提取训练和测试数据 X_train = torch.tensor(features_scaled[train_indices], dtype=torch.float32) y_train = torch.tensor(target[train_indices], dtype=torch.float32).squeeze() X_test = torch.tensor(features_scaled[test_indices], dtype=torch.float32) y_test = torch.tensor(target[test_indices], dtype=torch.float32).squeeze() return X_train, y_train, X_test, y_test逐行逐句解释代码,并用小白能懂的话解释问题本质
最新发布
05-28
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值