【发布时间】:2021-09-12 09:49:25
【问题描述】:
我有一个看起来像这样的数据框(显然要大得多):
id points isAvailable frequency Score
abc1 325 True 93.0 0.01
def2 467 False 80.1 0.59
ghi3 122 True 90.3 1
jkl4 546 True 84.0 0
mno5 355 False 93.5 0.99
我想看看points、isAvailable 和frequency 对Score 的影响有多大。我想使用随机森林:
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from matplotlib import pyplot as plt
plt.rcParams.update({'figure.figsize': (12.0, 8.0)})
plt.rcParams.update({'font.size': 14})
X = df
y = df['Score']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=12)
rf = RandomForestRegressor(n_estimators=100)
rf.fit(X_train, y_train)
我收到以下错误:ValueError: could not convert string to float: 'abc1'
问题:
- 如何预处理数据?布尔变量会发生什么变化?
- 在 X 中甚至包含
id列是错误的吗?
我正在考虑使用 df = df.astype({"a": int, "b": complex}) 之类的东西,但我真的不知道在这种情况下如何使用,我读到有特殊的编码算法。
【问题讨论】:
-
@Mario 谢谢,这正是我从 mljar 链接中获取的。但现在我意识到我应该在 X 中添加一个额外的列,对于这些功能名称,我想?
-
正确并使用
SHAP可以满足您的要求。您可以查看这些列/功能对输出的贡献,在您的情况下为score。
标签: python dataframe scikit-learn random-forest