今天接到一個(gè)任務(wù)就是需要基于給定的數(shù)據(jù)集來(lái)進(jìn)行數(shù)據(jù)挖掘分析相關(guān)的計(jì)算,并完成對(duì)未來(lái)時(shí)段內(nèi)數(shù)據(jù)的預(yù)測(cè)建模,話不多說(shuō)直接看內(nèi)容。
官方數(shù)據(jù)詳情介紹在這里,如下所示:
數(shù)據(jù)集中一共包含9個(gè)不同的字段,詳情如下:
1.date:日期格式為dd/mm/yyyy
2.時(shí)間:時(shí)間,格式為hh:mm:ss
3.global_active_power:家庭全球分鐘平均有功功率(千瓦)
4.global_reactive_power:家庭全球分鐘平均無(wú)功功率(千瓦)
5.電壓:分鐘平均電壓(單位:伏特)
6.global_intensity:家用全球分鐘平均電流強(qiáng)度(安培)
7.sub_metering_1:1號(hào)能量子計(jì)量(以有功能量的瓦時(shí)為單位)。它對(duì)應(yīng)于廚房,主要包括洗碗機(jī)、烤箱和微波爐(熱板不是電動(dòng)的,而是燃?xì)獾模?
8sub_metering_2:2號(hào)能量子計(jì)量(以有功能量的瓦時(shí)為單位)。它對(duì)應(yīng)于洗衣房,里面有一臺(tái)洗衣機(jī)、一臺(tái)滾筒式干燥機(jī)、一臺(tái)冰箱和一盞燈。
9_metering_3:3號(hào)能量子計(jì)量(以有功能量的瓦時(shí)為單位)。它對(duì)應(yīng)于電熱水器和空調(diào)。
需要數(shù)據(jù)集的話可以自行下載,在這里。數(shù)據(jù)詳情截圖如下所示:
?首先就是需要加載讀取數(shù)據(jù)集,這里可以直接使用Pandas實(shí)現(xiàn)如下所示:
def loadData(data="household_power_consumption.txt"):
"""
加載數(shù)據(jù)集
"""
df=pd.read_csv(data,sep=";")
print(df.head(10))
for one_name in names[2:]:
df[one_name].fillna(df[one_name].mean(), inplace=True)
data_list=df.values.tolist()
return data_list
加載本地?cái)?shù)據(jù)集的同時(shí),基于均值對(duì)不同列數(shù)據(jù)進(jìn)行了填充處理,這里對(duì)于數(shù)據(jù)填充的處理可以使用其他的方式,比如pandas內(nèi)置的眾數(shù)、中位數(shù)、指定值、均值填充等等都是可以的,在我之前做環(huán)保大腦項(xiàng)目的時(shí)候其實(shí)我們對(duì)時(shí)序數(shù)據(jù)有著更細(xì)粒度的處理方式。主要分為:滑動(dòng)窗口數(shù)據(jù)填充、移動(dòng)加權(quán)數(shù)據(jù)填充、卡爾曼濾波數(shù)據(jù)填充幾種方式,不同填充算法對(duì)比效果圖如下所示:
?在這里考慮到時(shí)間的問(wèn)題,我主要是使用了比較常用的滑窗數(shù)據(jù)填充算法,填充原理示意圖如下所示:
?這種方式在時(shí)序數(shù)據(jù)的缺失值填充上面更為細(xì)粒度,不是單純粗暴地直接使用均值、中位數(shù)之類的數(shù)據(jù)來(lái)進(jìn)行缺失值的填充處理。
代碼實(shí)現(xiàn)如下所示:
?dataProcessing提供的就是因子數(shù)據(jù)的填充處理計(jì)算,之后將填充處理后的因子數(shù)據(jù)經(jīng)過(guò)轉(zhuǎn)置處理得到新的經(jīng)過(guò)填充處理后的數(shù)據(jù)集。
接下來(lái)我們先對(duì)原始數(shù)據(jù)集進(jìn)行簡(jiǎn)單的可視化,如下所示:
?除去前兩列是時(shí)間列后一共有7個(gè)數(shù)據(jù)列,這里對(duì)其進(jìn)行了整體的可視化,因?yàn)?00多萬(wàn)的樣本數(shù)據(jù)量導(dǎo)致可視化出來(lái)的圖像非常的稠密難以看清整體的走勢(shì),這里對(duì)數(shù)據(jù)進(jìn)行抽稀處理,繪制小時(shí)粒度的數(shù)據(jù)曲線,如下所示:
?可以看到:整體數(shù)據(jù)走勢(shì)還是比較稠密的,需要繼續(xù)抽稀處理。
同樣的處理思路,我們可以繪制日粒度的數(shù)據(jù)曲線,如下所示:
?日粒度的數(shù)據(jù)就已經(jīng)比較清晰可見(jiàn)了,從不同因子數(shù)據(jù)走勢(shì)來(lái)看,數(shù)據(jù)呈現(xiàn)出來(lái)的周期性還是比較明顯的。
接下來(lái)想要對(duì)不同因子數(shù)據(jù)進(jìn)行挖掘分析計(jì)算變量之間的相關(guān)性關(guān)系繪制熱力圖,如果這塊實(shí)現(xiàn)有問(wèn)題的話可以參考我前面寫的文章:
《基于seaborn的相關(guān)性熱力圖可視化分析》
《Python基于seaborn繪制喜歡的熱力圖,不同色系一覽》
《python實(shí)踐統(tǒng)計(jì)學(xué)中的三大相關(guān)性系數(shù),并繪制相關(guān)性分析的熱力圖》
代碼實(shí)現(xiàn)和結(jié)果實(shí)例都是很詳細(xì)的,相信能夠幫你實(shí)現(xiàn)這部分的功能。
相關(guān)性熱力圖主要是基于不同變量之間的相關(guān)性值進(jìn)行的可視化,本質(zhì)就是需要計(jì)算變量之間的相關(guān)性,這里我常用到的相關(guān)性算法主要就是:皮爾斯系數(shù)、斯皮爾曼系數(shù)和肯德?tīng)栂禂?shù),當(dāng)然海鷗其他的方法可以使用可以根據(jù)自己的愛(ài)好去選擇即可。這塊代碼核心實(shí)現(xiàn)如下所示:
?提供了四種方式可選,分別是單獨(dú)方法以及簡(jiǎn)單的加權(quán)方法實(shí)現(xiàn),接下來(lái)我們以日粒度的數(shù)據(jù)來(lái)看下可視化分析結(jié)果:
【皮爾斯系數(shù)】
?【斯皮爾曼系數(shù)】
?【肯德?tīng)栂禂?shù)】
?【加權(quán)平均方法】
?可以看到:不同計(jì)算方法計(jì)算得到的結(jié)果略有不同,但整體趨勢(shì)是相同的。
Global_active_power和Global_intensity高度相關(guān)
Global_active_power和Sub_metering_1、Sub_metering_2、Sub_metering_3相關(guān)程度都是較高的
簡(jiǎn)單的數(shù)值分析就到這里,從熱力圖中還能找到其他的關(guān)系這里就不再展開(kāi)描述了。
接下來(lái)我們來(lái)嘗試對(duì)不同時(shí)段以及不同日期比如(工作日、非工作日、節(jié)假日)進(jìn)行分析,嘗試?yán)斫獠煌瑫r(shí)間粒度上用電量的特點(diǎn)。代碼實(shí)現(xiàn)如下所示:
?我們先來(lái)看小時(shí)粒度上,數(shù)據(jù)呈現(xiàn)出來(lái)的差異:
?電壓的話還是比較穩(wěn)定的,不同小時(shí)粒度上面幾乎沒(méi)有什么差異。
?Global_intensity整體呈現(xiàn)出來(lái)的差異還是比較明顯的,在深夜凌晨期間偏低。
?global_active_power和global_reactive_power整體呈現(xiàn)出來(lái)的趨勢(shì)也有類似的表現(xiàn)。
?Sub_metering_1、Sub_metering_2、Sub_metering_3整體呈現(xiàn)出來(lái)的走勢(shì)也是基本一致的。
接下來(lái)我們來(lái)看白天-黑夜兩個(gè)時(shí)段維度上數(shù)據(jù)整體呈現(xiàn)出來(lái)的差異性。代碼實(shí)現(xiàn)和小時(shí)粒度是相似的這里就不再贅述了。
?我將其繪制在一張圖表上面看起來(lái)更加直觀一些,這里要注意的一個(gè)點(diǎn)就是白天和黑夜的時(shí)段劃分不同人的理解可能是不一樣的,我這里的設(shè)置是:
day_list=["08","09","10","11","12","13","14","15","16","17","18"]
night_list=["00","01","02","03","04","05","06","07","19","20","21","22","23"]
這里其實(shí)還可以進(jìn)一步細(xì)化,比如:不同季節(jié)的白天和黑夜時(shí)段又是有區(qū)別的,當(dāng)然這里時(shí)間的緣故就不再細(xì)化了。
最后我們想探索下在工作日、休息日、假節(jié)日不同的時(shí)間段內(nèi)用電量的差異情況,整體實(shí)現(xiàn)是完全一致的,這里我們直接來(lái)看結(jié)果就行,這里我一共劃分了三個(gè)粒度:工作日、非工作日和節(jié)假日,如下所示:
?工作日和非工作日的時(shí)段上用電的變化較為明顯,非工作日和節(jié)假日因?yàn)楸旧頃r(shí)間段上就是有重疊的,數(shù)據(jù)呈現(xiàn)出來(lái)的趨勢(shì)也是比較相近的,最后為了直觀呈現(xiàn),將其同樣繪制在一起,如下所示:
?到這里,數(shù)據(jù)處理和EDA基本就結(jié)束了,接下來(lái)的主要內(nèi)容就是想要基于模型來(lái)實(shí)對(duì)未來(lái)用電量數(shù)據(jù)的預(yù)測(cè)建模分析。時(shí)間序列預(yù)測(cè)類型的任務(wù)中主要的預(yù)測(cè)類型有兩種:?jiǎn)巫兞款A(yù)測(cè)和多變量序列預(yù)測(cè),不同的方法適用場(chǎng)景或者說(shuō)是開(kāi)發(fā)目的也不同,結(jié)合前面我們數(shù)據(jù)熱力圖分析來(lái)看,這里使用多變量序列預(yù)測(cè)模型更為合適。
在前面的步驟中我們已經(jīng)解析處理好了原始的數(shù)據(jù)集存儲(chǔ)在feature.json文件中,這里就可以直接進(jìn)行使用了,加載數(shù)據(jù)集的同時(shí)對(duì)原始數(shù)據(jù)集進(jìn)行了抽稀處理,不然模型的訓(xùn)練會(huì)極為耗時(shí),之后對(duì)數(shù)據(jù)進(jìn)行了歸一化處理,來(lái)消除不同量綱帶來(lái)的影響,提升模型后續(xù)迭代收斂速度的同時(shí)也有助于模型精度的提升,這部分代碼實(shí)現(xiàn)如下所示:
?接下來(lái)就可以創(chuàng)建數(shù)據(jù)集,時(shí)序數(shù)據(jù)本身是序列的數(shù)據(jù),常用的方式就是基于滑動(dòng)窗口來(lái)進(jìn)行數(shù)據(jù)集的創(chuàng)建,原理示意圖如下所示:
?也可以自由的設(shè)定步長(zhǎng)和間隔從而動(dòng)態(tài)地調(diào)整獲得的數(shù)據(jù)集shape。
完成數(shù)據(jù)集的構(gòu)建之后接下來(lái)就可以開(kāi)發(fā)模型了,對(duì)于時(shí)序預(yù)測(cè)這類回歸的任務(wù)來(lái)說(shuō),最基礎(chǔ)的模型可能就是ARIMA之類的統(tǒng)計(jì)學(xué)模型了,這個(gè)隨著時(shí)間的更替后面真正應(yīng)用的場(chǎng)景就很少了,所以基本上遇上這類型的任務(wù)選擇的base模型就會(huì)是機(jī)器學(xué)習(xí)之類的,比如:SVR、RFR、XGBR等等,不同模型借助于sklearn模塊可以非常簡(jiǎn)單統(tǒng)一化地去實(shí)現(xiàn),這里我就簡(jiǎn)單以XGBoost為例來(lái)看下實(shí)際的實(shí)現(xiàn)。
model = xgb.XGBRegressor(
colsample_bytree=colsample_bytree,
booster=booster,
max_depth=max_depth,
learning_rate=learning_rate,
n_estimators=n_estimators,
silent=False,
verbosity=0,
objective=objective,
gamma=gamma,
min_child_weight=min_child_weight,
subsample=subsample,
reg_alpha=reg_alpha,
reg_lambda=reg_lambda,
tree_method=tree_method,
callbacks=[pruning_callback],
)
接下來(lái)以Global_active_power為例看下實(shí)際的預(yù)測(cè)效果:
?整體對(duì)比如下所示:
?借助于XGBoost內(nèi)置的特征重要性分析工具還可以很方便的進(jìn)行分析可視化如下所示:
?接下來(lái)看下無(wú)功率指標(biāo)因子Global_reactive_power的結(jié)果:
?最后來(lái)整體看下所有因子整體的效果,不同的參數(shù)、不同的數(shù)據(jù)劃分比例出來(lái)的效果也會(huì)是有所不同的,可以根據(jù)自己的實(shí)際配置去調(diào)整合適的參數(shù)即可,這里直接來(lái)看結(jié)果:
?這里模型參數(shù)配置的話可以根據(jù)自己的經(jīng)驗(yàn)去配置,之后借助于網(wǎng)格搜索或者是隨機(jī)搜索等參數(shù)優(yōu)化方法來(lái)進(jìn)行調(diào)試,這里我給出來(lái)簡(jiǎn)單的代碼實(shí)例,如下所示:
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
xgb = XGBRegressor()
#設(shè)置網(wǎng)格搜索的參數(shù)空間:
python
param_grid = {
'max_depth': [3, 4, 5],
'learning_rate': [0.1, 0.01, 0.001],
'n_estimators': [100, 200, 300]
}
#使用GridSearchCV進(jìn)行網(wǎng)格搜索:
grid_search = GridSearchCV(estimator=xgb, param_grid=param_grid, cv=5)
grid_search.fit(X_train, y_train)
#打印最佳參數(shù)組合和對(duì)應(yīng)的R2評(píng)分:
print("Best parameters: ", grid_search.best_params_)
print("Best R2 score: ", grid_search.best_score_)
#使用RandomizedSearchCV進(jìn)行隨機(jī)搜索
random_search = RandomizedSearchCV(estimator=xgb, param_distributions=param_grid, cv=5, n_iter=10, random_state=42)
random_search.fit(X_train, y_train)
#打印最佳參數(shù)組合和對(duì)應(yīng)的R2評(píng)分
print("Best parameters: ", random_search.best_params_)
print("Best R2 score: ", random_search.best_score_)
具體數(shù)據(jù)集上面可以結(jié)合自己的實(shí)際情況進(jìn)行改造即可,參數(shù)空間也可以設(shè)定自己想要的更多的參數(shù)都是可以的。
當(dāng)然了開(kāi)源社區(qū)里面也有一些很出色的超參優(yōu)化模塊,簡(jiǎn)單羅列一些:
以下是一些常見(jiàn)的機(jī)器學(xué)習(xí)模型超參數(shù)優(yōu)化模塊:
GridSearchCV:Scikit-learn庫(kù)中的GridSearchCV類提供了基于網(wǎng)格搜索的超參數(shù)優(yōu)化方法。它通過(guò)窮舉搜索給定參數(shù)空間中的所有可能組合,并評(píng)估每個(gè)組合的性能,從而找到最佳的超參數(shù)組合。
RandomizedSearchCV:Scikit-learn庫(kù)中的RandomizedSearchCV類提供了基于隨機(jī)搜索的超參數(shù)優(yōu)化方法。它與GridSearchCV類似,但不同之處在于它在給定的參數(shù)空間中隨機(jī)選擇一組子集進(jìn)行評(píng)估,以減少計(jì)算開(kāi)銷。
Bayesian Optimization:貝葉斯優(yōu)化是一種基于概率模型和貝葉斯推斷的超參數(shù)優(yōu)化方法。它利用先驗(yàn)和后驗(yàn)信息來(lái)選擇下一個(gè)要評(píng)估的超參數(shù)組合,從而更有效地探索參數(shù)空間。常用的貝葉斯優(yōu)化庫(kù)包括scikit-optimize(skopt)、GPyOpt等。
Optuna:Optuna是一種用于超參數(shù)優(yōu)化的開(kāi)源框架,支持多種優(yōu)化算法,如基于隨機(jī)森林的TPE算法、CMA-ES算法等。它提供了簡(jiǎn)潔的API和可視化工具,使得超參數(shù)優(yōu)化過(guò)程更加方便和可視化。
Hyperopt:Hyperopt是另一個(gè)用于超參數(shù)優(yōu)化的庫(kù),它采用了基于樹(shù)結(jié)構(gòu)的Parzen估計(jì)器(TPE)來(lái)搜索高維參數(shù)空間。它還支持并行和分布式計(jì)算,以加速優(yōu)化過(guò)程。
Talos:Talos是一個(gè)針對(duì)Keras模型的超參數(shù)優(yōu)化庫(kù)。它可以自動(dòng)調(diào)整學(xué)習(xí)率、批量大小、優(yōu)化器類型等參數(shù),并提供一系列評(píng)估指標(biāo)來(lái)評(píng)估不同的超參數(shù)組合。
這里我就是基于其中的模塊來(lái)進(jìn)行最優(yōu)參數(shù)的挖掘計(jì)算,好處是很智能化,不好的地方是首先要學(xué)習(xí)文檔理解demo之后自己去開(kāi)發(fā)自己的業(yè)務(wù)部分,之后就是漫長(zhǎng)的計(jì)算過(guò)程了:
?計(jì)算完成后,你可以在代碼邏輯里面存儲(chǔ)下載最優(yōu)的參數(shù)直接使用,也可以不管這部分,因?yàn)檎麄€(gè)調(diào)參過(guò)程都是被記錄下來(lái)的,可以對(duì)日志進(jìn)行可視化,如下所示:
?這個(gè)地方不是重點(diǎn)就不再展開(kāi)了。
如果想要使用其他的模型比如隨機(jī)森林、支持向量機(jī)本事也都是相同的處理邏輯,在實(shí)現(xiàn)的時(shí)候可以單獨(dú)將模型實(shí)例化抽象出來(lái),這樣整體的邏輯就不用改動(dòng)了。
除了機(jī)器學(xué)習(xí)模型之外,深度學(xué)習(xí)模型在進(jìn)行時(shí)間序列預(yù)測(cè)任務(wù)上也是比較常用的,這里以多變量序列預(yù)測(cè)建模為基準(zhǔn),模型的選擇性也是比較廣的,可以單獨(dú)地使用LSTM、RNN、GRU、CNN之類的模型也可以使用模型的組合,比如CNN-LSTM、CNN-GRU等等都是可以的,這里時(shí)間的問(wèn)題就不再一一去做實(shí)驗(yàn)了,這里主要是借助于Keras來(lái)搭建初始化模型,整體層級(jí)的序列結(jié)構(gòu)搭建起來(lái)還是比較清晰的。簡(jiǎn)單看下模型的參數(shù)結(jié)構(gòu)圖,如下所示:
【CNN-GRU】
?【GRU】
?雖說(shuō)已經(jīng)在源頭上對(duì)數(shù)據(jù)進(jìn)行了抽稀,但是深度學(xué)習(xí)模型本身的計(jì)算量還是比較大的,考慮到其他項(xiàng)目的問(wèn)題,這里僅作為Demo,簡(jiǎn)單看下訓(xùn)練情況:
?實(shí)驗(yàn)運(yùn)行設(shè)置上都是僅設(shè)定了20個(gè)epoch,不同量級(jí)的模型實(shí)驗(yàn)都可以自由去搭建:
?簡(jiǎn)單看下效果:
【模型loss曲線】
?【結(jié)果對(duì)比可視化曲線】
?對(duì)未來(lái)一周的預(yù)測(cè):
?在實(shí)際對(duì)比實(shí)驗(yàn)的時(shí)候發(fā)現(xiàn)一些比較弱的模型在中長(zhǎng)期的預(yù)測(cè)過(guò)程中往往就會(huì)出現(xiàn)“漂移”的現(xiàn)象,這里時(shí)間的緣故就沒(méi)有繼續(xù)去增大數(shù)據(jù)或者是增加epoch去計(jì)算了,感興趣的話都可以沿著這個(gè)思路做下去驗(yàn)證一下。
?為方便對(duì)模型進(jìn)行評(píng)估和可視化,實(shí)現(xiàn)了專用的方法,在我之前的文章中其實(shí)都有的,這里簡(jiǎn)單看下就行:
?loss可視化:
模型、工具、可視化等很多相關(guān)的實(shí)現(xiàn)在我之前的文章中都有寫的,這里就不再一一展開(kāi)了,這個(gè)已經(jīng)花費(fèi)了幾個(gè)小時(shí)了。
最后我們想要挖掘不同時(shí)段用電特征的不同,需要基于Kmeans算法來(lái)完成這一工作,K-Means算法是一種常用的無(wú)監(jiān)督學(xué)習(xí)算法,用于將數(shù)據(jù)集劃分為K個(gè)不同的簇(cluster)。每個(gè)簇都具有相似的特征,并且簇內(nèi)的數(shù)據(jù)點(diǎn)彼此之間更加接近。以下是K-Means算法的詳細(xì)步驟:
選擇K個(gè)初始質(zhì)心:從數(shù)據(jù)集中隨機(jī)選擇K個(gè)數(shù)據(jù)點(diǎn)作為初始質(zhì)心。
分配數(shù)據(jù)點(diǎn)到最近的質(zhì)心:對(duì)于每個(gè)數(shù)據(jù)點(diǎn),計(jì)算其與每個(gè)質(zhì)心之間的距離,并將其分配給距離最近的質(zhì)心所屬的簇。
更新質(zhì)心位置:對(duì)于每個(gè)簇,計(jì)算該簇所有數(shù)據(jù)點(diǎn)的均值,并將其作為新的質(zhì)心位置。
重復(fù)步驟2和3,直到質(zhì)心位置不再發(fā)生變化或達(dá)到預(yù)先定義的迭代次數(shù)上限。
最終聚類結(jié)果:得到最終的簇劃分結(jié)果,每個(gè)數(shù)據(jù)點(diǎn)都被分配到一個(gè)簇中。
K-Means算法的目標(biāo)是最小化簇內(nèi)數(shù)據(jù)點(diǎn)與質(zhì)心之間的平方誤差和(Sum of Squared Errors, SSE)。通過(guò)迭代優(yōu)化質(zhì)心位置,算法試圖找到使SSE最小化的最佳簇劃分。
K-Means算法的特點(diǎn)和注意事項(xiàng):
K值的選擇:K是作為輸入?yún)?shù)提供給算法的,需要根據(jù)實(shí)際問(wèn)題和經(jīng)驗(yàn)來(lái)選擇合適的值。不同的K值可能會(huì)導(dǎo)致不同的聚類結(jié)果。
初始質(zhì)心的選擇:初始質(zhì)心的選擇可以影響最終聚類結(jié)果,因此應(yīng)該注意使用隨機(jī)種子或多次運(yùn)行算法以避免局部最優(yōu)解。
數(shù)據(jù)預(yù)處理:在應(yīng)用K-Means算法之前,通常需要對(duì)數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化或歸一化處理,以確保各個(gè)特征具有相似的重要性。
盡管K-Means算法在許多場(chǎng)景下表現(xiàn)良好,但也存在一些限制:
對(duì)初始質(zhì)心位置敏感:初始質(zhì)心的選擇可能影響最終結(jié)果,且算法可能陷入局部最優(yōu)解。
處理非球形簇困難:K-Means算法假設(shè)簇是凸形并且具有相同的方差,因此對(duì)于非球形的、大小不一的簇效果可能較差。
需要指定K值:K值的選擇通常是主觀的,并且較大的K值可能會(huì)導(dǎo)致過(guò)度擬合。
這里需要確定合適的聚類中心數(shù)K,常用的方法就是手肘法。
手肘法(Elbow Method)是一種常用的方法,可用于幫助確定K-Means聚類算法中最優(yōu)的聚類數(shù)量。它基于聚類的SSE(Sum of Squared Errors)或誤差平方和來(lái)評(píng)估不同K值下的聚類效果。以下是使用手肘法確定最優(yōu)聚類數(shù)量的步驟:
在給定范圍內(nèi)選擇K值:首先,選擇一個(gè)合適的K值的范圍,例如從2開(kāi)始到預(yù)設(shè)的最大聚類數(shù)量。
計(jì)算每個(gè)K值對(duì)應(yīng)的SSE:對(duì)于每個(gè)K值,在數(shù)據(jù)集上運(yùn)行K-Means算法,并計(jì)算該K值下的SSE。
繪制SSE與K值的關(guān)系圖:將每個(gè)K值對(duì)應(yīng)的SSE繪制成折線圖或曲線圖。
尋找“手肘點(diǎn)”:觀察SSE與K值的關(guān)系圖,尋找一個(gè)明顯的拐點(diǎn)或“手肘點(diǎn)”,即在該點(diǎn)后進(jìn)一步增加K值所獲得的SSE減少幅度較小。
確定最優(yōu)的聚類數(shù)量:選擇手肘點(diǎn)對(duì)應(yīng)的K值作為最優(yōu)的聚類數(shù)量。
需要注意的是,手肘法并不總是能夠明確地指出最佳的聚類數(shù)量,尤其當(dāng)數(shù)據(jù)集沒(méi)有明顯的手肘點(diǎn)時(shí)。在這種情況下,可以結(jié)合其他評(píng)估指標(biāo)、領(lǐng)域知識(shí)和實(shí)際問(wèn)題考慮選擇適當(dāng)?shù)木垲悢?shù)量。
這里我們基于日粒度的數(shù)據(jù)采用手肘法繪制了對(duì)應(yīng)的曲線如下所示:
?結(jié)合結(jié)果圖分析這里考慮最優(yōu)的聚類中心數(shù)為4。
接下來(lái)就設(shè)定聚類中心為4來(lái)進(jìn)行聚類計(jì)算,Kmeans的使用還是很簡(jiǎn)單的可以直接使用sklearn內(nèi)置的模塊即可,如下:
?這里繪制了7個(gè)因子經(jīng)過(guò)聚類后的數(shù)據(jù)結(jié)果圖,如下所示:
?電壓的話應(yīng)該一直都是保持幾乎不變的狀態(tài),Global_active_power、Global_reactive_power、Global_intensity以及Sub_metering_3呈現(xiàn)出來(lái)的差異還是比較明顯的。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-618746.html
?不知不覺(jué)也寫了挺久了,算是整體流程記錄下。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-618746.html
到了這里,關(guān)于Individual household electric power consumption個(gè)人家庭用電量數(shù)據(jù)挖掘與時(shí)序預(yù)測(cè)建模的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!