从IC曲线提取特征,采用随机森林对电池SOH进行估计

这篇具有很好参考价值的文章主要介绍了从IC曲线提取特征,采用随机森林对电池SOH进行估计。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

从IC曲线提取特征,采用随机森林对电池SOH进行估计

现我们成立了梦龙工作室,工作室成员皆为985在读理工科学生,排名前20%,5%等,获得过国赛一等奖,大数据杯二等奖,美赛M奖,以一作发表ei会议,SCI二区等。旨在帮助大学生参与竞赛,如mathorcup 大数据杯,国赛,美赛,电工杯等等,入群可提问比赛或数据处理有关问题,群内开放讨论,欢迎有兴趣的朋友加群!群号:684715652

什么是SOH?

本文采用电池容量衰减定义SOH,,给出的 SOH定义如下:
从IC曲线提取特征,采用随机森林对电池SOH进行估计
即电池当前容量处于电池额定容量的百分数。

随机森林

随机森林可以看我的文章https://blog.csdn.net/qq_51444641/article/details/122783753?spm=1001.2014.3001.5501

本个项目意义

如今电动汽车越来越普及,对于电池的要求也越来越高。现在已经有额定续航500~600km的电池,特斯拉所推出的Roadster额定续航高达1000km。
但是电池的实际容量往往是不能达到额定容量的,所以电车的实际续航也不可能达到额定的续航里程,此时对电池容量的准确估计便十分重要。对电池容量的准确估计能够使驾驶人准确判断何时应进行充电。同时在电池回收市场中,电池的实际容量对于电池的估价有重要的参考价值。

估计方法

不废话,开始正文。

特征提取

从IC曲线提取特征,采用随机森林对电池SOH进行估计

IC曲线即电池充放电过程中电流随电压的变化曲线。
由于不同电池的放电以及电池的每个周期放电情况由于使用人的习惯会产生很大的差异,所以我们并不采用放电周期的IC曲线。我们从充电周期的IC曲线中提取特征。将不同SOH下的充电周期IC曲线画出来进行一个渐进对比,我们可以看出曲线随着容量的下降变化明显。

接着,我们对不同电压位置的dQ/dV进行计算,具体计算公式:
从IC曲线提取特征,采用随机森林对电池SOH进行估计
画出dQ/dV随电压变化的曲线:
从IC曲线提取特征,采用随机森林对电池SOH进行估计
可以看出该曲线随容量的下降变化也较明显,尤其是峰值与峰值所处位置,于是我们将峰值与峰值所处位置作为选定的两个特征。紧接着根据文献从IC曲线提取特征,采用随机森林对电池SOH进行估计
再结合实际情况,电动车的充电范围一般在40%~90%的范围内,于是我们将选取的电压范围限定在3.85v-4.09v。0.03v作为一个选取区间,每隔0.03v取一个dQ/dV值,将其作为特征F1-F8。而后将0.04v作为一个区间,对每个区间的充电时间进行测量,将其作为特征F9-F14,最后将峰值与峰值所处位置作为F15-F16,共提取16个特征。

利用xgboost实现SOH的预测

本个项目采用马里兰数据集,我们先将马里兰数据集中的每个Cell转换为csv文件,具体转换方法见我文章https://blog.csdn.net/qq_51444641/article/details/124974293?spm=1001.2014.3001.5501
转换完成后进行数据的读取

###Cell1提取文件名
strseq = []
for i in range(10):
    strseq.append('cyc'+'0'+str(i)+'00')

for i in range(10,15):
    strseq.append('cyc'+str(i)+'00')
strseq.append('cyc1600')
for i in range(18,34):
    strseq.append('cyc' + str(i) + '00')

for i in range(35,47):
    strseq.append('cyc' + str(i) + '00')
strseq.append('cyc4800')
for i in range(50,83):
    strseq.append('cyc' + str(i) + '00')

每个Cell类似,先将文件名全部输出,每个文件名对应每个Cell充电循环中的一个circle。

path = 'Cell1.'
path_q = '.C1ch.q.xlsx'

C1ch_q = []
for i in strseq:
    C1ch_q.append(pd.read_excel(path+i+path_q,header=None))
path_v = '.C1ch.v.xlsx'

C1ch_v = []
for i in strseq:
    C1ch_v.append(pd.read_excel(path+i+path_v,header=None))

path_t = '.C1ch.t.xlsx'
C1ch_t = []
for i in strseq:
    C1ch_t.append(pd.read_excel(path+i+path_t,header=None))

将每个Cell的数据分别输出到t(充电时间)、v(充电电压)、q(电量电荷)


###计算出每个充电周期的电池容量,即训练所用y值
C1ch_SOH = np.arange(len(C1ch_q))

for i in range(len(C1ch_q)):
    C1ch_SOH[i] = float(max(C1ch_q[i].values))
