как представить прогноз вместе с исходными данными с помощью RandomForestRegressor? - PullRequest
0 голосов
/ 10 июля 2020

Я пытаюсь предсказать метку из данных в DataFrame с помощью RandomForestRegressor.

Для этого я сначала удаляю бесполезные столбцы, чтобы регрессор не пытался их использовать, особенно идентификатор строки, а затем использовать функция get_dummy () для преобразования строковых значений в индикаторы, а затем разделения данных на обучающие и тестовые образцы.

# columns selection (let say there was also a column 'ID' so we drop this one)
features = features[['L', 'A', 'B']] 

# string to indicators
features = pd.get_dummies(features) 

# Saving labels
labels = np.array(features['L']) 

# Remove the labels from the features
features = features.drop('L', axis = 1) 

# Convert to numpy array
features = np.array(features)

# Divide into training and testing samples
train_features, test_features, train_labels, test_labels = train_test_split(features, labels, test_size = 0.33, random_state = 42)

# Instantiate model and fit
rf = RandomForestRegressor(n_estimators = 100, random_state = 42, max_depth = 8)
rf.fit(train_features, train_labels)

# predict
predictions = rf.predict(test_features)

Итак, на этом этапе у меня есть образец данных, выглядящий как

A   B_b1 B_b2
1   0    1
2   1    0

И прогнозы выглядят как L 100 200

Как я могу после получения прогноза поместить его рядом с исходными данными, если ссылка с идентификатором потеряна? Я ожидаю чего-то вроде:

ID   A   B    L
11   1   b2   100
12   2   b1   200

Я могу думать о сложных способах (в основном из-за преобразования из pd.dataframe в np.array), но что было бы наиболее прямым и читаемым (не самым эффективным ) путь? Спасибо!

1 Ответ

0 голосов
/ 10 июля 2020

predictions и test_features должны иметь одинаковую длину, поэтому вы можете просто объединить их в Dataframe:

results = pd.DataFrame(test_features, columns=["A", "B"])
results["L"] = predictions 

Однако я бы также сказал, что вам не нужно go через этап преобразования features в np.array, поскольку train_test_split и rf.fit будут принимать pandas .DataFrame в качестве входных данных.

...