【Python】python多元线性回归模型
首先导入建模所需要的python库这里介绍一下各库的含义:pandas:专门用于数据分析,数据操控和数据可视化。基于Numpy的一种工具,快速便捷地处理表格类数据、数据分析任务,用于表格类二维数据的分析和处理。numpy:支持多维数组与矩阵运算,针对数组运算提供大量的数据函数库。matplotlib:Python的绘图库,可与Numpy一起使用,提供了一种有效的matlab开源替代方案。sklea
首先导入建模所需要的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)
更多推荐
所有评论(0)