xgboost的使用场景(使用XGBoost进行多类分类)
xgboost的使用场景(使用XGBoost进行多类分类)max_depth:树的最大深度。增加这个值会使模型更复杂,更容易过度拟合。只有当tree_方法被设为histand时,0才被接受,它的深度没有限制。注意,在训练深度树时,XGBoost会大量消耗内存。params = { 'max_depth': 6 'objective': 'multi:softmax' 'num_class': 3 } 参数表示:features = [ 'alcohol' 'malic_acid' 'ash' 'alcalinity_of_ash' 'magnesium' 'total_phenols' 'flavanoids' 'nonflavanoid_phenols' 'proanthocyanins' 'color_intensity' 'hue' 'od280/od315_of_diluted_wines' 'pr
XGBoost在各种Kaggle比赛中表现出色,在准确性和分数方面与深度学习算法有着良好的竞争,已经非常出名。
尽管XGBoost是机器学习问题的众多解决方案之一,要将XGBoost主模块用于多类分类问题,需要更改两个参数的值:objective和num_class。让我们在wine数据集(https://archive.ics.uci.edu/ml/datasets/wine)的实践中看看它。
我们首先从Scikit Learn dataset API读取数据。
import pandas as pd from sklearn.datasets import load_wine from sklearn.model_selection import train_test_split X y = load_wine(return_X_y=True)
然后添加列名,以获得外观正确的机器学习数据集。
features = [ 'alcohol' 'malic_acid' 'ash' 'alcalinity_of_ash' 'magnesium' 'total_phenols' 'flavanoids' 'nonflavanoid_phenols' 'proanthocyanins' 'color_intensity' 'hue' 'od280/od315_of_diluted_wines' 'proline' ] X = pd.DataFrame(data=X columns=features) y = pd.DataFrame(data=y columns=['classes'])
为训练集和测试集分割数据并得到我们的dmatrices。
X_train X_test y_train y_test = train_test_split(X y test_size=0.3 random_state=42 stratify=y) dtrain = xgb.DMatrix(data=X_train label=y_train) dtest = xgb.DMatrix(data=X_test)
如果您不熟悉DMatrix,它是XGBoost模型中常用的输入数据接口,可以很好地与panda dataframes、Numpy数组、SciPy数组、CSV文件等配合使用。
是时候设置我们的XGBoost参数来执行多类预测了!
params = { 'max_depth': 6 'objective': 'multi:softmax' 'num_class': 3 }
参数表示:
max_depth:树的最大深度。增加这个值会使模型更复杂,更容易过度拟合。只有当tree_方法被设为histand时,0才被接受,它的深度没有限制。注意,在训练深度树时,XGBoost会大量消耗内存。
objective :: multi:softmax设置XGBoost 使用softmax目标进行 多类分类,还需要设置num_class(类数)
num_class在XGBoost的文档中没有更深入的介绍,但它意味着您应该预测类的数量(在我们的例子中是3)。
现在是时候训练我们的机器学习模型。
from sklearn.metrics import classification_report bst = xgb.train(params dtrain) pred = bst.predict(dtest) print(classification_report(y_test pred))
整个步骤中取得的成果是:
然后我们有了一个可以正常工作的多类XGBoost模型。还有另一种方法可以实现这一点,它不是相同的技术,我们可以使用One vs Rest方法通过组合一组二元分类器来实现多类分类器。