二手车价格预测

您所在的位置:网站首页 光遇白棉裤先祖怎么上去 二手车价格预测

二手车价格预测

2024-07-09 10:08| 来源: 网络整理| 查看: 265

随机森林模型在机器学习算法中近年来受到xgb模型,lgb模型的冲击,但其仍然十分流行,主要是其结果的得分无论在验证集还是测试集上都经得起考验,这里我们用随机森林模型来预测二手车价格的变化。前面已经做了数据的EDA以及特征工程,包括数据集也在下面的链接中,点击获取了解

二手车交易价格数据分析EDA 二手车交易价格特征工程

随机森林: 参数详解:

sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None,min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0,max_features='auto', max_leaf_nodes=None, min_impurity_split=1e-07,bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0,warm_start=False, class_weight=None)

GradientBoostingRegressor python中的scikit-learn包提供了很方便的GradientBoostingRegressor和GBDT的函数接口,可以很方便的调用函数就可以完成模型的训练和预测

GradientBoostingRegressor函数的参数如下:

sklearn.ensemble.GradientBoostingRegressor(loss='ls', learning_rate=0.1, n_estimators=100, subsample=1.0, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort='auto')

在这里插入图片描述 网格调参代码如下:

#随机森林模型 rf = RandomForestRegressor() n_estimators=[300,500] #树的数量,列表可供表示选择的参数 max_depth=[6,8] #树的深度,列表表示可供选择的参数 param_grid = { "max_depth": max_depth, "n_estimators": n_estimators} gs = GridSearchCV(estimator=rf, param_grid=param_grid, cv=5, n_jobs=-1, verbose=1) gs = gs.fit(train_x, train_y) print('best_score_:',gs.best_score_) print('best_params_:',gs.best_params_)

通过best_params_便可以打印出最优的参数组合,网格调参的原理比较简单,就是通过不同参数的组合分别去训练模型。

缺点:费时间,可想而知如果参数的组合不是22,而是nn的话,再加上k折的迭代次数,那么势必需要等待很久

建议:如果是小数据量的数据,那么可以选择网格调参方法,但如果是比较大的数据,不太建议,等太久了,更好的选择应该是贝叶斯调参。

贝叶斯调参代码如下:

from bayes_opt import BayesianOptimization from sklearn.model_selection import cross_val_score from sklearn.metrics import mean_absolute_error, make_scorer #随机森林贝叶斯调参 rf = RandomForestRegressor() def rf_cv(n_estimators, max_depth, min_samples_split,max_features, min_samples_leaf): val = cross_val_score( RandomForestRegressor( min_samples_leaf=int(min_samples_leaf), min_samples_split=int(min_samples_split), n_estimators=int(n_estimators), max_depth=int(max_depth), max_features=int(max_features) ), train_x, train_y_ln, scoring=make_scorer(mean_absolute_error), cv=4,verbose=0 ).mean() return 1-val rf_bo = BayesianOptimization( rf_cv, {'n_estimators': (60, 250), 'min_samples_leaf': (1, 80), 'min_samples_split': (20, 150), 'max_depth':(5, 30), 'max_features':(4,10)} ) rf_bo.maximize()

最后结果打印出来了参数的各种组合,选择target最大,也就是目标函数最小的组合作为建模的参数即可

优点:参数只需要选择一个合理的范围,不需要准确的数值,同时训练时间也降低了不少,个人推荐贝叶斯调参的方法

最后调用接口函数建模预测即可:

forest = RandomForestRegressor(max_depth=20,n_estimators=63,min_samples_split=26,min_samples_leaf=5,max_features=9) forest_2=forest.fit(train_x, train_y) y=forest_2.predict(test_x)


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3