最近在做电池续航测试,不同型号参数的动力电池可以跑40-70多公里,开个小电动出去测里程,累的要死,正好要到数据集,弄个模型预测一波,只用输入电池参数,就可以预测里程,舒服~ (实际样本太少,不足100个,预测效果与实际测量在上下3公里左右波动)
电池数据集获取及相关经验指导请加我球球877562830

华丽的分割线---------------------------------------------------------------------------
用了三种方法:

  1. 支持向量机回归
  2. 多元回归函数
  3. 随机森林回归

支持向量机回归预测代码如下:

# -*- coding:utf-8 -*-
# 电池里程性能预测(SVR线性回归)
# 是最强的冰哥
from pandas import DataFrame
import pandas as pd
from matplotlib import pyplot as plt
import matplotlib
from sklearn.preprocessing import StandardScaler
from sklearn import preprocessing
from sklearn import datasets
from sklearn.model_selection import train_test_split#分割训练集和测试集前自动打散数据
from sklearn import svm
from sklearn.preprocessing import Normalizer#归一化库函数
import numpy as np
from sklearn.svm import SVR
import joblib
import matplotlib.pyplot as plt# 引入MATLAB相似绘图库,make_classification生成三元分类模型数据
from sklearn.linear_model import LinearRegression#用于训练多元线性回归模型#第一步 读取数据
dianchi = pd.read_excel("F:\数据处理\数据\电池测量里程数据\电池容量与续航里程.xls",encoding='utf-8',header =0)#完整数据x = dianchi.iloc[:,1:5] #数据切片
y = dianchi.iloc[:,-1]
print("电池参数=\n",x)
print("里程=\n",y)#第二步 留出法划分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=0,train_size = 0.6)
print("训练集数据=\n",x_train)
print("测试集数据=\n",x_test)noise = 0
y_noise = noise +y_train #定义一个常数
print("常数项=\n",y_noise)#第三步 标准化处理
StandardScaler().fit_transform(x_train)
StandardScaler().fit_transform(x_test)#将数据按其属性(按列进行)减去其均值,然后除以其方差,最后得到的结果是,对每个属性/每列来说所有数据都聚集在0附近,方差值为1。#第四步 svr线性回归算法模型建立
svr_linear = SVR(kernel = "linear",C=1,gamma=100)#这里用的线性核函数,用高斯核函数有问题,C为误差项的惩罚系数,C越大泛化能力越弱svr_linear.fit(x_train,y_noise)#训练集训练模型并测试y_linear = svr_linear.predict(x_test)
print("测试结果=\n",y_linear)
print("训练集精度\n=",svr_linear.score(x_train,y_train))
print("测试集精度\n=",svr_linear.score(x_test,y_test))#C 误差项的惩罚参数,一般取值为10的n次幂,如10的-5次幂,10的-4次幂。。。。10的0次幂,10,1000,1000,在python中可以使用pow(10,n) n=-5~inf
#C越大,相当于希望松弛变量接近0,即对误分类的惩罚增大,趋向于对训练集全分对的情况,这样会出现训练集测试时准确率很高,但泛化能力弱。
#C值小,对误分类的惩罚减小,容错能力增强,泛化能力较强。#方法2:在训练集上训练多元线性回归模型
#regressor = LinearRegression()
#regressor.fit(x_train, y_train)#y_pred = regressor.predict(x_test)
#print("测试结果=\n",y_pred)joblib.dump(svr_linear, "电池里程预测_model_SVR.m")
#第7步 调用训练模型
clf = joblib.load("电池里程预测_model_SVR.m")dianchi_new = pd.read_excel("F:数据处理\数据\电池测量里程数据\电池容量与续航里程_new.xls",encoding='utf-8',header =0)
test_x = dianchi_new.iloc[:,1:5]#取数据集的前4列为数据值
print("新数据\n=",test_x)
test_y = clf.predict(test_x)
print("预测的电池里程(公里)=\n",test_y)

调用模型,输入电池参数
看一下效果:

第二种方法:多元线性回归预测:

