【决策树】预测用户用电量

决策树预测用户用电量

文章目录

  • 决策树预测用户用电量
    •   👉引言💎
    • 一、 数据预处理
        • 数据预处理
        • 初步数据分析
    • 二、 机器学习算法
      • 决策树回归预测用电量
        • 决策树模型介绍:
        • 回归预测
    • 三、 可视化结果
    • 四、 数据分析与结论
    • 代码如下

  👉引言💎

学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。
热爱写作,愿意让自己成为更好的人…


在这里插入图片描述

铭记于心
🎉✨🎉我唯一知道的,便是我一无所知🎉✨🎉

一、 数据预处理

数据预处理

通过pandas的read_csv()方法将表格数据读入到内存中,同时对原始数据进行统计分析,发现有许多缺失数据,首先进行数据预处理。

对原始数据使用pandas库DataFrame类的groupby()以及apply()方法进行分组聚合,以用户为关键点进行分组,可以得到每个用户的各方面用电数据,随后对缺失数据以及对应的用电属性进行统计并可视化,舍弃有效数据少的属性,保留剩余的属性进行进一步分析。

部分属性图分布趋势如下

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

x轴表示用电属性,y轴表示具备该数据的用户数量,将中点线绘制到图中进行对比分析,从中取出有效用户数据超过用户量一半的属性进行下一步分析

在这里插入图片描述

通过数据处理得到不同属性情况下用户用电数据的有效数量(即多少位用户在具备该属性下的时段数据),同时进行倒序排序,。由此可得前五项(由于leg1v与leg2v的属性意义对用电量预测关系不大,故舍去)

在这里插入图片描述

故选取kitchenapp1,grid, drye1,以及clotheswasher1 对数据较全的用户进行相关分析

初步数据分析

由于数据量比较大,取出一个用户的数据进行相关性分析,首先取出第一个用户,也就是编号为25的用户的用电数据进行回归预测,其用电数据主要是grid以及kitchenapp1,drye1,clotheswasher1 。

数据意义解释:

grid:每个时间段仪表数据目前测量从电网或馈电到电网的功率 。

kitchenapp1:第一厨房小家电电路仪表数据呈现。这种类型的电路只包括厨房里的壁式插座,因此可能包括烤面包机、咖啡机、搅拌机等。

drye1:电动干衣机(240V电路)仪表数据呈现

clotheswasher1:单机洗衣机仪表数据呈现

分别数据可视化为折线图与热力图如下:

在这里插入图片描述
在这里插入图片描述

由上图相关性分析可得,drye1 的影响比其他因素更大

二、 机器学习算法

决策树回归预测用电量

决策树模型介绍:

决策树(Decision Tree)及其变种是另一类将输入空间分成不同的区域,每个区域有独立参数的算法。决策树分类算法是一种基于实例的归纳学习方法,它能从给定的无序的训练样本中,提炼出树型的分类模型。树中的每个非叶子节点记录了使用哪个特征来进行类别的判断,每个叶子节点则代表了最后判断的类别。根节点到每个叶子节点均形成一条分类的路径规则。而对新的样本进行测试时,只需要从根节点开始,在每个分支节点进行测试,沿着相应的分支递归地进入子树再测试,一直到达叶子节点,该叶子节点所代表的类别即是当前测试样本的预测类别。

机器学习中,决策树是一个预测模型。它代表的是对象属性与对象值之间的一种映射关系。树中每个节点表示某个对象,而每个分支叉路径则代表某个可能的属性值,而每个叶节点则对应从根节点到该叶节点所经历的路径所表示的对象的值。决策树仅有单一输出,若欲有复数输出,可以建立独立的决策树以处理不同输出。数据挖掘中决策树是一种经常要用到的技术,可以用于分析数据,同样也可以用来作预测。从数据产生决策树的机器学习技术叫做决策树学习,通俗说就是决策树。

回归预测

接下里通过构建决策树回归模型预测用户的时段用电量,这里使用python的sklearn机器学习库进行相关的分析

sklearn是机器学习中一个常用的python第三方模块,里面对一些常用的机器学习方法进行了封装,比如SVM、KNN、贝叶斯、线性回归、逻辑回归、决策树、随机森林、xgboost、GBDT、boosting、神经网络NN;statsmodels 用于拟合多种统计模型,比如方差分析、ARIMA、线性回归等,执行统计测试以及数据探索和可视化。

