You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ridge回归预测模型报错求助:Expected 2D array及Y变量指定问题

解决电影票房预测模型的两个核心问题

问题1:数组重塑ValueError的原因及解决

你遇到的错误核心是给模型传的不是符合要求的训练/预测数据:

  • 当前代码里steps.fit(user_ohe, user_num)传的是字符串列表(比如["user_genre", ...]),这不是模型需要的特征数据,模型需要的是真实的样本特征值,且必须是二维结构(比如形状为(n_samples, n_features))。
  • 另外,用户输入的预算、时长是字符串类型,需要先转换成数值类型。

不需要单独调用reshape(-1,1),只要把输入整理成二维结构化数据(比如Pandas DataFrame)就能解决这个问题。

问题2:Y变量(总票房)的指定方式

代码不会自动生成Y变量,你必须具备带标签的训练数据集:

  • 训练模型时,需要明确传入X(所有电影特征,如类型、预算、导演等)和Y(对应的真实总票房),模型才能学习特征与票房之间的关联。
  • 用户输入的是待预测的新样本,不是训练数据,只有模型训练完成后,才能用它预测新样本的票房。

修正后的完整代码示例

import pandas as pd
from sklearn.preprocessing import OneHotEncoder
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
from sklearn.linear_model import Ridge

# --------------------------
# 第一步:准备训练数据集(示例数据,实际需替换为真实电影数据)
# 必须包含特征列和总票房标签列
train_data = pd.DataFrame({
    "genre": ["Action", "Comedy", "Drama"],
    "budget": [100000000, 50000000, 20000000],
    "runtime": [120, 90, 110],
    "studio": ["Warner Bros", "Disney", "Fox"],
    "director": ["Nolan", "Feig", "Eastwood"],
    "writer": ["Smith", "Jones", "Brown"],
    "gross_revenue": [500000000, 200000000, 150000000]
})

# 定义特征列:类别特征和数值特征
cat_features = ["genre", "studio", "director", "writer"]
num_features = ["budget", "runtime"]
# 定义标签列(总票房)
y_train = train_data["gross_revenue"]

# --------------------------
# 第二步:构建预处理管道和模型
# 预处理:类别特征独热编码,数值特征直接保留
preprocessor = ColumnTransformer(
    transformers=[
        ("cat", OneHotEncoder(handle_unknown="ignore"), cat_features),
        ("num", "passthrough", num_features)
    ])

# 完整管道:预处理 + 回归模型(票房是连续值,用回归任务)
model_pipeline = Pipeline(steps=[
    ('preprocessor', preprocessor),
    ('regressor', Ridge())
])

# 训练模型:传入训练特征和标签
model_pipeline.fit(train_data[cat_features + num_features], y_train)

# --------------------------
# 第三步:处理用户输入并预测票房
while True:
    user_movie = input("Enter the name of your movie: ")
    user_genre = input("What is the genre of your movie? ")
    user_budget = float(input("What is your movie's budget? "))  # 转数值类型
    user_runtime = float(input("What is your movie's runtime? "))  # 转数值类型
    user_studio = input("Who is your studio partner? ")
    user_director = input("Who is the director of your movie? ")
    user_writer = input("Who is your movie's writer? ")

    # 将用户输入整理成二维DataFrame(模型要求二维输入)
    user_input = pd.DataFrame({
        "genre": [user_genre],
        "budget": [user_budget],
        "runtime": [user_runtime],
        "studio": [user_studio],
        "director": [user_director],
        "writer": [user_writer]
    })

    # 预测票房
    predicted_gross = model_pipeline.predict(user_input)
    print(f"Predicted Gross Revenue for {user_movie}: ${predicted_gross[0]:,.2f}")

    continue_pred = input("Predict another movie? (y/n): ")
    if continue_pred.lower() != 'y':
        break

关键说明

  • 训练数据:实际使用时,需要替换成包含大量真实电影数据的数据集,数据量越大,模型预测效果越好。
  • 数值转换:用户输入的预算、时长必须转为数值类型,否则模型无法处理。
  • 管道作用:预处理管道会自动处理类别特征的独热编码,无需手动对用户输入做额外的reshape操作。

内容的提问来源于stack exchange,提问作者chiggywiggy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 03:50:19