#python #pandas #scikit-learn
#python #pandas #scikit-learn
Вопрос:
Этот код, который работает нормально и ожидаемо. Создание функций подгонки, прогнозирования и подсчета потерь:
features = set(df_train_cat.columns)
features.remove('SalePrice')
features.remove('Id')
X_train_cat = df_train_cat[features].values
y_train_cat = df_train_cat.SalePrice.values
X_train, X_val, y_train, y_val = train_test_split( X_train_cat, y_train_cat, test_size=0.33, random_state=17)
regression = linear_model.Ridge(alpha=.5, random_state = 17)
regression.fit(X_train,y_train)
predictions = regression.predict(X_val)
rmse = (mean_squared_error(y_val, predictions))**(1/2)
mae = mean_absolute_error(y_val, predictions)
print('RMSE on run = {}, MAE = {}'.format(rmse, mae))
-------------------------------------------------------
in returns:
RMSE on run = 27696.648368899852, MAE = 17553.925337213957
Но когда я попытался обернуть его в функцию, результаты получились другими:
def regress_without_uncorrelated(delete_feture_list, data):
features = set(data.columns)
delete_feture_list = delete_feture_list ['SalePrice', 'Id']
if len(delete_feture_list) > 2:
features.remove(set(delete_feture_list))
X = data[features].values
y = data.SalePrice.values
X_train, X_val, y_train, y_val = train_test_split( X, y, test_size=0.33, random_state=17)
regression = linear_model.Ridge(alpha=.5, random_state = 17)
regression.fit(X_train,y_train)
predictions = regression.predict(X_val)
rmse = (mean_squared_error(y_val, predictions))**(1/2)
mae = mean_absolute_error(y_val, predictions)
print('rmse = {}, mae = {}'.format(rmse, mae))
return rmse, mae
-------------------------------------
result is:
rmse = 2.760396036595275e-08, mae = 1.7484699770097167e-08
Вопросы:
- Почему результат возвращается с e? Как сделать так, чтобы это было как в первом блоке?
- Почему порядок потерь изменяется при одних и тех же данных с фиксированным random_state?
Ответ №1:
Проблема была в методе set.remove(), который не работает с iterable .