SciKit 当数据包含字符串或布尔值时学习

时间:2021-06-30 08:42:38

标签: python dataframe scikit-learn random-forest

我有一个看起来像这样的数据框(它显然要大得多):

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

我想看看特征 pointsisAvailablefrequencyScore 的影响有多大。我想使用随机森林:

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'

问题:

  1. 如何预处理数据?布尔变量会发生什么变化?
  2. 在 X 中甚至包含 id 列是错误的吗?

我想使用类似 df = df.astype({"a": int, "b": complex}) 的东西,但我真的不知道在这种情况下如何使用,我读到有特殊的编码算法。

1 个答案:

答案 0 :(得分:1)

首先,您必须从 score 数据集中删除 X 列:它是您数据的标签,因此不应将其用作特征。

其次,假设 id 列是您数据的标识符,您应该将其从 X 中删除。这就像你试图分析一组人的体重数据集:你会删除他们的名字,因为他们的名字和他们的体重之间没有相关性。

最后,处理布尔变量,有一些编码方法,如你所说(例如this one),但由于值只能是01,如果你转换 False = 0, True = 1 应该没问题 您可以使用此代码来完成(假设 df 是您的 DataFrame 的名称):

df['isAvailable'] = (df['isAvailable'] == True).astype(int)
相关问题