下面的代码是我的第一个代码和第一个方法泰坦尼克号Kaggle比赛。有问题,因为我的预测是零mean_absolute_error
。
df = pd.read_csv('train.csv')
y=df['Survived']
feature_columns = ['Pclass']
X = df[feature_columns]
# split
X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=1)
model = RandomForestClassifier(random_state=1)
model.fit(X_train, y_train)
predictions = model.predict(X_test)
#validation
val_mae = mean_absolute_error(predictions, y_test)
print("Validation MAE: {:,.0f}".format(val_mae))
列df("幸存")是One-hot-encoded列,即它只包含[0,1]的值,这意味着一个数据点的最高绝对误差可以是1(即,如果你的模型预测1时,它是0,反之亦然;值得注意的是,个别绝对误差只能是0或1,因为你的y_true是0或1,你的预测是0或1)。所以mean_absolute_error也将位于0之间。和1,并且您将此值四舍五入到最接近的整数"Validation MAE: {:,.0f}".format(val_mae)
,因此如果它为<= 0.5,则只显示0。
其他几点:这是一个分类问题,您不应该使用mean_absolute_error它用于回归问题。而是使用confusion_matrix/classification_report。此外,mean_absolute_error接受的值为mean_absolute_error(y_true, y_predicting),因此在您的代码中(如果您要使用mean_absolute_error),它应该看起来像mean_absolute_error(y_test, predictions)。