如何用LinearRegression预测每月受害者总数?数据处理与建模求助
解决方案步骤
1. 统计每月受害者总数
先从原数据集按年份+月份分组,统计每月的受害者总数。假设数据集每行对应一个受害者,用groupby配合size()计算:
# 按年、月分组,统计每月受害者总数,生成新DataFrame monthly_victims = df_pre.groupby(['Year', 'Month']).size().reset_index(name='Total_Victims')
如果有专门记录单条数据受害者数量的列(比如Victim_Count),则用sum()求和:
monthly_victims = df_pre.groupby(['Year', 'Month'])['Victim_Count'].sum().reset_index(name='Total_Victims')
生成的monthly_victims包含Year、Month、Total_Victims三列,维度完全匹配后续建模需求。
2. 训练线性回归模型
明确模型的特征(X)和目标变量(y):
- 特征:选择
Year和Month作为时间维度的输入(仅用月份会忽略年度趋势,建议保留年份) - 目标:每月受害者总数
Total_Victims
注意:sklearn的fit方法要求特征必须是二维数组,需用双层方括号[[]]包裹列名,避免维度不匹配错误:
from sklearn.linear_model import LinearRegression # 初始化模型 reg = LinearRegression() # 准备特征与目标变量 X = monthly_victims[['Year', 'Month']] y = monthly_victims['Total_Victims'] # 训练模型 reg.fit(X, y)
3. 常见问题说明
- 维度不匹配:之前出错是因为传入的特征是一维Series(比如
df_pre['Month']),改用双层方括号[['Month']]即可转为二维DataFrame,解决维度问题。 - 用
Vict Age拟合错误:Vict Age是单个受害者的年龄,与每月总数无直接线性关联,必须先聚合为月度总数再建模。
内容的提问来源于stack exchange,提问作者Doublenine_
相关产品推荐
相关产品推荐