# -*- coding:utf-8 -*-
# 电池里程性能预测(多变量线性回归)
# 是最强的冰哥
from pandas import DataFrame
import pandas as pd
from matplotlib import pyplot as plt
import matplotlib
from sklearn.preprocessing import StandardScaler
from sklearn import preprocessing
from sklearn import datasets
from sklearn.model_selection import train_test_split#分割训练集和测试集前自动打散数据
from sklearn import svm
from sklearn.preprocessing import Normalizer#归一化库函数
import numpy as np
from sklearn.svm import SVR
import joblib
import matplotlib.pyplot as plt# 引入MATLAB相似绘图库,make_classification生成三元分类模型数据
from sklearn.linear_model import LinearRegression#用于训练多元线性回归模型#第一步 读取数据
dianchi = pd.read_excel("F:\数据处理\数据\电池测量里程数据\电池容量与续航里程.xls",encoding='utf-8',header =0)#完整数据x = dianchi.iloc[:,1:5] #数据切片
y = dianchi.iloc[:,-1]
print("电池参数=\n",x)
print("里程=\n",y)#第二步 留出法划分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=0,train_size = 0.3)
print("训练集数据=\n",x_train)
print("测试集数据=\n",x_test)#第三步 标准化处理
StandardScaler().fit_transform(x_train)
StandardScaler().fit_transform(x_test)#将数据按其属性(按列进行)减去其均值,然后除以其方差,最后得到的结果是,对每个属性/每列来说所有数据都聚集在0附近,方差值为1。#第四步 在训练集上训练多元线性回归模型
regressor = LinearRegression()
regressor.fit(x_train, y_train)y_pred = regressor.predict(x_test)
print("测试结果=\n",y_pred)print("训练集精度\n=",regressor.score(x_train,y_train))
print("测试集精度\n=",regressor.score(x_test,y_test))joblib.dump(regressor, "电池里程预测_model_多元线性回归.m")
#第5步 调用训练模型
clf = joblib.load("电池里程预测_model_多元线性回归.m")dianchi_new = pd.read_excel("F:\数据处理\数据\电池测量里程数据\电池容量与续航里程_new.xls",encoding='utf-8',header =0)
test_x = dianchi_new.iloc[:,1:5]#取数据集的前4列为数据值
print("新数据\n=",test_x)
test_y = clf.predict(test_x)
print("预测的电池里程(公里)=\n",test_y)

第3种方法:随机森林多元拟合:

