【Python】python多元线性回归模型


首先导入建模所需要的python库

这里介绍一下各库的含义:

pandas:专门用于数据分析,数据操控和数据可视化。基于Numpy的一种工具,快速便捷地处理表格类数据、数据分析任务,用于表格类二维数据的分析和处理。

numpy:支持多维数组与矩阵运算,针对数组运算提供大量的数据函数库。

matplotlib:Python的绘图库,可与Numpy一起使用,提供了一种有效的matlab开源替代方案。

sklearn:机器学习、数据挖掘、数据分析工具,建立在Numpy.SciPy和matplotlib上

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score

读取训练集和验证集的各自变量和因变量数据,这里的spectral_data是我在datatrain和datatest中选择出来的自变量和因变量数据,然后分别提取出自变量和因变量。

这里有两种提取方法:

注意,如果使用第一种提取方法一定要加双括号。

X_train = datatrain[['NPV_15', 'Oak_15', 'Shade_15', 'Understory_15', 'NPV_16', 'Oak_16', 'dNPV', 'dUnderstory']]
X_train = data_train.loc[:,['NPV_15', 'Oak_15', 'Shade_15', 'Understory_15', 'NPV_16', 'Oak_16', 'dNPV', 'dUnderstory']]
datatrain = pd.read_csv("Simplified_Canopy_defoliation_analysis_training-simp.csv")
datatest = pd.read_csv("Simplified_Canopy_defoliation_analysis_vald-simp.csv")
spectral_data = datatrain[['NPV_15', 'Oak_15', 'Shade_15', 'Understory_15', 'NPV_16', 'Oak_16', 'dNPV', 'dUnderstory', 'LAR']]
X_train = datatrain[['NPV_15', 'Oak_15', 'Shade_15', 'Understory_15', 'NPV_16', 'Oak_16', 'dNPV', 'dUnderstory']]
Y_train = datatrain[['LAR']]
X_test = datatest[['NPV_15', 'Oak_15', 'Shade_15', 'Understory_15', 'NPV_16', 'Oak_16', 'dNPV', 'dUnderstory']]
Y_test = datatest[['LAR']]

删除datatrain数据集中的异常数据,即把含有NAN值的某一行删除即可。

datatrain=datatrain.drop([14],axis=0)  #这里表示删除索引为14行的数据,axis=0表示行,axis=1表示列

计算pearson相关系数矩阵

r = spectral_data.corr()  
for jz in r:  #遍历每行数据并读出  
print(jz)  
r.dropna()   

建立这8个自变量与因变量之间的多元线性回归模型

model = LinearRegression()
model.fit(X_train, Y_train)
a = model.intercept_
b = model.coef_
print("截距:\n", a, "\n回归系数:\n", b)

将验证集中的对应数据代入模型,计算得到因变量的预测值,比较因变量的实测值与预测值之间的误差,绘制二者对应的散点图与拟合曲线,并计算决定系数R2与均方根误差RMSE

test = np.array(Ytest)
pred = np.array(model.predict(Xtest))
Y_pred = pred.flatten()
X = test.flatten()
z = np.polyfit(X, Y_pred, 1)
p = np.poly1d(z)
print(p)
Y_plot = p(X)
plot1 = plt.plot(X, Y_pred, '*', label='original values')
plot2 = plt.plot(X, Y_plot, 'r', label='polyfit values')
plt.title(p)
plt.xlabel('x: Measured values')
plt.ylabel('y: Predicted values')
plt.legend(loc=4)
plt.show()
MSE = mean_squared_error(Y_test,Y_pred)
RMSE = np.sqrt(mean_squared_error(Y_test,Y_pred))
Rsquared = r2_score(Y_test,Y_pred)
print("RMSE:",RMSE)
print("R2:",Rsquared)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值