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

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

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

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

工程中需要的库:

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)

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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 输入代码自动生成名称_变量命名工具codelf

    输入代码自动生成名称_变量命名工具codelfCodeifCodeIfhttps://unbug.github.io/codelf/包含流行语言,java,c,javaScript,python等等

  • 卸载烦人的赛门铁克

    卸载烦人的赛门铁克问题:电脑上SymantecEndpointProtection无法进行卸载,在卸载的时候提示需要密码。解决:网上查过很多的解决方法,比如修改相关注册表,或者使用360粉碎文件,但都没有将SymantecEndpointProtection卸载掉,最后查到需要使用CleanWipe来卸载。网上找了很多CleanWipe版本,但是卸载都是版本过低,导致卸载不了。本人使用的Cl…

  • [转]Win 10 的 Win 按键没反应

    [转]Win 10 的 Win 按键没反应来自:http://www.pc0359.cn/article/win10/66397.html方法步骤:  1、首先我们需要将任务管理器运行出来。方法有两种,第一种:使用鼠标右键单击屏幕下方的任务栏,在弹出的选框中单击“任务管理器”即可打开;第二种:使用快捷键:Ctrl+Shift+Esc将其调出来。  2、进入任务管理器界面之后,结束桌面窗口管理器任务。  3、会…

  • 快速批量去除图片水印方法大全~~

    原文地址:http://blog.163.com/simonyao_cool/blog/static/16512555720107311858809/

  • 十种常用代码编辑器

    十种常用代码编辑器1.vscode微软推出的轻量级代码编译器,是本人使用最多的编译器(主要是好玩的插件多),支持几乎所有主流的开发语言的语法高亮、智能代码补全、自定义热键、括号匹配、代码片段、代码对比Diff、GIT等特性,支持插件扩展,并针对网页开发和云端应用开发做了优化。分享下本人的死宅背景~2.NETBEANSNetBeans是Sun公司(2009年被甲骨文收购)在2000年创立的开放源代码供开发人员和客户社区的家园,旨在构建世界级的JavaIDE。NetBeans当前可以在Solaris、Win

  • aarch64 poky linux,aarch64pokylinuxgcc:错误::没有这样的文件或目录

    aarch64 poky linux,aarch64pokylinuxgcc:错误::没有这样的文件或目录我正在尝试将mlpack包含到我的yocto构建中。如果不启用python绑定,我的配方烘焙成功。但是在构建python绑定时,我得到了以下错误:aarch64-poky-linux-gcc-march=armv8-a-mtune=cortex-a57.cortex-a53–sysroot=/builds/build-h3/tmp/sysroots/h3ulcb-DNDEBUG-g-O…

发表回复

您的电子邮箱地址不会被公开。

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