如何使用来自不同CSV的变量在Python中执行多元线性回归
不同DataFrame特征做多元线性回归的实现方法
sklearn.linear_model.LinearRegression的fit方法对自变量的要求仅为行对应样本、列对应特征的二维结构,和特征是否来自同一个CSV/DataFrame没有关系,只要保证所有特征的样本顺序(此处对应年份)完全对齐即可。
第一步:修正原始代码的笔误
你现有代码里存在变量名引用错误的问题,先修正为可运行的版本:
import pandas as pd from sklearn import linear_model import numpy as np # 读取处理Y数据 Y1 = pd.read_csv(r'C:\Y.csv') Y1 = pd.DataFrame(Y1, columns=['Year','JJASON','JJA','JAS','ASO','SON']) Y1 = Y1[Y1['Year'].between(1984,2020, inclusive="both")] # 读取处理X1数据 X1 = pd.read_csv(r'C:\X1.csv') X1 = pd.DataFrame(X1, columns=['Year','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']) X1 = X1[X1['Year'].between(1984,2020, inclusive="both")] # 读取处理X2数据 X2 = pd.read_csv(r'C:\X2.csv', na_values='NaN') X2 = pd.DataFrame(X2, columns=['Year','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']) X2 = X2[X2['Year'].between(1984,2020, inclusive="both")]
第二步:提取目标字段并拼接自变量
按照要求取X1、X2的3月数据作为特征,Y1的JJASON列作为因变量:
# 校验三个数据集的年份完全对齐,避免样本不匹配 assert (X1['Year'].values == Y1['Year'].values).all() assert (X2['Year'].values == Y1['Year'].values).all() # 提取两个自变量并拼接为二维特征矩阵 X = pd.concat([X1['Mar'], X2['Mar']], axis=1).values # 提取因变量 Y = Y1['JJASON'].values
第三步:拟合多元线性回归
和单变量回归的调用逻辑完全一致:
regr = linear_model.LinearRegression() regr.fit(X, Y) # 查看回归结果 print(f'回归系数(分别对应X1 3月、X2 3月的影响权重):{regr.coef_}') print(f'回归截距:{regr.intercept_}') print(f'模型拟合R²得分:{regr.score(X, Y)}')
内容的提问来源于stack exchange,提问作者user2543
相关产品推荐
相关产品推荐

