Нормализация данных для регрессионного анализа - PullRequest
0 голосов
/ 13 июня 2019

У меня есть 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. Эти результаты кажутся немного запутанными, не могли бы вы помочь мне понять это?

1 Ответ

0 голосов
/ 13 июня 2019

Действительно ли мне нужно выполнить sc.transform (X_train) и sc.transform (X_test), так как мои данные уже нормализованы в кадре данных?

Эти два понятия совершенно разные.В вашем фрейме данных вы сделали l2-нормализацию.То есть каждая строка считалась вектором, а затем l2-норма была уменьшена до 1. StandardScaler из sklearn выполняет нормальное масштабирование, то есть для каждой строки, вычитает среднее значение и затем делит на свою дисперсию.Если данные строки были из гауссовского распределения, оно преобразует их в правильное нормальное распределение с 0-средним и единичной дисперсией.

Что касается того, какие преобразования вы должны сделать для регрессии - я не думаю, что существует какой-либо общий подход.Нормализация L2 и стандартное масштабирование являются общими преобразованиями данных, которые могут или не могут улучшить производительность регрессии и могут быть получены только эмпирически.То же самое касается вопроса о том, должны ли они использоваться совместно или только один из них.

...