在本次模型构建过程中主要使用的相关的库版本为:

python版本为3.9

numpy版本为 1.23.4

matplotlib版本为3.5.3

pandas版本为 1.5.1

sklearn版本为:0.0

运用sklearn.model_selection的train_test_split进行数据集划分,也可以用k折交叉验证(KFold)
在使用sklearn对数据集进行划分后,得到训练集与测试集,自变量即grid列的数据,表示用户在不同时间段的用电量,同时将其他三个变量设置为自变量,得到训练集与测试集的统计描述

在这里插入图片描述

进行初步的训练与评估后得到特征重要性,并可视化如下所示

在这里插入图片描述

三、 可视化结果

可视化结果及相关分析在上文

四、 数据分析与结论

通过决策树回归得到, 电动干衣机(240V电路)的使用对Y时段用户用电量影响最大,其重要性系数为0.6396,远高于其他因素,与相关系数分析结果一致

随后分别以训练集以及验证集展开对决策树模型的评估

在这里插入图片描述

发现评估效果良好

决策树回归模型构建过程图:

在这里插入图片描述

代码如下

import warnings

import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import seaborn as sns
warnings.filterwarnings('ignore')

plt.style.use('seaborn')
plt.rcParams['font.sans-serif'] = 'Microsoft YaHei'



data = pd.read_csv('15minute_data_newyork.csv')
data[data.columns[1]] = data[data.columns[1]].apply(lambda x: x[5:-6])

#数据预分析
User = data.groupby(data.columns[0]).count()
# 用户数量及编号列表
name = User.index
namef = len(list(name))//2
sum = len(User.index)
filed = User.apply(lambda x: x != 0).apply(np.sum, axis=0)

filed.plot( style=['r'])
plt.plot(filed.index,[namef]*len(filed.index),'b')
plt.show(block=True)

# User=User.loc[:,(filed>namef//2).values]
# User.apply(lambda x: x != 0).apply(np.sum, axis=0).sort_values(ascending=False)

nowData=data[['dataid','local_15min','grid','kitchenapp1','drye1','clotheswasher1']].dropna(how='any').set_index('dataid')

#得到一个用户的三方面用电数据
User=nowData.groupby(['dataid'])
userSiggle=list(User)[0][1]
User.apply(lambda x: x != 0).apply(np.sum, axis=0).sort_values(ascending=False)
userSiggle.apply(lambda x: x != 0).apply(np.sum, axis=0).sort_values(ascending=False)
userSiggle.set_index(userSiggle.columns[0],inplace=True)
userSiggle.plot()
plt.show(block=True)

userScorr=userSiggle.corr()
f,fig = plt.subplots(nrows=1,ncols=1,figsize=(12,9))
sns.heatmap(userScorr,cmap='rainbow',annot=True, vmax=1 , square=True , fmt='.2g')
label_y = fig.get_yticklabels()
plt.setp(label_y , rotation = 360)
plt.show(block=True)


# userSiggle.to_csv("userSiggle.csv")
from sklearn.model_selection import train_test_split
house_train,house_test=train_test_split(userSiggle,test_size=0.3, random_state=0)
print ('训练集描述性统计:')
print (house_train.describe().round(2))
print ('验证集描述性统计:')
print (house_test.describe().round(2))


X_train=house_train.loc[:,userSiggle.columns[1:]]
y_train=house_train.loc[:,userSiggle.columns[0]]

X_test=house_test.loc[:,userSiggle.columns[1:]]
y_test=house_test.loc[:,userSiggle.columns[0]]



##决策树模型训练、评估
from sklearn.tree import DecisionTreeRegressor
from sklearn.tree import export_graphviz
#tree = DecisionTreeRegressor(criterion='mse' ,max_depth=4,max_features='sqrt',min_samples_split=2,min_samples_leaf=1,random_state=0).fit(X_train,y_train)
tree = DecisionTreeRegressor(criterion='mse' ,max_depth=None,max_features='sqrt',min_samples_split=2,min_samples_leaf=1,random_state=0).fit(X_train,y_train)
y_tree=tree.predict(X_train)

