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

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

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

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

工程中需要的库:

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 泰国80亿互联网记录数据库泄漏,疑遭黑客攻击[通俗易懂]

    泰国80亿互联网记录数据库泄漏,疑遭黑客攻击[通俗易懂]泰国最大的蜂窝网络AIS已使数据库脱机,疑遭黑客攻击,这使达80亿实时互联网记录泄漏到数百万泰国互联网用户上,该事件震惊整个泰国。全球著名白帽黑客、东方联盟创始人郭盛华博客文章中说,他在互联网上没有密码就找到了包含DNS查询和Netflow数据的数据库。通过访问该数据库,任何人都可以“快速描绘”互联网用户(或其家庭)的实时行为。他表示:“在数据库中找到的记录只能来自能够监视Internet流量在网络上流动的人。但是,没有一种简单的方法可以区分数据库是属于Internet提供商还…

    2025年11月22日
    5
  • CentOS搭建Ghost博客

    CentOS搭建Ghost博客

    2021年6月1日
    129
  • java项目视频

    java项目视频java版qq:http://pan.baidu.com/s/1orpxsssh智慧团:http://pan.baidu.com/s/1cLU4m巴巴运动网项目:http://pan.baidu.com/s/15SiSW国家电力项目:http://pan.baidu.com/s/1Gb7KI(强烈推荐)银行业务调度系统:http://pan.baidu.com/s/1kn4Gq

    2022年10月3日
    2
  • 具体问题解决:分离脚本

    具体问题解决:分离脚本

    2021年11月26日
    54
  • MSF搭建socks代理[通俗易懂]

    MSF搭建socks代理[通俗易懂]目录搭建代理添加路由​搭建Socks4a代理搭建Socks5代理连接代理搭建代理当我们通过MSF拿到一个机器的权限后,想通过MSF搭建socks代理,然后通内网。MSF中有三个代理模块,分别是socks4a、socks5、socks_unc。我们一般用socks4a和socks5进行代理。socks5可以设置用户名和密码。这里运行代理后,有时候MSF不会监听端口…

    2022年6月16日
    119
  • SpringBoot——Dozer的使用[通俗易懂]

    SpringBoot——Dozer的使用[通俗易懂]SpringBoot——Dozer的使用

    2022年4月23日
    92

发表回复

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

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