我有一个看起来像这样的数据框(它显然要大得多):
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'
问题:
id
列是错误的吗?我想使用类似 df = df.astype({"a": int, "b": complex})
的东西,但我真的不知道在这种情况下如何使用,我读到有特殊的编码算法。
答案 0 :(得分:1)
首先,您必须从 score
数据集中删除 X
列:它是您数据的标签,因此不应将其用作特征。
其次,假设 id
列是您数据的标识符,您应该将其从 X
中删除。这就像你试图分析一组人的体重数据集:你会删除他们的名字,因为他们的名字和他们的体重之间没有相关性。
最后,处理布尔变量,有一些编码方法,如你所说(例如this one),但由于值只能是0
或1
,如果你转换 False = 0
, True = 1
应该没问题
您可以使用此代码来完成(假设 df
是您的 DataFrame 的名称):
df['isAvailable'] = (df['isAvailable'] == True).astype(int)