C1ch_SOH = C1ch_SOH.astype(float)
for i in range(1,len(C1ch_q)):
    C1ch_SOH[i] = C1ch_SOH[i]/C1ch_SOH[0]
C1ch_SOH[0] = C1ch_SOH[0]/C1ch_SOH[0]

C1ch_SOH = pd.DataFrame(C1ch_SOH)

y_Cell1 = C1ch_SOH

而后提取出每个电池电荷量中的电量最大值(基本是第一个circle的第一个电荷量值)作为每个circle的电池容量。将其输出到y_Cell中,每个Cell的操作一样。

而后将每个circle对应的容量都转化为百分数,即SOH。

##将电池剩余电量转化为百分比
C1ch_q_m = []
for q in C1ch_q:
    q = np.array(q,dtype=float)
    qmax = q[-1]

    for i in range(len(q)):
        q[i] = q[i]/qmax
    q = pd.DataFrame(q)
    C1ch_q_m.append(q)

而后将电池的产量与容量整理为一个Dataframe.

而后进行特征的提取

##选取电压范围:3.85~4.09,提取特征

highest_v = []
for i in range(len(C1ch_q)):
    highest_v.append(C1ch_v_q_1[i].iloc[-1,0])
min_highest_v = min(highest_v)

###提取不同电压段电压上升所需时间
feature1 = []
for i in range(len(C1ch_q)):
    count_1 = []
    for j in range(6):
        count_1.append(len(C1ch_v_q_1[i][(C1ch_v_q_1[i].v > 3.85 + 0.04*j) & (C1ch_v_q_1[i].v < (3.85+0.04*(j+1)) )]))

    feature1.append(count_1)

###提取IC曲线的特征
feature2 = []
for i in range(len(C1ch_q)):
    count_2 = []
    for j in range(8):
        d = C1ch_v_q_1[i][(C1ch_v_q_1[i].v > 3.85 + 0.03*j) & (C1ch_v_q_1[i].v < (3.85+0.03*(j+1) ) ) ]
        d_q_v = (d.iloc[-1 ,1]-d.iloc[0 ,1])/(d.iloc[-1 ,0]-d.iloc[0 ,0])
        count_2.append(d_q_v)
    max_d_q_v = max(count_2)
    max_d_q_v_id = count_2.index(max_d_q_v)
    print(max_d_q_v_id)
    count_2.append(max_d_q_v)
    feature2.append(count_2)

feature = []
for i in range(len(C1ch_q)):
    feature.append(feature1[i]+feature2[i])

feature = pd.DataFrame(feature) #样本特征

将样本特征全部提取完毕后带入xgboost进行预测:

###随机森林
X_train, X_test, y_train, y_test = train_test_split(feature,y,test_size=0.2,random_state=0)

regressor = RandomForestRegressor(n_estimators=200, random_state=0)
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)

from sklearn import metrics

print('Mean Absolute Error:', metrics.mean_absolute_error(y_test, y_pred))
print('Mean Squared Error:', metrics.mean_squared_error(y_test, y_pred))
print('Root Mean Squared Error:',
      np.sqrt(metrics.mean_squared_error(y_test, y_pred)))

最终所的误差小于0.4%,采用随机取样所得预测与实际值对比图:
从IC曲线提取特征,采用随机森林对电池SOH进行估计
由图可见预测效果不错。

下面是寻找最优参数代码:


##以下代码用于寻找最优参数
def build_model(optimizer):
    grid_model = Sequential()
    grid_model.add(LSTM(100,return_sequences=True,input_shape=(12000,3)))
    grid_model.add(LSTM(50))
    grid_model.add(Dropout(0.2))
    grid_model.add(Dense(1))
    

    grid_model.compile(loss = 'mse',optimizer = optimizer)

    return grid_model

grid_model = KerasRegressor(build_fn=build_model, verbose=1, validation_data=(testX, testY))
parameters = {'batch_size' : [16,20],
              'epochs' : [8,10],
              'optimizer' : ['adam','Adadelta'] }

grid_search  = GridSearchCV(estimator = grid_model,
                            param_grid = parameters,
                            cv = 2)
grid_search = grid_search.fit(trainX,trainY)
my_model=grid_search.best_estimator_.model

所需导入库:

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
from tensorflow.python.keras.models import Sequential
from tensorflow.python.keras.layers import LSTM
from tensorflow.python.keras.layers import Dense, Dropout
from sklearn.preprocessing import MinMaxScaler
from keras.wrappers.scikit_learn import KerasRegressor
from sklearn.model_selection import GridSearchCV
import os
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor

其实最终所得结果较好在意料之中,因为特征中包含了dQ/dv,一个电池容量有关的特征,相当于特征中包含了预测对象中的某些属性。这在实际中并不实用,因为你不能在预测前就知道一个电池的容量。本文仅供参考,引用请标注来源。文章来源地址https://www.toymoban.com/news/detail-409905.html

