首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >X有8个特性,但是RandomForestRegressor需要67个特性作为输入

X有8个特性,但是RandomForestRegressor需要67个特性作为输入
EN

Stack Overflow用户
提问于 2022-01-09 17:59:20
回答 2查看 1.7K关注 0票数 0

我想建立一个房价预测应用程序。内容具有用户可以输入输入的特性,然后预测模型将预测价格并将其显示给用户。我正在使用来自Kaggle的数据集来进行预测。当我运行代码时,它会显示一条错误消息:

X有8个特性,但RandomForestRegressor期望67个功能作为输入。

下面是密码。Xy包含来自Kaggle的数据,df是用户输入。Xy是火车组,df是测试。Xy有8个变量,包括目标。df将只检索7个输入(因此它将有7个变量,因为没有从用户接收到的目标变量)。

代码语言:javascript
运行
复制
# Assign to X for input features and Y for target
X = Xy.drop('Price', axis=1)
Y = Xy['Price'].values

# Build Regression Model
model = RandomForestRegressor()
model.fit(X, Y)

df = pd.get_dummies(df, columns=['Location', 'Furnishing', 'Property_Type_Supergroup', 'Size_Type'])
# Apply Model to Make Prediction
prediction = model.predict(df)

我试图在网上搜索解决方案,但对我的代码没有任何作用。希望有人能帮忙。

EN

回答 2

Stack Overflow用户

发布于 2022-01-09 20:00:09

如果不看到你正在拟合模型的数据,就有点难以分辨了。但是,在错误和代码之间,您可能是在67个特性的数据框架上对模型进行拟合。您调用fit的数据框架需要与您所预测的数据框架相同(至少在特性方面是如此)。

很抱歉,如果这个答案是多余的,如果没有看到数据和准确的错误,就很难判断。

票数 0
EN

Stack Overflow用户

发布于 2022-01-09 21:33:02

"X有8个特性,但RandomForestRegressor期望67个功能作为输入。“

我假设这是您使用的标准数据集,在解压缩和加载之后,它有以下文件:

代码语言:javascript
运行
复制
sample_submission.csv
test.csv
data_description.txt
train.csv 

如果检查train.csv和test.csv的形状:

代码语言:javascript
运行
复制
train = pd.read_csv('./house_prices/train.csv')
test = pd.read_csv('./house_prices/test.csv')
print(f'Train shape : {train.shape}')
print(f'Test shape : {test.shape}')
#Train shape : (1460, 81)
#Test shape : (1459, 80)

这表明您删除或删除了一些列/特性/属性,并将它们从81还原为67,所以到目前为止没有问题。问题是,一旦您在数据预处理阶段使用pd.get_dummies()将分类变量转换为数值变量,然后使用将数据拆分为x_train & y_train,使用相同的 dffit()模型。最后,您可以通过x_test通过y_pred = model.predict(x_test)进行预测。否则,df的形状与X不匹配(其中一列有8列,另一列有67列)!!

所以我建议,首先df应该分开:

代码语言:javascript
运行
复制
from sklearn import metrics
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor

#  Chossing features for predicting the target variable
x = df

# Data split on df
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size = 0.2 , random_state=42)

# Apply RandomForestRegressor
model = RandomForestRegressor(n_estimators=300, max_depth=13, random_state=0)
model.fit(x_train,y_train)

# Predicting the data using the model
y_pred = model.predict(x_test)

# Evaluating the model 
print(metrics.r2_score(y_test,y_pred))

我包括下列供你参考的帖子:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70644049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档