由于其速度和性能,XGBoost是一种流行的梯度增强实现。
在内部,XGBoost模型将所有问题表示为仅以数值作为输入的回归预测建模问题。如果您的数据是另一种形式的,则必须将其准备成预期的格式。
在本文中,您将了解如何使用Python中的XGBoost库为梯度增强准备数据。
读完这篇文章你就会知道:
如何为分类编码字符串输出变量。
如何使用onehot准备分类输入变量。
如何使用XGBoost自动处理丢失的数据。
让我们开始吧。
标签编码字符串类值
鸢尾花分类问题是一个具有字符串类值的问题的例子。
这是一个预测问题,给定以厘米为单位的鸢尾花的测量值,其任务是预测给定的花属于哪个物种。
下面是原始数据集的示例。您可以了解关于这个数据集的更多信息,并从UCI机器学习存储库下载CSV格式的原始数据。
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
4.7,3.2,1.3,0.2,Iris-setosa
4.6,3.1,1.5,0.2,Iris-setosa
5.0,3.6,1.4,0.2,Iris-setosa
XGBoost不能按原样对这个问题建模,因为它要求输出变量是数值的。
我们可以使用LabelEncoder轻松地将字符串值转换为整数值。这三个类值(鸢尾-setosa、鸢尾-versicolor、鸢尾-virginica)被映射到整数值(0,1,2)。
# encode string class values as integers
label_encoder = LabelEncoder()
label_encoder = label_encoder.fit(Y)
label_encoded_y = label_encoder.transform(Y)
我们将标签编码器保存为一个单独的对象,这样我们就可以使用相同的编码方案转换训练数据集以及稍后的测试和验证数据集。
下面是一个完整的示例,演示如何加载iris数据集。注意,panda用于加载数据,以便处理字符串类值。
# multiclass classification
import pandas
import xgboost
from sklearn import model_selection
from sklearn.metrics import accuracy_score
from sklearn.preprocessing import LabelEncoder
# load data
data = pandas.read_csv('iris.csv', header=None)
dataset = data.values
# split data into X and y
X = dataset[:,0:4]
Y = dataset[:,4]
# encode string class values as integers
label_encoder = LabelEncoder()
label_encoder = label_encoder.fit(Y)
label_encoded_y = label_encoder.transform(Y)
seed = 7
test_size = 0.33
X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, label_encoded_y, test_size=test_size, random_state=seed)
# fit model no training data
model = xgboost.XGBClassifier()
model.fit(X_train, y_train)
print(model)
# make predictions for test data
y_pred = model.predict(X_test)
predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y_test, predictions)
print("Accuracy: %.2f%%" % (accuracy * 100.0))
运行该示例将产生以下输出:
XGBClassifier(base_score=0.5, colsample_bylevel=1, colsample_bytree=1,
gamma=0, learning_rate=0.1, max_delta_step=0, max_depth=3,
min_child_weight=1, missing=None, n_estimators=100, nthread=-1,
objective='multi:softprob', reg_alpha=0, reg_lambda=1,
scale_pos_weight=1, seed=0, silent=True, subsample=1)
Accuracy: 92.00%
请注意XGBoost模型是如何配置为使用multi:softprob目标(softmax loss function的变体,用于