使用scikit-learn线性回归处理新冠数据集报invalid type promotion错误的原因
报错核心原因
scikit-learn的线性回归模型要求输入的所有特征必须为数值类型,你选择的特征列表中包含了datetime64[ns]类型的date列,NumPy无法将日期类型和浮点类型统一为兼容的数据类型,因此触发了invalid type promotion类型升级失败报错。
修复方案
方案1:不需要使用日期特征时,直接从特征列表中移除date列
reg = linear_model.LinearRegression() # 仅保留数值型特征 x = ['people_vaccinated', 'population'] y = 'new_deaths' reg.fit(df[x], df[y])
方案2:需要保留日期信息时,先将日期转换为数值格式
你可以根据业务需要选择以下任意一种转换方式:
- 转换为秒级时间戳
- 转换为距离数据集最早日期的天数
示例代码如下:
# 方式1:转秒级时间戳 df['date_timestamp'] = df['date'].astype('int64') // 10**9 # 方式2:转距离最早日期的天数 df['date_diff_days'] = (df['date'] - df['date'].min()).dt.days # 用转换后的数值型日期特征建模 reg = linear_model.LinearRegression() x = ['date_diff_days', 'people_vaccinated', 'population'] y = 'new_deaths' reg.fit(df[x], df[y])
额外注意事项
- scikit-learn的所有传统机器学习模型都不支持直接输入字符串、日期等非数值类型特征,使用前必须转换为数值格式
- 后续如果需要使用
location列作为特征,需要通过独热编码、标签编码等方式转换为数值后再使用
内容的提问来源于stack exchange,提问作者Bruce Murdock
相关产品推荐
相关产品推荐

