首页 > Python基础教程 >
-
python基础教程之Python & 机器学习之项目实践(2)
与前面的线性算法和非线性算法相比,这次的准确度都有了较大的提高。执行结果如下:
ScaledAB: -15.244803 (6.272186) ScaledAB-KNN: -15.794844 (10.565933) ScaledAB-LR: -24.108881 (10.165026) ScaledRFR: -13.279674 (6.724465) ScaledETR: -10.464980 (5.476443) ScaledGBR: -10.256544 (4.605660)
接下来通过箱线图看一下集成算法在10折交叉验证中均方误差的分布状况。代码如下:
# 集成算法——箱线图 fig = pyplot.figure() fig.suptitle('Algorithm Comparison') ax = fig.add_subplot(111) pyplot.boxplot(results) ax.set_xticklabels(ensembles.keys()) pyplot.show()
执行结果如图20-11所示,随机梯度上升算法和极端随机树算法具有较高的中位值和分布状况。
图20-11
集成算法调参
集成算法都有一个参数n_estimators,这是一个很好的可以用来调整的参数。对于集成参数来说,n_estimators会带来更准确的结果,当然这也有一定的限度。下面对随机梯度上升(GBM)和极端随机树(ET)算法进行调参,再次比较这两个算法模型的准确度,来确定最终的算法模型。代码如下:
# 集成算法GBM——调参 caler = StandardScaler().fit(X_train) rescaledX = scaler.transform(X_train) param_grid = {'n_estimators': [10, 50, 100, 200, 300, 400, 500, 600, 700, 800, 900]} model = GradientBoostingRegressor() kfold = KFold(n_splits=num_folds, random_state=seed) grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring=scoring, cv=kfold) grid_result = grid.fit(X=rescaledX, y=Y_train) print('最优:%s 使用%s' % (grid_result.best_score_, grid_result.best_params_)) # 集成算法ET——调参 scaler = StandardScaler().fit(X_train) rescaledX = scaler.transform(X_train) param_grid = {'n_estimators': [5, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100]} model = ExtraTreesRegressor() kfold = KFold(n_splits=num_folds, random_state=seed) grid = GridSearchCV(estimator=model, param_grid=param_grid, scoring=scoring, cv=kfold) grid_result = grid.fit(X=rescaledX, y=Y_train) print('最优:%s 使用%s' % (grid_result.best_score_, grid_result.best_params_))
对于随机梯度上升(GBM)算法来说,最优的n_estimators是500;对于极端随机树(ET)算法来说,最优的n_estimators是80。执行结果,极端随机树(ET)算法略优于随机梯度上升(GBM)算法,因此采用极端随机树(ET)算法来训练最终的模型。执行结果如下:
最优:-9.3078229754 使用{'n_estimators': 500} 最优:-8.99113433246 使用{'n_estimators': 80}
也许需要执行多次这个过程才能找到最优参数。这里有一个技巧,当最优参数是param_grid的边界值时,有必要调整param_grid进行下一次调参。
确定最终模型
我们已经确定了使用极端随机树(ET)算法来生成模型,下面就对该算法进行训练和生成模型,并计算模型的准确度。代码如下:
#训练模型 caler = StandardScaler().fit(X_train) rescaledX = scaler.transform(X_train) gbr = ExtraTreesRegressor(n_estimators=80) gbr.fit(X=rescaledX, y=Y_train)
再通过评估数据集来评估算法的准确度。
# 评估算法模型 rescaledX_validation = scaler.transform(X_validation) predictions = gbr.predict(rescaledX_validation) print(mean_squared_error(Y_validation, predictions))
执行结果如下:
14.077038511
总结
本项目实例从问题定义开始,直到最后的模型生成为止,完成了一个完整的机器学习项目。通过这个项目,理解了上一章中介绍的机器学习项目的模板,以及整个机器学习模型建立的流程。接下来会介绍一个机器学习的二分类问题,以进一步加深对这个模板的理解。
出处:https://blog.csdn.net/qq_40027052/article/details/78912963
-------------------------------------------
个性签名:无论在哪里做什么,只要坚持服务、创新、创造价值,其它的东西自然都会来的。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!