2017-10-25 19 views
5

Tôi đang sử dụng XGBoost với Python và đã đào tạo thành công mô hình bằng chức năng XGBoost train() có tên trên số DMatrix. Ma trận được tạo ra từ một khung dữ liệu Pandas, có tên tính năng cho các cột.XGBoost plot_importance không hiển thị tên đối tượng

Xtrain, Xval, ytrain, yval = train_test_split(df[feature_names], y, \ 
            test_size=0.2, random_state=42) 
dtrain = xgb.DMatrix(Xtrain, label=ytrain) 

model = xgb.train(xgb_params, dtrain, num_boost_round=60, \ 
        early_stopping_rounds=50, maximize=False, verbose_eval=10) 

fig, ax = plt.subplots(1,1,figsize=(10,10)) 
xgb.plot_importance(model, max_num_features=5, ax=ax) 

tôi muốn bây giờ nhìn thấy tầm quan trọng tính năng sử dụng xgboost.plot_importance() chức năng, nhưng cốt truyện kết quả không hiển thị tên tính năng. Thay vào đó, các đối tượng địa lý được liệt kê là f1, f2, f3, v.v. như được hiển thị bên dưới.

enter image description here

Tôi nghĩ vấn đề là tôi chuyển khung dữ liệu Pandas ban đầu của tôi vào một DMatrix. Làm cách nào tôi có thể liên kết tên đối tượng chính xác để cốt truyện về tính năng quan trọng hiển thị chúng?

Trả lời

5

Bạn muốn sử dụng các tham số feature_names khi tạo bạn xgb.DMatrix

dtrain = xgb.DMatrix(Xtrain, label=ytrain, feature_names=feature_names) 
2

train_test_split sẽ chuyển đổi các dataframe để NumPy mảng mà không có thông tin cột nữa.

Hoặc bạn có thể làm những gì @piRSquared đề xuất và chuyển các đối tượng địa lý dưới dạng thông số cho hàm tạo DMatrix. Hoặc nếu không, bạn có thể chuyển đổi mảng numpy được trả lại từ train_test_split thành Dataframe và sau đó sử dụng mã của bạn.

Xtrain, Xval, ytrain, yval = train_test_split(df[feature_names], y, \ 
            test_size=0.2, random_state=42) 

# See below two lines 
X_train = pd.DataFrame(data=Xtrain, columns=feature_names) 
Xval = pd.DataFrame(data=Xval, columns=feature_names) 

dtrain = xgb.DMatrix(Xtrain, label=ytrain) 
Các vấn đề liên quan