二手车价格预测 |
您所在的位置:网站首页 › 光遇白棉裤先祖怎么上去 › 二手车价格预测 |
随机森林模型在机器学习算法中近年来受到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')
通过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 |