app定制开发价格,济南网站建设yigeseo,不备案的网站有那些,免费网站正能量本教程是机器学习系列的一部分。 在此步骤中#xff0c;您将学习如何使用功能强大的xgboost库构建和优化模型。
What is XGBoost
XGBoost是处理标准表格数据的领先模型#xff08;您在Pandas DataFrames中存储的数据类型#xff0c;而不是像图像和视频这样的更奇特的数据类…本教程是机器学习系列的一部分。 在此步骤中您将学习如何使用功能强大的xgboost库构建和优化模型。
What is XGBoost
XGBoost是处理标准表格数据的领先模型您在Pandas DataFrames中存储的数据类型而不是像图像和视频这样的更奇特的数据类型。 XGBoost模型在许多Kaggle比赛中占据主导地位。 为了达到峰值精度XGBoost模型比Random Forest等技术需要更多的知识和模型调整。 在本教程之后你将能够 遵循XGBoost的完整建模工作流程 微调XGBoost模型以获得最佳性能
XGBoost是Gradient Boosted决策树算法的一种实现scikit-learn有另一个版本的算法但XGBoost有一些技术优势。什么是Gradient Boosted决策树 我们将通过一个图表。 我们经历了重复构建新模型的循环并将它们组合成一个整体模型。 我们通过计算数据集中每个观察的误差来开始循环。 然后我们构建一个新模型来预测。 我们将此误差预测模型的预测添加到“模型集合”中。 为了进行预测我们添加了以前所有模型的预测。 我们可以使用这些预测来计算新误差构建下一个模型并将其添加到整体中。 那个周期之外还有一件。 我们需要一些基础预测来开始循环。 在实践中最初的预测可能非常幼稚。 即使它的预测非常不准确随后对整体的添加将解决这些错误。 这个过程可能听起来很复杂但使用它的代码很简单。 我们将在下面的模型调整部分填写一些额外的解释性细节。
Example
我们将从预先加载到train_Xtest_Xtrain_ytest_x的数据开始。
[1]
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import Imputerdata pd.read_csv(../input/train.csv)
data.dropna(axis0, subset[SalePrice], inplaceTrue)
y data.SalePrice
X data.drop([SalePrice], axis1).select_dtypes(exclude[object])
train_X, test_X, train_y, test_y train_test_split(X.as_matrix(), y.as_matrix(), test_size0.25)my_imputer Imputer()
train_X my_imputer.fit_transform(train_X)
test_X my_imputer.transform(test_X)
/opt/conda/lib/python3.6/site-packages/ipykernel_launcher.py:9: FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.if __name__ __main__:
/opt/conda/lib/python3.6/site-packages/sklearn/utils/deprecation.py:58: DeprecationWarning: Class Imputer is deprecated; Imputer was deprecated in version 0.20 and will be removed in 0.22. Import impute.SimpleImputer from sklearn instead.warnings.warn(msg, categoryDeprecationWarning)
我们像在scikit-learn建立模型和拟合。
【2】
from xgboost import XGBRegressormy_model XGBRegressor()
# Add silentTrue to avoid printing out updates with each cycle
my_model.fit(train_X, train_y, verboseFalse)
我们同样评估模型并像在scikit-learn中那样进行预测。
【3】
# make predictions
predictions my_model.predict(test_X)from sklearn.metrics import mean_absolute_error
print(Mean Absolute Error : str(mean_absolute_error(predictions, test_y)))
Mean Absolute Error : 17543.750299657535
Model Tuning
XGBoost有一些参数可以显着影响您的模型的准确性和训练速度。您应该了解的第一个参数是n_estimators 和 early_stopping_rounds n_estimators指定完成上述建模周期的次数。 在欠拟合vs过拟合图中n_estimators将您向右移动。值太低会导致欠拟合这对训练数据和新数据的预测都是不准确的。太大的值会导致过度拟合这时对训练数据的预测准确但对新数据的预测不准确这是我们关心的。您可以试验数据集以找到理想值。典型值范围从100到1000但这很大程度上取决于下面讨论的学习率。 参数early_stopping_rounds提供了一种自动查找理想值的方法。过早停止会导致模型在验证分数停止改善时停止迭代即使我们不是n_estimators的硬停止。为n_estimators设置一个高值然后使用early_stopping_rounds找到停止迭代的最佳时间是明智的。 由于随机机会有时会导致单轮其中验证分数没有提高因此您需要指定一个数字以确定在停止前允许多少轮直线恶化。 early_stopping_rounds 5是一个合理的值。因此我们在连续5轮恶化的验证分数后停止。 以下是适合early_stopping的代码
【4】
my_model XGBRegressor(n_estimators1000)
my_model.fit(train_X, train_y, early_stopping_rounds5, eval_set[(test_X, test_y)], verboseFalse)
XGBRegressor(base_score0.5, boostergbtree, colsample_bylevel1,colsample_bytree1, gamma0, learning_rate0.1, max_delta_step0,max_depth3, min_child_weight1, missingNone, n_estimators1000,n_jobs1, nthreadNone, objectivereg:linear, random_state0,reg_alpha0, reg_lambda1, scale_pos_weight1, seedNone,silentTrue, subsample1)
使用early_stopping_rounds时您需要留出一些数据来检查要使用的轮数。 如果您以后想要使用所有数据拟合模型请将n_estimators设置为在过早停止运行时发现的最佳值。
learning_rate
对于更好的XGBoost模型这是一个微妙但重要的技巧 我们不是通过简单地将每个组件模型中的预测相加来获得预测而是将每个模型的预测乘以一个小数字然后再添加它们。这意味着我们添加到集合中的每个树都会减少我们的预测。 在实践中这降低了模型过度拟合的倾向。 因此您可以使用更高的n_estimators值而不会过度拟合。 如果使用过早停止将自动设置适当数量的树。 一般来说较小的学习率以及大量的估算器将产生更准确的XGBoost模型尽管它也会使模型更长时间进行训练因为它在整个循环中进行了更多的迭代。 修改上面的示例以包含学习率将产生以下代码
【5】
my_model XGBRegressor(n_estimators1000, learning_rate0.05)
my_model.fit(train_X, train_y, early_stopping_rounds5, eval_set[(test_X, test_y)], verboseFalse)
XGBRegressor(base_score0.5, boostergbtree, colsample_bylevel1,colsample_bytree1, gamma0, learning_rate0.05, max_delta_step0,max_depth3, min_child_weight1, missingNone, n_estimators1000,n_jobs1, nthreadNone, objectivereg:linear, random_state0,reg_alpha0, reg_lambda1, scale_pos_weight1, seedNone,silentTrue, subsample1)
n_jobs 在较大数据集上需要考虑运行时间您可以使用并行性来更快地构建模型。通常将参数n_jobs设置为等于计算机上的核心数。在较小的数据集上这无济于事。 由此产生的模型将不会更好因此对于拟合时间的微优化通常只是分散注意力。但是它在大型数据集中非常有用否则您将在fit命令期间等待很长时间。 XGBoost有许多其他参数但这些参数将消耗更长时间帮助您微调XGBoost模型以获得最佳性能。
Conclusion XGBoost是目前用于在传统数据也称为表格或结构数据上构建精确模型的主要算法。去应用它来改进你的模型
Your Turn 使用XGBoost转换你的模型。 使用提前停止为n_estimators找到一个好的值。然后使用所有训练数据和n_estimators的值重新估计模型。 完成后返回学习机器学习继续改进。