export_graphviz(tree, out_file = 'house_tree.dot',max_depth=None,feature_names = userSiggle.columns[1:],rounded = True, precision = 1)


##特征重要性
print(userSiggle.columns[1:])
print ("指标重要性:",tree.feature_importances_)
plt.barh(range(len(tree.feature_importances_)), tree.feature_importances_, color='b',tick_label = userSiggle.columns[1:])
list(map(lambda x:plt.text( x[1]+0.02,x[0], x[1]),enumerate(tree.feature_importances_)))
plt.show(block=True)

from sklearn.metrics import mean_squared_error,explained_variance_score,mean_absolute_error,r2_score
print ("决策树模型评估--训练集:")
print ('训练r^2:',tree.score(X_train,y_train))
print ('均方差',mean_squared_error(y_train,tree.predict(X_train)))
print ('绝对差',mean_absolute_error(y_train,tree.predict(X_train)))
print ('解释度',explained_variance_score(y_train,tree.predict(X_train)))

print ("决策树模型评估--验证集:")
print ('验证r^2:',tree.score(X_test,y_test))
print ('均方差',mean_squared_error(y_test,tree.predict(X_test)))
print ('绝对差',mean_absolute_error(y_test,tree.predict(X_test)))
print ('解释度',explained_variance_score(y_test,tree.predict(X_test)))


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/443432.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何快速分析OB集群日志,敏捷诊断工具obdiag分析能力实践——《OceanBase诊断系列》之四

1. 前言 obdiag是OceanBase的敏捷诊断工具。1.2版本中,obdiag支持快速收集诊断信息,但仅有收集能力是不够的,还需要有分析能力。因此在obdiag的1.3.0版本中,我们加入了OB集群的日志分析功能。用户可以一键进行集群的OB日志的分析…

arcgis 栅格数据处理2——栅格转地级市(栅格转矢量图)

1. 获取空间分析权限(解决无法执行所选工具问题) 选中“自定义”中的“扩展模块” 在弹出的模块中选中能选的模块,此处需要选择“spatial analysis”以进行下一步分析 3. 将栅格数据转为整数型(解决无法矢量化) 选…

弹性布局(下),过渡

弹性布局 1.当子元素在主轴方向的长度和大于父元素的情况 子元素在父元素中放不下是否换行? flex-warp: 默认值: nowrap 不换行,压缩子元素的长度,最常用 可选值: wrap 换行 当子元素被压缩时&#xff0…

AndroidStudio跑马灯实现

在activity_main.xml中编写如下代码&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_h…

(001)UV 的使用以及导出

文章目录 UV窗口导出模型的主要事项导出时材质的兼容问题unity贴图导出导出FBX附录 UV窗口 1.uv主要的工作区域&#xff1a; 2.在做 uv 和贴图之前&#xff0c;最好先应用下物体的缩放、旋转。 导出模型的主要事项 1.将原点设置到物体模型的底部&#xff1a; 2.应用修改器的…

数字化转型导师坚鹏:科技金融政策、案例及发展研究

科技金融政策、案例及发展研究 课程背景&#xff1a; 很多银行存在以下问题&#xff1a; 不清楚科技金融有哪些利好政策&#xff1f; 不知道科技金融有哪些成功案例&#xff1f; 不知道科技金融未来发展方向&#xff1f; 课程特色&#xff1a; 以案例的方式解读原创方…

15. 三数之和 - 力扣

1. 题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的三元组。 …

基于springboot+vue的食品安全管理系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 1 首页 2 后台登录 3 食品信息添加页面 4 食品查询 三、库表设计 四、论文 前言 从事食品行业的商家可能会对于食品的储存以及食品的销售&#xff0c;都有着不同门道的想法&#xff0c;那么如何能将这些想法一一实现&#xff0c;…

阿里云一键登录(号码认证服务)

