X 有 8 个特征,但 RandomForestRegressor 预计有 2924 个特征作为输入

问题描述 投票:0回答:1

这可能看起来很微不足道,但我就是不明白这个问题。基本上,我正在使用 Kaggle 数据集和 RandomForestRegressor 为我的城市构建一个餐厅推荐系统。

我构建了模型,现在希望模型在给定 4 个参数时推荐一家好餐厅:位置、大约成本、餐厅类型和投票数。然而,它返回一个值错误:X 有 8 个特征,但 RandomForestRegressor 期望 2924 个特征作为输入。

这就是我正在尝试运行的:

import joblib
import numpy as np
from sklearn.preprocessing import StandardScaler

model = joblib.load('my_model.pkl')
scaler = joblib.load('scaler.pkl')

def preprocess_input(location, type_, cost, votes):
    one_hot_location = [1 if loc == location else 0 for loc in ['Whitefield', 'Koramangala', 'Indiranagar']]
    one_hot_type = [1 if t == type_ else 0 for t in ['Casual Dining', 'Quick Bites', 'Cafe']]
    
    scaled_features = scaler.transform([[cost, votes]])
    
    return np.array(one_hot_location + one_hot_type + list(scaled_features[0])).reshape(1, -1)

input_data = preprocess_input('Whitefield', 'Casual Dining', 1000, 500)

prediction = model.predict(input_data)

print(f"Predicted restaurant: {prediction}")

列车数据的形状:

X_train.shape
=
(41373, 2924)
y_train.shape
=
(41373,)

这就是我的数据集的样子

我是初学者,请帮助我!谢谢!

python dataframe machine-learning neural-network random-forest
1个回答
0
投票

您的训练数据有

2924
列。当您使用
model.fit
训练模型时,大概它会创建一个包含
2924
特征的随机森林。因此,为了进行推理,您需要提供相同数量的特征。而您仅提供
8
功能:来自
3
one-hot encoding of location
、来自
3
one-hot encoding of type
、来自
2
cost
votes

请注意您对训练数据进行的任何预处理。您必须对测试数据应用相同的预处理,否则它们属于不同的分布。我相信了解 fit

fit_transform
 之间的 
差异将会有所帮助,也许至关重要。

© www.soinside.com 2019 - 2024. All rights reserved.