У меня есть pandas Dataframe, и я использую это для проведения некоторого регрессионного анализа. Я нормализовал данные, используя следующее:
working_df = df.div(np.sqrt(np.sum(np.power(df.values, 2), axis=1)), axis=0)
Этот информационный кадр содержит 35 столбцов в качестве объектов, поэтому я выбираю набор данных следующим образом:
X = working_df.iloc[:, 0:35]
y = target_df['target_property']
Затем я использую Sklearn, чтобы тренироваться - тестовый сплит:
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)
Мой вопрос:
Мне действительно нужно выполнить sc.transform (X_train) и sc.transform (X_test), так как мои данные уже нормализованы в кадре данных? Если да, нужно ли выполнять sc.fit в X_train перед выполнением sc.transform (X_train), если нет, то почему? Таким образом, я получил R2 как 0,46 для линейной регрессии, -0,21 для регрессии гребня ядра и 0,62 для регрессора повышения градиента со скоростью обучения 0,3. Эти результаты кажутся немного запутанными, не могли бы вы помочь мне понять это?