到了这里,关于从IC曲线提取特征,采用随机森林对电池SOH进行估计的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python实现对森林生物量进行随机森林回归预测

    随机森林算法的基本思想是基于多颗决策树的集成学习过程,使用场景广泛,一般的分类回归问题都可以使用。我们以光学影像为例,来估测森林生物量。 1、线性关系:回归关系应该是线性的,即自变量和因变量之间的关系应该是线性的。 2、独立性:自变量之间应该是独立

    2024年02月17日
    浏览(29)
  • 使用python中的随机森林进行数据分类预测

    以下是使用Python中的随机森林进行数据分类预测的示例代码: 这个示例代码使用 sklearn 库中的 RandomForestClassifier 类来构建随机森林模型。首先,将数据集划分为训练集和测试集,然后创建一个随机森林模型,并使用训练集对其进行训练。最后,用测试集数据进行预测,并计算

    2024年02月16日
    浏览(28)
  • 使用IBM SPSS Modeler进行随机森林算法预测

    IBM SPSS产品系列最主要的两款软件为IBM SPSS Statistics和IBM SPSS Modeler。 IBM SPSS Statistics主要用于统计分析,如均值比较、方差分析、相关分析、回归分析、聚类分析、因子分析、非参数检验等等。一般应用于数据量较小的分析,比如在学校的时候用的多,一般直接录入数据或导入

    2023年04月13日
    浏览(49)
  • 基于kinova机器人搭建实际抓取环境;采用级联网络Cascade R-CNN提取特征

    点击这里下载源码 基于Pytorch深度学习框架进行整体环境搭建,包括数据集制作,模型训练,模型测试,模型优化;基于kinova机器人搭建实际抓取环境;采用级联网络Cascade R-CNN提取特征。 一、针对机器人多物体抓取检测研究问题,选用Cascade R-CNN为基础网络框架,Cascade R-CNN是

    2024年02月05日
    浏览(31)
  • 锂离子电池健康状态估计简介(一):基于Python的数据处理计算SOH,RUL,CCCT,CVCT

    锂离子电池无论是在军用还是民用领域都得到了广泛的应用,在锂离子电池健康评估中主要关注的参数有SOH和RUL。准确对其进行健康状态(Stateof Health, SOH)评估及剩余使用寿命(Remaning Useful Life, RUL)预测对于提高电池安全性与使用寿命具有重要意义 后续源码仓库:https://github.co

    2024年02月01日
    浏览(34)
  • 【Python】使用Pandas和随机森林对鸢尾花数据集进行分类

    我在鼓楼的夜色中 为你唱花香自来 在别处 沉默相遇和期待 飞机飞过 车水马龙的城市 千里之外 不离开 把所有的春天 都揉进了一个清晨 把所有停不下的言语变成秘密 关上了门 莫名的情愫啊 请问 谁来将它带走呢 只好把岁月化成歌 留在山河                      🎵

    2024年04月26日
    浏览(25)
  • python:使用sklearn库的KFold模块进行随机森林十折交叉验证

    作者:CSDN @ _养乐多_ 本文记录了使用sklearn库的KFold模块进行随机森林十折交叉验证的代码。 一、代码 二、代码解释 在上述代码中 首先,导入了RandomForestClassifier(随机森林分类器)、cross_val_score(交叉验证函数)、KFold(交叉验证生成器)和load_iris(加载鸢尾花数据集)等

    2024年01月16日
    浏览(27)
  • 通过向量回归、随机森林回归、线性回归和K-最近邻回归将预测结果绘制成图表进行展示

    附件里会给出全部数据链接 导入需要用到的Python库。pandas用于处理数据,numpy用于科学计算,matplotlib.pyplot用于绘图,FontProperties用于设置字体属性。在这里我们导入了中文字体PingFang Bold.ttf,以后进行绘图时就可以使用这个字体了。 打开了名为“中国各地现货棉花价格.xlsx”

    2024年02月08日
    浏览(28)
  • 随手笔记——演示如何提取 ORB 特征并进行匹配

    演示如何提取 ORB 特征并进行匹配 特征点由关键点(Key-point)和描述子(Descriptor)两部分组成。 ORB 特征亦由关键点和描述子两部分组成。它的关键点称为“Oriented FAST”,是一种改进的 FAST 角点。它的描述子称为 BRIEF(Binary Robust Independent Elementary Feature)。因此,提取ORB 特征

    2024年02月16日
    浏览(25)
  • Python利用线性回归、随机森林等对红酒数据进行分析与可视化实战(附源码和数据集 超详细)

    需要源码和数据集请点赞关注收藏后评论区留言私信~~~ 下面对天池项目中的红酒数据集进行分析与挖掘 1:导入模块 2:颜色和打印精度设置 3:获取数据并显示数据维度 字段中英文对照表如下   然后利用describe函数显示数值属性的统计描述值  显示quality取值的相关信息 显示

    2023年04月13日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包