Я не уверен, что это вопрос pandas specifici c, но я почти уверен, что он имеет какое-то отношение к функции cat в этом коде. Я относительно новичок в программировании, поэтому мой опыт довольно ограничен.
Я пытаюсь создать класс, который позволит мне выбирать столбцы данных, которые я хочу масштабировать. Пользовательская функция основана на модели Standard Scaler от skLearn. Всякий раз, когда я пытаюсь разделить свои данные на обучающие и тестовые наборы, я получаю сообщение об ошибке, в котором говорится, что длины фреймов данных не совпадают. Когда я проверяю размер фреймов данных перед масштабированием, они имеют одинаковую длину, однако после масштабирования входные данные удваиваются.
Я не уверен, как включить набор данных, поскольку он взят из csv, но у него есть индекс, который представляет собой уникальный идентификатор для каждой записи и четыре столбца:
- пол (1 или 2)
- возраст
- раса ( 1-7 дискретных)
- вариантов (0-7 дискретных)
Набор данных содержит около 6000 записей.
Любая помощь будет принята с благодарностью.
#### Creates binary targets and then removes 'options' column to eliminate multicolinearity
targets = np.where(df['options'] > 0, 1, 0)
df['targets'] = targets
df_targets = df.drop([options'], axis=1)
#### Creating Inputs
df_inputs = df_targets.iloc[:,:-1]
#### Scaling Inputs (Custom)
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.preprocessing import StandardScaler
class CustomScaler(BaseEstimator, TransformerMixin):
def __init__(self, columns, copy=True, with_mean=True, with_std=True):
self.scaler = StandardScaler(copy,with_mean,with_std)
self.columns = columns
self.mean_ = None
self.var_ = None
def fit(self, X, y=None):
self.scaler.fit(X[self.columns], y)
self.mean_ = np.mean(X[self.columns])
self.var_ = np.var(X[self.columns])
return self
def transform(self, X, y=None, copy=None):
init_col_order = X.columns
X_scaled = pd.DataFrame(self.scaler.transform(X[self.columns]), columns = self.columns)
X_not_scaled = X.loc[:,~X.columns.isin(self.columns)]
return pd.concat([X_not_scaled, X_scaled], axis = 1)[init_col_order]
columns_to_omit = ['gender','race']
columns_to_scale = [x for x in df_inputs.columns.values if x not in columns_to_omit]
input_scaler = CustomScaler(columns_to_scale)
input_scaler.fit(df_inputs)
scaled_inputs = input_scaler.transform(df_inputs)
#### Splitting the Data
train_inputs, test_inputs, train_targets, test_targets = train_test_split(scaled_inputs, targets, train_size = 0.8, random_state = 144)
Вот ошибка, которую я получаю:
.............. in train_inputs, test_inputs, train_targets, test_targets = train_test_split ( scaled_inputs, targets, train_size = 0.8, random_state = 42) Файл "/home/sid/anaconda3/lib/python3.7/site-packages/sklearn/model_selection/_split.py", строка 2118, в массивах train_test_split = indexable (* массивы) Файл "/home/sid/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py", строка 248, в indexable check_consistent_length (* result) Файл "/home/sid/anaconda3/lib/python3.7/site-packages/sklearn/utils/validation.py", строка 212, в образцах check_consistent_length ":% r"% [int (l) для длины l]) ValueError: Найдены входные переменные с несовместимым количеством выборок: [12302, 6151]