Я использую SelectKBest()
в классе Pipeline()
Склеарна, чтобы уменьшить количество функций с 30 до 5 лучших функций. Когда я подгоняю классификатор, я получаю разные результаты теста, как и ожидалось, с выбором функции. Однако я обнаружил в своем коде ошибку, которая, похоже, не вызывает реальной ошибки во время выполнения.
Когда я позвонил predict()
, я понял, что ему все еще вводят все 30 функций, как будто выбор функции не происходит. Хотя я только обучил модель на 5 лучших функциях. Разумеется, что дать 30 функций SVM, чтобы предсказать класс, вы получите sh, если он обучен только 5 лучшим функциям?
В моей функции train_model(df)
мой код выглядит следующим образом:
def train_model(df):
x,y = balance_dataset(df)
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size = 0.3, random_state = 0)
feature_selection = SelectKBest()
pipe = Pipeline([('sc', preprocessing.MinMaxScaler()),
('feature_selection', feature_selection),
('SVM', svm.SVC(decision_function_shape = 'ovr', kernel = 'poly'))])
candidate_parameters = [{'SVM__C': [0.01, 0.1, 1], 'SVM__gamma': [0.01, 0.1, 1], 'feature_selection__k': [5]}]
clf = GridSearchCV(estimator = pipe, param_grid = candidate_parameters, cv = 5, n_jobs = -1)
clf.fit(X_train, y_train )
return clf
Однако именно тогда происходит, когда я звоню trade()
:
def trade(df):
clf = train_model(df)
for index, row in trading_set.iterrows():
features = row[:-3] #features is now an array of 30 features, even though model is only trained on 5
if trade_balance > 0:
trades[index] = trade_balance
if clf.predict(features) == 1: #So this should crash and give an input Shape error, but it doesn't
#Rest of code unneccesary#
Итак, мой вопрос: откуда мне знать, что модель действительно обучается только 5 лучшим возможностям?