预测功率和电流之间的关系

预测功率和电流之间的关系

通常机器学习的开发流程包括:数据收集—数据清洗与转换—模型训练—模型测试—模型部署与整合

下面,通过一个例子进行完整的机器学习开发流程的学习。

工程中需要的库:

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import StandardScaler
from sklearn.externals import joblib

import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt
import pandas as pd
from pandas import DataFrame

  

(1)首先数据的收集,获取数据:

<span>预测功率和电流之间的关系</span>

如上,可以看到,我们获得需要获取的是Global_active_power(有功功率)、Global_reactive_power(无功功率)和Global_intensity(电流)之间的关系。

path = 'household_power_consumption_1000.txt'
df = pd.read_csv(path,sep = ';',low_memory = False)

print(df.head())
print(df.info())

  

(2)然后进入数据清洗阶段

<span>预测功率和电流之间的关系</span>

如上, 如果存在空值或异常值的情况,我们可以在这个阶段进行处理。

new_df = df.replace('?',np.nan)
datas = new_df.dropna(axis = 0,how = 'any')
print(datas.describe().T)

  如上,可以看到,我们对于异常值和空值存在的情况下,直接删掉了该样本。

<span>预测功率和电流之间的关系</span>

可以看到,1000个样本只剩下了998个了。

然后继续进行特征工程处理:

#提取出相关数据
X = datas.iloc[:,2:4]
Y = datas['Global_intensity']
#划分训练集和测试集
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size = 0.2,random_state = 0)
#标准化处理
ss = StandardScaler()
X_train = ss.fit_transform(X_train)
X_test = ss.transform(X_test)

 Tips: 

  • random_state:是随机数的种子。随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。
  • StandardScaler:标准化需要计算特征的均值和标准差,公式表达为:<span>预测功率和电流之间的关系</span>。至于为什么要做标准化,https://zhuanlan.zhihu.com/p/24839177

 

 

 (3)模型训练

lr = LinearRegression()
lr.fit(X_train,Y_train)

  如上,我们可以通过sklearn封装好的简单的语句完成模型的训练。

(4)模型预测

y_predict = lr.predict(X_test)
print("训练:",lr.score(X_train,Y_train))#
print("测试:",lr.score(X_test,Y_test))

mse = np.average((y_predict-Y_test)**2)
rmse = np.sqrt(mse)
print(rmse)

  如上:score是一个评分函数,即R2

<span>预测功率和电流之间的关系</span>

数据的可视化:

## 设置字符集,防止中文乱码
mpl.rcParams['font.sans-serif']=[u'simHei']
mpl.rcParams['axes.unicode_minus']=False
t = np.arange(len(X_test))
plt.figure()
plt.plot(t,Y_test,'r-',label = u'真实值')
plt.plot(t,y_predict,'b-',label = u'预测值')
plt.legend(loc = 'upper right')
plt.title(u'线性回归预测功率与电流之间的关系')
plt.grid(b = True)
plt.show()

  对于Anaconda2和3同时装的情况下,执行3可以采用下面命令:

<span>预测功率和电流之间的关系</span>

 

 <span>预测功率和电流之间的关系</span>

(5)模型部署

joblib.dump(lr,"data_lr.model")

lr = joblib.load("data_lr.model")

  如上,可以将训练好的模型存下来,以后用的时候load进来即可。

 

PS:当然这里的模型选择也可以选择其他算法,譬如SVR

模型构建步骤改为:

rbf=svm.SVR(kernel='rbf',C=1, )
rbf.fit(X_train,Y_train)

  当然,这里的话就需要调参了

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119458.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android开发之Intent.setFlags()_让Android点击通知栏信息后返回正在运行的程序

    在应用里使用了后台服务,并且在通知栏推送了消息,希望点击这个消息回到activity,结果总是存在好几个同样的activity,就算要返回的activity正在前台,点击消息后也会重新打开一个一样的activity,返回好几次才能退出,而不能像qq之类的点击通知栏消息回到之前存在的activity,如果存在就不再新建一个activity说的有点绕,如果是遇到此类问题的肯定能懂,没遇到过

    2022年3月10日
    42
  • AdventureWorks2008R2安装过程可能会遇到的一些问题及解决方案

    AdventureWorks2008R2安装过程可能会遇到的一些问题及解决方案AdventureWorks2008R2范例数据库对于学习SQLServer2008R2是一个非常好的学习案例库,里面包含了一些详尽的数据库案例(官网下载)。但是如果直接安装的话,可能会遇到一些问题,下面介绍安装的一些必要前提:1.安装的数据库账户应具有系统权限。2.你所安装的数据库至少是”SQLServerExpresswithAdvancedServices“版本(我所安…

    2025年10月29日
    2
  • IDEA 如何快速创建 Springboot 项目[通俗易懂]

    IDEA 如何快速创建 Springboot 项目[通俗易懂](1)打开IDEA,左上角选择:File->New->Project(2)首选选择弹窗左侧的SpringInitializr,然后选好择你的JDK,点击Next。(3)填写并选择:1,2处:是Maven工程的两个属性唯一标识,随意填。3处:类型选择Maven项目4处:语言选择Java5处:打包方式选择Jar6处:Java版本选择81-6处确定好后,选择Next。(4)左侧选择Web后,勾选SpringWe…

    2022年10月11日
    4
  • ov7725 stm32_如何给实验培养皿拍照

    ov7725 stm32_如何给实验培养皿拍照平台:STM32ZET6(核心板)+ST-LINK/V2+SD卡+USB串口线+鹰眼OV7725摄像头(注意,为了减少摄像头连线的麻烦,建议初学者选取单片机时选用带有摄像头接口的板子)工程介绍:需要移植FatFs文件系统,同时需要了解BMP位图的存储数据结构,从而实现将摄像头输出的RGB565像素数据直接输出到sd卡上,保存为*.bmp文件。1.BMP位图的存储1.1 数据结构介绍//BMP头文…

    2022年9月24日
    3
  • .net类的初始化机制,顺序,内存分配,

    .net类的初始化机制,顺序,内存分配,

    2022年3月11日
    37
  • word文档页码不连续编号怎么办_怎样给论文加页码

    word文档页码不连续编号怎么办_怎样给论文加页码论文页码设置大家好!今天和大家分享两个和页码有关的技巧:大家好!今天和大家分享两个和页码有关的技巧:为分栏页面分别设置页码对纵向文档中的横向表格设置页码page域及域代码操作基础技巧01分栏页面像下面这个文档,对页面分成了两栏,如果现在想给每一栏都添加一个页码序号,也就是在第1页的左右两栏分别显示第1页和第2页,在第2页的左右两栏分别显示第3页和第4页,这样的效果该如何设置呢?我们先在页脚中设置好…

    2025年7月29日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号