使用XGBoost之数据准备(LabelEncoder,One Hot Encode,处理缺失值)

由于其速度和性能,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的变体,用于

  • 19
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值