【发布时间】:2020-01-23 19:39:02
【问题描述】:
我正在尝试在我的随机森林代码中测量 MAPE(平均绝对百分比误差)值。 MAE 值为 7.5。当我尝试计算 MAPE 时,它会输出:
Accuracy: -inf %
这是我计算 MAPE 的代码。如何使其工作或为什么不计算值。
mape = 100 * (errors / test_labels)
# Calculate and display accuracy
accuracy = 100 - np.mean(mape)
print('Accuracy:', round(accuracy, 2), '%.')
以下是值:
errors: array([ 2.165, 6.398, 2.814, ..., 21.268, 8.746, 11.63 ])
test_labels: array([45, 47, 98, ..., 87, 47, 72])
这些是类型:
var1 int64
var2 int64
var3 float64
var4 int64
var6 float64
var7 int64
var1. float64
dtype: object
示例值,超过 8000 个条目
var1 var2. var3 var4 var5 var6 var7
"420823370" "183" "2019-09-07 22:13:04" "84" "2019-09-07 22:12:46" "72" "00:00:18"
"420521201" "183" "2019-09-07 17:43:03" "84" "2019-09-07 17:42:51" "46" "00:00:12"
"420219554" "183" "2019-09-07 12:43:02" "88" "2019-09-07 12:42:39" "72" "00:00:23"
"419618820" "183" "2019-09-07 02:43:01" "92" "2019-09-07 02:42:46" "80" "00:00:15"
"419618819" "183" "2019-09-07 02:43:01" "84" "2019-09-07 02:42:46" "80" "00:00:15"
"417193989" "183" "2019-09-05 10:42:52" "82" "2019-09-05 10:42:23" "0" "00:00:29"
"416891691" "183" "2019-09-05 05:42:51" "78" "2019-09-05 05:42:49" "72" "00:00:02"
"416587222" "183" "2019-09-05 00:42:51" "88" "2019-09-05 00:42:35" "99" "00:00:16"
"416587223" "183" "2019-09-05 00:42:51" "82" "2019-09-05 00:42:35" "99" "00:00:16"
"416587224" "183" "2019-09-05 00:42:51" "80" "2019-09-05 00:42:35" "99" "00:00:16"
id:Big Int. ts_tuid: Big Int. rssi: numeric. batl: real. ts_diff:interval
这里是代码示例:
从 CSV 加载数据
model = (
pd.read_csv("source.csv", parse_dates=['var3', 'var5'], date_parser=lambda x: pd.to_datetime(x))
.assign(
rssi_ts=lambda x: x.loc[:, 'var3'].astype(int) / 10 ** 9,
batl_ts=lambda x: x.loc[:, 'var5'].astype(int) / 10 ** 9,
ts_diff=lambda x: pd.to_timedelta(x.loc[:, 'ts_diff']).astype(int) / 10 ** 9
)
)
# Labels are the values we want to predict
labels_b = np.array(halti['var4'])
# Remove the labels from the features
# axis 1 refers to the columns
features_r = halti.drop('var4', axis = 1)
features_r2 = list(features_r.columns)
# Convert to numpy array
features_r = np.array(features_r)
# Using Skicit-learn to split data into training and testing sets
from sklearn.model_selection import train_test_split
# Split the data into training and testing sets
train_features, test_features, train_labels, test_labels = train_test_split(features_r, labels_b, test_size = 0.25, random_state = 42)
# Import the model we are using
from sklearn.ensemble import RandomForestRegressor
# Instantiate model with 1000 decision trees
rf = RandomForestRegressor(n_estimators = 1000, random_state = 42)
# Train the model on training data
rf.fit(train_features, train_labels);
# Use the forest's predict method on the test data
predictions = rf.predict(test_features)
# Calculate the absolute errors
errors = abs(predictions - test_labels)
# Print out the mean absolute error (mae)
print('Mean Absolute Error:', round(np.mean(errors), 2), 'degrees.')
mape = 100 * (errors / test_labels)
# Calculate and display accuracy
accuracy = 100 - np.mean(mape)
print('Accuracy:', round(accuracy, 2), '%.')
【问题讨论】:
-
当我们无法运行您的代码时,很难解决您的问题。输入是什么?请输入类型和值。创建一个最小的可重现示例。
-
@MadPhysicist:我添加了'
-
这对我帮助不大。我不知道数组的 dtypes,我仍然无法运行您的代码。请展示一个小示例,我可以将其粘贴到我的编辑器中并实际运行以重现您的错误。
-
@MadPhysicist:我添加了代码和一些示例数据。我希望它会有所帮助。
标签: python scikit-learn random-forest