前言 用户登录原来的登录方式如下 1. 手机号验证码 2. 账号密码 运营觉得操作过于复杂, 因此想引入阿里自动登录的逻辑, 也就是号码认证服务,所以才有了这篇问文章 注: 本文只是记录Java端的实现, app端的请自行查询文档实现 官方资料 文档 : 什么是号码认证服务_号码认证服务(…

python的generator生成器用法测试

yield、send、threw、close # coding: utf8# 生成器 def gen(n):for i in range(n):yield ig gen(5) # 创建一个生成器 print(g) # <generator object gen at 0x10bb46f50> print(type(g)) # <type generator># 迭代生成器中的数据(只有执行for循环…

Java代码审计安全篇-常见Java SQL注入

前言&#xff1a; 堕落了三个月&#xff0c;现在因为被找实习而困扰&#xff0c;着实自己能力不足&#xff0c;从今天开始 每天沉淀一点点 &#xff0c;准备秋招 加油 注意&#xff1a; 本文章参考qax的网络安全java代码审计&#xff0c;记录自己的学习过程&#xff0c;还希望…

Unity L屏幕实现方式(已抛弃)

效果 右侧主要的参数&#xff1a;Line参数能够调整中间线的高度&#xff0c;PointXY能够调整整个下方弯曲图像的比例。 使用的是RenderTexture填充RawImage显示的方式&#xff0c;需要将一张RenderTexture设置位摄像机的输出内容。 ShaderGraph 由于这个采用了一定的数学模型…

「蓝桥·算法双周赛」第七场分级赛——小白入门赛

题目列表 说明 好久没打蓝桥杯的比赛&#xff0c;回来试试水&#xff0c;就开了第1、2、3一共三个题&#xff0c;第4题可惜了。1.thanks,mom【算法赛】 思路&#xff1a; 没什么好说的&#xff0c;但是当时比赛刚开始服务器有问题&#xff0c;基本提交的全WA了。#include <…

测试工具使用技巧01-->jmeter链接mysql

前言 在做接口或者性能测试的时候&#xff0c;有时需要jmeter连接数据库做操作&#xff0c;可以看看如下实例。操作实例 在mysql数据库中有如下数据表 在jmeter导入jdbc驱动插件&#xff08;需要的留言找我拿&#xff09; 在jmeter测试计划元件最下面&#xff0c;导入jdbc.…

外泌体相关基因肝癌临床模型预测——2-3分纯生信文章复现——03.差异表达基因筛选(2)

内容如下&#xff1a; 1.外泌体和肝癌TCGA数据下载 2.数据格式整理 3.差异表达基因筛选 4.预后相关外泌体基因确定 5.拷贝数变异及突变图谱 6.外泌体基因功能注释 7.LASSO回归筛选外泌体预后模型 8.预后模型验证 9.预后模型鲁棒性分析 10.独立预后因素分析及与临床的…

React__ 二、React状态管理工具Redux的使用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言redux状态管理安装redux创建文件 并使用传参action 总结 前言 redux状态管理插件的使用 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考…

VRRP与BFD在项目中的结合使用

学习目标&#xff1a; 1. VRRP双网关热备份怎样部署&#xff1f; 2. BFD是一种怎样的检测技术&#xff1f; 3. VRRP与BFD联动实现故障的快速切换&#xff1b; 虚拟一个192.168.1.1的网关&#xff1a; 虚拟路由器冗余协议&#xff1a;VRRP 人为调节角色选举 流量分担是可以的&…

【蓝桥杯】蓝桥杯算法复习(一)

&#x1f600;大家好&#xff0c;我是白晨&#xff0c;一个不是很能熬夜&#x1f62b;&#xff0c;但是也想日更的人✈。如果喜欢这篇文章&#xff0c;点个赞&#x1f44d;&#xff0c;关注一下&#x1f440;白晨吧&#xff01;你的支持就是我最大的动力&#xff01;&#x1f4…

图分割 Graph Partition 学习笔记1

文章目录 前言一、graph-partition是什么&#xff1f;二、具体分类三、graph-partition的意义参考链接 前言 最近在学习图论划分的方法&#xff0c;碰巧搜索到了这个算是对我而言全新的一个体系&#xff0c;在这里将逐步记载自己的学习资料和进度&#xff0c;希望和大家一起探讨…

深度学习相关概念及术语总结

目录 1.CNN2.RNN3.LSTM4.NLP5.CV6.正向传播7.反向传播8.sigmoid 函数9.ReLU函数10.假设函数11.损失函数12.代价函数 1.CNN CNN 是卷积神经网络&#xff08;Convolutional Neural Network&#xff09;的缩写。卷积神经网络是一种深度学习模型&#xff0c;专门用于处理具有网格状…