# -*- coding:utf-8 -*-
# 电池里程性能预测(RandomForest线性回归)
# 是最强的冰哥
from pandas import DataFrame
import pandas as pd
from matplotlib import pyplot as plt
import matplotlib
from sklearn.preprocessing import StandardScaler
from sklearn import preprocessing
from sklearn import datasets
from sklearn.model_selection import train_test_split#分割训练集和测试集前自动打散数据
from sklearn import svm
from sklearn.preprocessing import Normalizer#归一化库函数
import numpy as np
from sklearn.svm import SVR
import joblib
import matplotlib.pyplot as plt# 引入MATLAB相似绘图库,make_classification生成三元分类模型数据
from sklearn.linear_model import LinearRegression#用于训练多元线性回归模型
from sklearn.ensemble import RandomForestClassifier #随机森林模块
from sklearn.ensemble import RandomForestRegressor#第一步 读取数据
dianchi = pd.read_excel("F:\数据处理\数据\电池测量里程数据\电池容量与续航里程.xls",encoding='utf-8',header =0)#完整数据x = dianchi.iloc[:,1:5] #数据切片
y = dianchi.iloc[:,-1]
print("电池参数=\n",x)
print("里程=\n",y)#第二步 留出法划分训练集和测试集
x_train,x_test,y_train,y_test = train_test_split(x,y,random_state=0,train_size = 0.6)
print("训练集数据=\n",x_train)
print("测试集数据=\n",x_test)#定义
RandomForestClassifier(n_estimators=10,   #树的棵数,也是森林的决策数目criterion='gini',      #分类标准,衡量分裂质量的性能(函数)。标准是基于不纯度的"gini",和信息增益的"entropy"(熵)。#Gini 衡量的是从一个集合中随机选择一个元素,基于该集合中标签的概率分布为元素分配标签的错误率。即1减去所有分类正确的概率,得到的就是分类不正确的概率max_depth=None,  #最大深度,(决策)树的最大深度。如果值为None,那么会扩展节点,直到所有的叶子是纯净的,或者直到所有叶子包含少于min_sample_split的样本。min_samples_split=2,  #最少分裂几个子节点,分割内部节点所需要的最小样本数量:~如果为int,那么考虑min_samples_split作为最小的数字。# ~如果为float,那么min_samples_split是一个百分比,并且把ceil(min_samples_split*n_samples)是每一个分割最小的样本数量。#min_samples_leaf 需要在叶子结点上的最小样本数量:min_weight_fraction_leaf=0.0,#一个叶子节点所需要的权重总和(所有的输入样本)的最小加权分数。当sample_weight没有提供时,样本具有相同的权重max_leaf_nodes=None,#以最优的方法使用max_leaf_nodes来生长树。最好的节点被定义为不纯度上的相对减少。如果为None,那么不限制叶子节点的数量bootstrap=True,#建立决策树时,是否使用有放回抽样。n_jobs=1,    #指定并行使用的进程数,用于拟合和预测的并行运行的工作(作业)数量。如果值为-1,那么工作数量被设置为核的数量。random_state=None,#随机数生成器使用的种子;verbose=0,#控制决策树建立过程的冗余度warm_start=False,#当被设置为True时,重新使用之前呼叫的解决方案,用来给全体拟合和添加更多的估计器,反之,仅仅只是为了拟合一个全新的森林。class_weight=None,  #类别权重,样本不均衡时很重要
)rf = RandomForestRegressor()rf.fit(x_train, y_train)
re = rf.predict(x_test)
print("训练集精度\n=",rf.score(x_train,y_train))
print("测试集精度\n=",rf.score(x_test,y_test))
print("随机森林测试集预测里程=\n",re)joblib.dump(rf, "电池里程预测_model_rf.m")
#第7步 调用训练模型
clf = joblib.load("电池里程预测_model_rf.m")dianchi_new = pd.read_excel("F:\数据处理\数据\电池测量里程数据\电池容量与续航里程_new.xls",encoding='utf-8',header =0)
test_x = dianchi_new.iloc[:,1:5]#取数据集的前4列为数据值
print("新数据\n=",test_x)
test_y = clf.predict(test_x)
print("预测的电池里程(公里)=\n",test_y)

可以看到,支持向量机预测在47.89公里,多元线性回归在48.1公里,随机森林在46.2公里,我用这组电池参数去实际场地测试了一波,开了2个小时,48公里, 确实挺准的,哈哈~~~~

