我完全承认这可能只是我误解了它的工作原理;
我使用了 multi:softprob 方法,因为这是我认为适合我的数据的方法:
[13355 rows x 6 columns]
["Accident_Severity", "Number_of_Vehicles", "Number_of_Casualties", "Speed_limit", "Urban_or_Rural_Area", "Year"]
每列都是数字。有些只是一个含义的占位符,例如事故严重程度范围从 1 到 5,而速度限制是根据发生事故的道路的速度限制(6 个唯一)的字面 MPH。因此,除了车辆数量和伤亡人数之外,大多数都是离散的。
当我测试使用什么分类器时,它也提出了 multi:softprob 。
model = XGBClassifier()
model.fit(x_train, y_train)
print(model.objective)
因此,当我运行它时,由于 xgb.plot_tree 函数,我可以看到图表,并且我注意到它使用笨拙的指标来进行下一步。
例如 1.5 人伤亡,这在现实中是不可能的,也不应该在数据中出现?如-我的思考过程是它应该认为<5伤亡,<4车辆?
或者这是正常的吗?
# Creating split for training and testing
x_train, x_test, y_train, y_test = train_test_split(glasgow_x, glasgow_y, test_size=0.3)
D_train = xgb.DMatrix(x_train, label=y_train)
D_test = xgb.DMatrix(x_test, label=y_test)
'''ASCERTAINING WHICH CLASSIFIER TO USE:'''
model = XGBClassifier()
model.fit(x_train, y_train)
print(model.objective)
'''MULTI:SOFTPROB'''
param = {
'eta': 0.1,
'max_depth': 3,
'objective': 'multi:softprob',
'num_class': 4}
steps = 20
'''XGBoost:'''
xg_class = xgb.train(param, D_train, steps)
preds = xg_class.predict(D_test)
best_preds = np.asarray([np.argmax(line) for line in preds])
precision = precision_score(y_test, best_preds, average='macro')
recall = recall_score(y_test, best_preds, average='macro')
accuracy = accuracy_score(y_test, best_preds)
print(str(f"Precision:{precision:.2f}"))
print(str(f"Recall:{recall:.2f}"))
print(str(f"Accuracy:{accuracy:.2f}"))
xgb.plot_tree(model,num_trees=3,rankdir='LR')
plt.show()