Python 中的高误差机器学习回归算法 - XGBOOST 回归器
High error machine learning regressor algorithm in Python - XGBOOST Regressor
我有一个来自佛罗里达州的真实状态数据的数据框,它包括单身公寓和建筑物数据:
'TRUE_SITE_CITY': The city where the building is. variable: Miami, Aventura...;
'CONDO_FLAG': If it is a condominium or not, variable: yes/no;
'BEDROOM_COUNT': Number of total bethrooms, variable: integuer,
'BUILDING_actual_AREA': The area of the entire building, or apartment in the case that there are only one apartment or house. variable: integuer;
'FLOOR_COUNT': Number of the floors that the building has;
'DOR_CODE_CUR': the type of the building. Variable: categorical;
'UNIT_COUNT': Number of apartments or houses in the building. Variable: integuer;
'YEAR_BUILT': Year that the building or house or apartment was build: Variable: categorical;
'public_transport_min_distance': I have calculated the nearest stations of the public transport;
'Price': The variable that I want to predict.
我进行了探索性数据分析,删除了一些具有空值的数据和一些不正确的数据。我还删除了异常值。
价格栏(目标栏)的基本统计:
我已经检查了分类特征,它们在每个特征中都有足够的变量来将它们保留在模型中。
我已经完成了一个管道,为分类值制作一个热编码器,并为数值制作一个标准标准化。我在其中包含了一个 XGBOOST 回归:
from xgboost import XGBRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_validate
from sklearn import metrics
from sklearn import preprocessing, feature_extraction
from sklearn.pipeline import Pipeline
from sklearn import preprocessing, feature_extraction
from sklearn.pipeline import make_pipeline, make_union
from mlxtend.feature_selection import ColumnSelector
from sklearn.preprocessing import StandardScaler
from category_encoders import OneHotEncoder
x_numeric = df_x[['BEDROOM_COUNT','BATHROOM_COUNT',
'HALF_BATHROOM_COUNT', 'FLOOR_COUNT','UNIT_COUNT','public_transport_min_distance','BUILDING_actual_AREA']]
x_categorical = df_x[['TRUE_SITE_CITY','CONDO_FLAG','YEAR_BUILT']]
categorical_col = x_categorical.columns
numeric_col = x_numeric.columns
estimator_pipeline = Pipeline([
('procesador', procesing_pipeline),
('estimador', estimator)
])
score2 = cross_validate(estimator_pipeline, X= df_x, y= df_y, scoring=scoring,return_train_score=False, cv=5,n_jobs=2)
但是我得到了一个高错误。价格的平均值几乎是 200.000,我得到的错误是:
我已经使用RFE完成了特征选择,但我也得到了很高的错误。
我还有 运行 它在做 RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV
params = {"estimator__learning_rate" : [0.05, 0.10, 0.15, 0.20, 0.25, 0.30 ] ,
"estimator__max_depth" : [ 3, 4, 5, 6, 8, 10, 12, 15],
"estimator__min_child_weight" : [ 1, 3, 5, 7 ],
"estimator__gamma" : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],
"estimator__colsample_bytree" : [ 0.3, 0.4, 0.5 , 0.7 ] }
random_search = RandomizedSearchCV(
estimator=estimator_pipeline,
param_distributions=params, cv=5, refit=True,
scoring="neg_mean_squared_error", n_jobs= 3,
return_train_score=True,
n_iter=50)
但是我得到了类似的错误值。
我能做什么?
我这边有几个remarks/suggestions。希望对你有帮助。
- 不要将YEAR_BUILT变量用作分类变量,而是将其用作数值变量,您也可以将此变量转换为描述building/apartment年龄的新变量,然后您可以尝试不同的转换,
- 您可以尝试通过添加不同的变量来增加自变量的数量,例如使用平方值
- 一般来说,考虑到您只有 9 个自变量和大型数据集,我将专注于创建新的潜在变量
- 使用以某种方式基于决策树方法的算法,您不必对数值变量执行标准化
- 使用不同的增强算法,您应该更关注基本估计量(浅层决策树)
- 尝试不同的算法(例如简单决策树或随机森林)来比较结果
我有一个来自佛罗里达州的真实状态数据的数据框,它包括单身公寓和建筑物数据:
'TRUE_SITE_CITY': The city where the building is. variable: Miami, Aventura...;
'CONDO_FLAG': If it is a condominium or not, variable: yes/no;
'BEDROOM_COUNT': Number of total bethrooms, variable: integuer,
'BUILDING_actual_AREA': The area of the entire building, or apartment in the case that there are only one apartment or house. variable: integuer;
'FLOOR_COUNT': Number of the floors that the building has;
'DOR_CODE_CUR': the type of the building. Variable: categorical;
'UNIT_COUNT': Number of apartments or houses in the building. Variable: integuer;
'YEAR_BUILT': Year that the building or house or apartment was build: Variable: categorical;
'public_transport_min_distance': I have calculated the nearest stations of the public transport;
'Price': The variable that I want to predict.
我进行了探索性数据分析,删除了一些具有空值的数据和一些不正确的数据。我还删除了异常值。
价格栏(目标栏)的基本统计:
我已经检查了分类特征,它们在每个特征中都有足够的变量来将它们保留在模型中。
我已经完成了一个管道,为分类值制作一个热编码器,并为数值制作一个标准标准化。我在其中包含了一个 XGBOOST 回归:
from xgboost import XGBRegressor
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import cross_validate
from sklearn import metrics
from sklearn import preprocessing, feature_extraction
from sklearn.pipeline import Pipeline
from sklearn import preprocessing, feature_extraction
from sklearn.pipeline import make_pipeline, make_union
from mlxtend.feature_selection import ColumnSelector
from sklearn.preprocessing import StandardScaler
from category_encoders import OneHotEncoder
x_numeric = df_x[['BEDROOM_COUNT','BATHROOM_COUNT',
'HALF_BATHROOM_COUNT', 'FLOOR_COUNT','UNIT_COUNT','public_transport_min_distance','BUILDING_actual_AREA']]
x_categorical = df_x[['TRUE_SITE_CITY','CONDO_FLAG','YEAR_BUILT']]
categorical_col = x_categorical.columns
numeric_col = x_numeric.columns
estimator_pipeline = Pipeline([
('procesador', procesing_pipeline),
('estimador', estimator)
])
score2 = cross_validate(estimator_pipeline, X= df_x, y= df_y, scoring=scoring,return_train_score=False, cv=5,n_jobs=2)
但是我得到了一个高错误。价格的平均值几乎是 200.000,我得到的错误是:
我已经使用RFE完成了特征选择,但我也得到了很高的错误。
我还有 运行 它在做 RandomizedSearchCV
from sklearn.model_selection import RandomizedSearchCV
params = {"estimator__learning_rate" : [0.05, 0.10, 0.15, 0.20, 0.25, 0.30 ] ,
"estimator__max_depth" : [ 3, 4, 5, 6, 8, 10, 12, 15],
"estimator__min_child_weight" : [ 1, 3, 5, 7 ],
"estimator__gamma" : [ 0.0, 0.1, 0.2 , 0.3, 0.4 ],
"estimator__colsample_bytree" : [ 0.3, 0.4, 0.5 , 0.7 ] }
random_search = RandomizedSearchCV(
estimator=estimator_pipeline,
param_distributions=params, cv=5, refit=True,
scoring="neg_mean_squared_error", n_jobs= 3,
return_train_score=True,
n_iter=50)
但是我得到了类似的错误值。
我能做什么?
我这边有几个remarks/suggestions。希望对你有帮助。
- 不要将YEAR_BUILT变量用作分类变量,而是将其用作数值变量,您也可以将此变量转换为描述building/apartment年龄的新变量,然后您可以尝试不同的转换,
- 您可以尝试通过添加不同的变量来增加自变量的数量,例如使用平方值
- 一般来说,考虑到您只有 9 个自变量和大型数据集,我将专注于创建新的潜在变量
- 使用以某种方式基于决策树方法的算法,您不必对数值变量执行标准化
- 使用不同的增强算法,您应该更关注基本估计量(浅层决策树)
- 尝试不同的算法(例如简单决策树或随机森林)来比较结果