python机器学习之回归预测:电池续航里程问题相关推荐

  1. 软件升级后续航里程缩减 特斯拉遭遇车主集体诉讼

    [TechWeb]8月9日消息,据国外媒体报道,因为车主拥有的汽车在进行软件升级后续航里程缩减,电动汽车制造商特斯拉正遭到车主集体诉讼. 近日,特斯拉车主大卫·拉斯穆森(David Rasmussen ...

  2. Python机器学习笔记:使用Keras进行回归预测

    Keras是一个深度学习库,包含高效的数字库Theano和TensorFlow.是一个高度模块化的神经网络库,支持CPU和GPU. 本文学习的目的是学习如何加载CSV文件并使其可供Keras使用,如何 ...

  3. 《电动汽车锂电池荷电状态估计与续航里程预测研究》论文阅读笔记

    21.2.28<电动汽车锂电池荷电状态估计与续航里程预测研究>学习 声明 论文核心思路 基于加权融合与扩展卡尔曼滤波的荷电状态在线估计 锂离子电池荷电状态(SoC-State of Cha ...

  4. Python机器学习实践指南pdf (中文版带书签)、原书代码、数据集

    Python机器学习实践指南 目 录  第1章Python机器学习的生态系统 1  1.1 数据科学/机器学习的工作  流程 2  1.1.1 获取 2  1.1.2 检查和探索 2  1.1.3 清 ...

  5. nedc和epa续航里程什么意思_景区电动观光车的续航里程为什么会逐渐变短?

    我们在购买绿欣景区电动观光车时除了注重性能外,还会关注下观光车的续航里程.很多消费者,在购买使用一段时间都会来问为什么车辆的续航里程大不如从前了,这里我就带大家看看都是什么情况导致观光车续航里程的减少 ...

  6. python机器学习彩票_Python机器学习及实战kaggle从零到竞赛PDF电子版分享

    Python机器学习及实战kaggle从零到竞赛PDF电子版分享 本书面向对机器学习感兴趣的专业认识,帮助从零开始一步一步掌握机器学习的奥义,在阅读的过程中由浅入深,慢慢步入机器学习的殿堂,零基础也可 ...

  7. nedc和epa续航里程什么意思_了解 NEDC 之后 我发现电动车的续航还是得实测

    从电动车出现在大家的生活中开始,续航永远是绕不开的一个话题.虽然随着动力电池技术的进步,纯电动车的续航已经相比早期产品提升了好几个台阶,但是不可否认的是,对于没有太多驾驶纯电动车经验的人来说,续航依然 ...

  8. 读 python 机器学习实践指南

    本书分8个章节 第1 章,Python 机器学习的生态系统,深入Python,它有一个深度活跃的开发者社区,而且许多开发者来自科学社区.这为Python 提供了丰富的科学计算库.在本章中,我们将讨论这 ...

  9. nedc和epa续航里程什么意思_NEDC、WLTP、EPA续航哪个才最靠谱?

    近几年,新能源汽车大火,不少人在买车的时候也都会开始考虑新能源汽车.虽然少了限行摇号等烦恼,但是随之而来的就是新能源汽车充电难,续航短等问题.而这时许多厂商为了宣传自己的新能源汽车都会打出新能源汽车等 ...

最新文章

  1. 「蚂蚁」狂奔!最高估值4600亿美金,或成今年全球最大IPO
  2. redhat nginx php mysql_redhat7+nginx+mysql+php
  3. php 客户端上传图片,php上传图片客户端和服务器端实现方法
  4. jwt 私钥_什么是 JSON Web Token(JWT)
  5. ab压力测试php脚本,ab压力测试工具-批量压测脚本
  6. 关于图像三通道和单通道的解释
  7. LC 231 power of 2
  8. OpenCV-Sobel边缘检测
  9. 服务器4通道性能相当于多少人民币,有钱人的世界我们不懂,组装电脑花费百来万,跑分世界第四...
  10. 接口测试第二课(Fiddler实现APP抓包)
  11. python按钮点击事件wx_wx.python事件的绑定
  12. 服务器数据恢复案例:FreeNAS数据恢复过程记录
  13. 微服务化之无状态化和容器化
  14. 都有哪些数据恢复软件是免费的?
  15. 计算机网络16进制首部检验和,校验和
  16. Adobe Premiere Pro 2023导入音乐没有声音,并且提示“MME设备内部错误”
  17. 《CUDA C编程权威指南》——导读
  18. 区块链用在房地产交易上 会怎样?
  19. 软考高级 真题 2015年上半年 信息系统项目管理师 案例分析
  20. HDU - 5775 - Bubble Sort( 树状数组 + 思维 )

热门文章

  1. python wx包_今天玩点啥:python真香系列之利用wxpy包写一个微信消息自动回复插件...
  2. ProcessingJoy —— 扭来扭去【JAVA】【GLSL】
  3. 这是我见过最干净的系统(WIN10 LTSC 2019)
  4. Python 爬取蚂蜂窝旅游攻略 (+Scrapy框架+MySQL)
  5. 计算机英语断句,英语断句方法
  6. 【Office】Office小技巧
  7. 2022款联想小新Pro16,联想小新air15,thinkbook16+选哪个好
  8. 脚踏实地,不要飘忽不定
  9. 华为v2服务器系统安装系统,华为服务器RH 2288H v2安装系统
  10. IGMP协议(IGMPv1、IGMPv2、IGMPv3)