Python使用sklearn做数据标准化时报错sc_train未定义如何处理
变量定义位置与代码修正说明
cols变量需要在执行标准化操作前定义,作用是存储你筛选出的数值类型列的列名,保证后续转DataFrame时列名对应正确sc_train、sc_test就是你已经计算得到的标准化后训练集、测试集数组,你之前的代码里已经把结果赋值给了standardized_train_data和standardized_test_data,要么直接修改后续代码的变量名匹配已有的变量,要么在标准化代码后给这两个变量赋值即可
另外注意:你当前对测试集使用fit_transform()的写法是错误的,测试集不能重新拟合scaler,应该直接调用训练集拟合好的scaler的transform()方法,否则会出现数据泄露问题,影响模型泛化效果。
修正后的完整代码
import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn import preprocessing data_train = pd.read_csv("Train_data.csv") data_test = pd.read_csv("Test_data.csv") from sklearn.preprocessing import StandardScaler scaler = StandardScaler() # 在这里定义cols变量,存储数值列名 cols = data_train.select_dtypes(include=['float64','int64']).columns standardized_train_data = scaler.fit_transform(data_train[cols]) # 测试集只用transform,不要重新fit standardized_test_data = scaler.transform(data_test[cols]) # 给sc_train、sc_test赋值,或者直接把后面的变量换成standardized_train_data即可 sc_train = standardized_train_data sc_test = standardized_test_data # 之后运行这两行就不会报错了 standardized_traindf = pd.DataFrame(sc_train, columns = cols) standardized_testdf = pd.DataFrame(sc_test, columns = cols)
内容的提问来源于stack exchange,提问作者Raja Muppalla
相关产品推荐
相关产品推荐

