人工智能

导航菜单



当前位置: 首页  /  AI概论  /  正文

用机器学习k均值聚类算法解析用电量

阅读:44

用机器学习k均值聚类算法解析用电量

机器学习在能源领域有着广泛的应用。在本文中,我将向您展示如何使用K-means聚类算法在单个家庭的日常负载概要中找到常见模式。

该数据集包含了从2006年12月到2010年11月(47个月)收集的2075259个测量值。你可以在这里找到:https://archive.ics.uci.edu/ml/datasets/individual+household+electric+power+consumption

首先,让我们整理一下聚类算法的数据

Python代码如下:

%matplotlib inline
 
import pandas as pd
import matplotlib.pyplot as plt
 
plt.style.use('seaborn')
 
data_path = 'data/household_power_consumption.txt'
cols_to_use = ['Date', 'Time','Global_active_power']
 
df_uci = pd.read_csv(data_path, sep=';', usecols=cols_to_use)
 
# this takes a while
df_uci['datetime'] = pd.to_datetime(df_uci['Date'] + ' '+ df_uci['Time'])
df_uci = df_uci.drop(['Date','Time'], axis=1)
df_uci = df_uci.set_index('datetime')
 
df_uci = df_uci.replace('?', np.nan)
 
df_uci['Global_active_power'] = df_uci['Global_active_power'].astype(float).fillna(method='ffill')
 
# For simplication, I'm going to resample the data into daily granularity. 
df_uci_hourly = df_uci.resample('H').sum()
df_uci_hourly['hour'] = df_uci_hourly.index.hour
df_uci_hourly.index = df_uci_hourly.index.date
 
# this create a dataframe where each row is a complete day
# and the columns the hours of the day (1 to 24)
df_uci_pivot = df_uci_hourly.pivot(columns='hour')
df_uci_pivot = df_uci_pivot.dropna()

通过观察较暗的区域(更多的曲线被集中),可以看到一些清晰的能量行为模式。

使用K-means进行聚类

K-means是一种无监督的机器学习算法,其中必须先定义clusters的数量。这留下了要挑选多少clusters的问题。

解决此问题的常用方法是使用silhouette值。它衡量一个点与其自己的cluster相比与其他clusters的相似程度。它的范围是-1到1,其中一个高值表示一个点与它所属的cluster匹配良好。

我们采用所有样本的silhouette的平均值,以便全面了解算法的执行情况。

在下面的Python代码中,我尝试不同的clusters值(从2到19)在相同的范围内对每个周期进行缩放是很重要的,这样能量负荷的大小就不会干扰cluster的选择。

from sklearn.cluster import KMeans
from sklearn.preprocessing import MinMaxScaler
from sklearn.metrics import silhouette_score
 
sillhoute_scores = []
n_cluster_list = np.arange(2,20)
for n_cluster in n_cluster_list:
 
 kmeans = KMeans(n_clusters=n_cluster)
 
 X = df_uci_pivot.copy()
 sc = MinMaxScaler()
 X = sc.fit_transform(X)
 
 res = kmeans.fit_predict(X)
sillhoute_scores.append(silhouette_score(X, kmeans.labels_))

当只有2个clusters时,会出现最大平均silhouette。让我们看看它们在单独绘制时的外观:

两个clusters中的负载之间的主要差异似乎是下午时段的能耗。cluster0可能包含指向工作日的负载,cluster1包含周末负载。

使用t-SNE验证结果

我们可以验证聚类算法结果的一种方法是使用一种降维方法来绘制2D平面中的点。然后,我们可以根据它们所属的cluster对点进行着色。

用于此目的的流行算法称为t-SNE。

需要记住的是,t-SNE对clusters一无所知。Python代码如下:

from sklearn.manifold import TSNE
import matplotlib.colors
 
tsne = TSNE()
res_tnse = tsne.fit_transform(X)
 
cmap = matplotlib.colors.LinearSegmentedColormap.from_list(cluster_values, color_list)
 
plt.figure(figsize=(10,10))
 
plt.scatter(
 res_tnse[:,0], 
 res_tnse[:,1],
 c=df_uci_pivot.index.get_level_values('cluster'),
 cmap=cmap, alpha=0.6
)

由k-means指定的簇组成的日能量负荷的t-SNE

在上面的图中,每个点代表一个每日负载概要。样品从24维降为2维。接近的点似乎与k-means算法分配的clusters重合。

最后

在本文中,我向您展示了如何使用机器学习k-means算法对每日负载配置文件进行聚类。我们使用silhouette分数来找到最佳clusters数和t-SNE以验证结果。

标签

机器学习均值算法解析用电量


相关文章列表

机器学习算法之K-均值聚类算法(K-means)

机器学习算法之K-均值聚类算法(K-means)

"物以类聚,人以群分"聚类(Clustering)是一种无监督学习 (unsupervised learning),简单地说就是把相似的对象归到同一簇中。簇内的对象越相似,聚类的效果越好。监督学习 (...


机器学习入门:轻松掌握k均值聚类算法

点击上方关注,All in AI中国K均值聚类是最简单和最受欢迎的无监督机器学习算法之一。通常,无监督算法仅使用输入向量从数据集进行推断,而不参考已知或标记的结果。AndreyBu拥有超过5年的机器学...


机器学习聚类方法-k均值聚类算法

机器学习聚类方法-k均值聚类算法

一般的机器学习算法分为三种,分别是:有监督学习、无监督学习和半监督学习,今天我们就来讲一讲,无监督学习中,聚类算法中的k均值聚类算法。k均值算法简介 K-均值算法(K-Mean)是指中心的距离的平方...


机器学习十大算法:从基础到进阶的全面解析 机器学习...

机器学习十大算法:从基础到进阶的全面解析机器学习作为人工智能的重要分支,已经深入到我们生活的方方面面。在众多算法中,有十个算法因其广泛的应用和独特的贡献而备受瞩目。本文将详细介绍这十大算法,包括其基本...


机器学习中的K均值聚类:算法、应用与评估

聚类聚类是用于获得关于数据结构的直觉的最常见的机器学习中探索数据分析技术之一。它可以被定义为识别数据中的子组的任务,使得相同子组(cluster)中的数据点非常相似,而不同clusters中的数据点非...


吹爆!这十二大机器学习经典算法,深入解析!

2月份了,机器学习有很多种算法,对于算法小白来说,全部都学的话,学习起来可能会比较困难.今天,整理一份机器学习十二大经典算法:.这些只是其中的一部分算法,内容太多无法一一列出!获取资料方式转发私信【1...


友情链接