|
发表于 2021-7-8 00:10:03
|
显示全部楼层
网上找了个python代码,然后把你的数据整理了一下,得到以下结果.我也不知道结果是啥
参考网址:https://blog.csdn.net/tonydz0523/article/details/84591954
参考代码:
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
from sklearn.linear_model import BayesianRidge, LinearRegression, ElasticNet
from sklearn.svm import SVR
from sklearn.ensemble.gradient_boosting import GradientBoostingRegressor # 集成算法
from sklearn.model_selection import cross_val_score # 交叉验证
from sklearn.metrics import explained_variance_score, mean_absolute_error, mean_squared_error, r2_score
import matplotlib.pyplot as plt
import seaborn as sns
# %matplotlib inline
# 数据导入
df = pd.read_excel(r'E:\L_Programming\L_Python\py_3.7\E_projects\Motor\TEST.xlsx', #此处为数据文件路径.
usecols=["I","W","O"])
# 可视化数据关系
sns.set(style='whitegrid', context='notebook') #style控制默认样式,context控制着默认的画幅大小
sns.pairplot(df, size=2)
corr = df.corr()
# 相关度热力图
sns.heatmap(corr, cmap='GnBu_r', square=True, annot=True)
plt.savefig('xx.png')
# 自变量
X = df[['I', 'W']].values
# 因变量
y = df[df.columns[-1]].values
# 设置交叉验证次数
n_folds = 5
# 建立贝叶斯岭回归模型
br_model = BayesianRidge()
# 普通线性回归
lr_model = LinearRegression()
# 弹性网络回归模型
etc_model = ElasticNet()
# 支持向量机回归
svr_model = SVR()
# 梯度增强回归模型对象
gbr_model = GradientBoostingRegressor()
# 不同模型的名称列表
model_names = ['BayesianRidge', 'LinearRegression', 'ElasticNet', 'SVR', 'GBR']
# 不同回归模型
model_dic = [br_model, lr_model, etc_model, svr_model, gbr_model]
# 交叉验证结果
cv_score_list = []
# 各个回归模型预测的y值列表
pre_y_list = []
# 读出每个回归模型对象
for model in model_dic:
# 将每个回归模型导入交叉检验
scores = cross_val_score(model, X, y, cv=n_folds)
# 将交叉检验结果存入结果列表
cv_score_list.append(scores)
# 将回归训练中得到的预测y存入列表
pre_y_list.append(model.fit(X, y).predict(X))
### 模型效果指标评估 ###
# 获取样本量,特征数
n_sample, n_feature = X.shape
# 回归评估指标对象列表
model_metrics_name = [explained_variance_score, mean_absolute_error, mean_squared_error, r2_score]
# 回归评估指标列表
model_metrics_list = []
# 循环每个模型的预测结果
for pre_y in pre_y_list:
# 临时结果列表
tmp_list = []
# 循环每个指标对象
for mdl in model_metrics_name:
# 计算每个回归指标结果
tmp_score = mdl(y, pre_y)
# 将结果存入临时列表
tmp_list.append(tmp_score)
# 将结果存入回归评估列表
model_metrics_list.append(tmp_list)
df_score = pd.DataFrame(cv_score_list, index=model_names)
df_met = pd.DataFrame(model_metrics_list, index=model_names, columns=['ev', 'mae', 'mse', 'r2'])
# 各个交叉验证的结果
print(df_score)
print(df_met)
### 可视化 ###
# 创建画布
plt.figure(figsize=(9, 6))
# 颜色列表
color_list = ['r', 'g', 'b', 'y', 'c']
# 循环结果画图
for i, pre_y in enumerate(pre_y_list):
# 子网络
plt.subplot(2, 3, i+1)
# 画出原始值的曲线
plt.plot(np.arange(X.shape[0]), y, color='k', label='y')
# 画出各个模型的预测线
plt.plot(np.arange(X.shape[0]), pre_y, color_list, label=model_names)
plt.title(model_names)
plt.legend(loc='lower left')
plt.savefig('xxx.png')
plt.show()
数据导成三列,I,W,O
输出图像1
输出图像2
得到结果:
0 1 2 3 4
BayesianRidge -50.453559 -0.373647 0.161773 0.744801 -0.199644
LinearRegression -50.571180 -0.379227 0.161765 0.745467 -0.195883
ElasticNet -49.738647 -0.360971 0.161715 0.742455 -0.214294
SVR -14.903784 0.964464 0.992775 0.976152 -2.252350
GBR -3.684508 0.170723 0.396638 0.499717 -0.377717
ev mae mse r2
BayesianRidge 0.932674 1.561085 3.773556 0.932674
LinearRegression 0.932675 1.561234 3.773519 0.932675
ElasticNet 0.932663 1.560602 3.774189 0.932663
SVR 0.987519 0.379886 0.734005 0.986904
GBR 0.999840 0.071407 0.008941 0.999840
最后是什么意思...还得请你自己研究了
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|