日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据分析与挖掘实战-窃电漏电用户的发现

發布時間:2024/4/11 编程问答 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据分析与挖掘实战-窃电漏电用户的发现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

竊電漏電用戶的發現

  • 背景

    • 在研究這個項目之前我也在想,為什么這種領域需要數據挖掘?其實你若愿意去發現,你會發現,數據挖掘無處不在。
    • 為什么選擇數據分析與挖掘技術?原因當然是之前處理方式的不合理。

      方式不合理之處
      定期巡檢、定期檢查電表、用戶舉報對人的依賴太高,容錯率低 。
      營銷稽查人員、用電檢查人員利用計量異常報警功能和電能量數據查詢功能開展在線監控,采集異常信息,建立數據分析模型由于終端誤報,存在數據可靠性問題。
    • 目前存在的分析模型,各輸入指標權重是由人定的,這是含有主觀臆斷的,存在明顯缺陷,實施效果不盡如人意。
    • 目前的自動化系統可以采集相關信息,通過這些信息提取漏電用戶的特征,構建識別模型,就能做到自動檢查。
  • 分析過程和方法

    • 數據獲取
      • 數據集已給出,很多時候分析人員拿到的不是數據集信息而是需要處理的原始數據如多個文檔、多個圖片,處理方法各不相同。
    • 數據探索
      • 分布分析(主要目的是篩選分析對象類別)
      • 周期性分析(查看正常用戶和非正常用戶數據周期變化比對)
    • 數據預處理
      • 過濾不可能竊電用戶,剔除之
      • 過濾特殊時間點數據(節假日,數據不合理是正常的)
      • 缺失值處理,使用拉格朗日插值法插值(注意,這里直接刪除會造成周期性分析不合理)
    • 數據挖掘建模
      • 典型的給出特征和分類標簽,對新的數據特征進行分類(打標簽)
      • 使用LM神經網絡和CART決策樹進行模型搭建
    • 后續處理
      • 根據用戶數據實時分析用戶特征,也就是模型的實際使用。
  • 補充說明
    • 使用兩種建模方式(LM神經網絡和CART決策樹)
    • 本案例數據集已經相當合理,主要工作就是建模,不多贅述
    • 參考書《Python數據分析與挖掘實戰》
# -*- coding: utf-8 -*- """ 使用決策樹建模數據預估 """ import matplotlib.pyplot as plt import pandas as pd from random import shuffle import pydotplus from sklearn.externals.six import StringIO from sklearn import tree from sklearn import metrics from sklearn.model_selection import train_test_splitfeathersName = Nonedef getDataSet(fileName):data = pd.read_excel(fileName)global feathersName# 提取特征名feathersName = data.columns[:3].valuesdata = data.values# 隨機打亂shuffle(data)# 設置訓練集數據量為總數據的80%rawData = data[:, :3]rawLabel = data[:, 3]trainData, testData, trainLabel, testLabel = train_test_split(rawData, rawLabel, test_size=0.2)return trainData, testData, trainLabel, testLabeldef modeling(trainData, trainLabel, testData, testLabel):# 構建CART決策樹模型clf = tree.DecisionTreeClassifier(max_depth=5)clf.fit(trainData, trainLabel)# 本地落地模型from sklearn.externals import joblibjoblib.dump(clf, 'tree.pkl')# 可視化決策樹plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falsedot_data = StringIO()tree.export_graphviz(clf, out_file=dot_data, feature_names=feathersName, class_names=str(clf.classes_),filled=True, rounded=True, special_characters=True)graph = pydotplus.graph_from_dot_data(dot_data.getvalue())graph.write_pdf("tree.pdf")# 利用模型回判測試集,輸出預測結果混淆矩陣cm = metrics.confusion_matrix(trainLabel, clf.predict(trainData))print(cm)# 利用模型預測測試集,輸出ROC曲線from sklearn.metrics import roc_curvefpr, tpr, thresholds = roc_curve(testLabel, clf.predict_proba(testData)[:, 1], pos_label=1)plt.plot(fpr, tpr, linewidth=2, label='ROC of CART', color='green')plt.title("CART決策樹分類結果")plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.ylim(0, 1.05)plt.xlim(0, 1.05)plt.legend(loc=4)plt.show()if __name__ == '__main__':a, b, c, d = getDataSet('./data/model.xls')modeling(a, c, b, d)

?

# -*- coding: utf-8 -*- """ 使用LM神經網絡進行建模分析 """ import pandas as pd import matplotlib.pyplot as plt from random import shuffle from keras.models import Sequential from keras.layers.core import Dense, Activation from cm_plot import * from sklearn.metrics import roc_curve from sklearn.metrics import confusion_matrix from sklearn.model_selection import train_test_splitdef getDataSet(fileName):data = pd.read_excel(fileName)data = data.values# 隨機打亂shuffle(data)rawData = data[:, :3]rawLabel = data[:, 3]trainData, testData, trainLabel, testLabel = train_test_split(rawData, rawLabel, test_size=0.2)def modeling(trainData, trainLabel, testData, testLabel):'''構建LM神經網絡:return:'''netFile = 'net.model'net = Sequential()# 添加輸入層(3結點)到隱藏層(10結點)的連接net.add(Dense(input_dim=3, units=10))# 隱藏層使用relu激活函數net.add(Activation('relu'))# 添加隱藏層(10結點)到輸出層(1結點)的連接net.add(Dense(input_dim=10, units=1))# 輸出層使用sigmoid激活函數net.add(Activation('sigmoid'))net.compile(loss='binary_crossentropy', optimizer='adam')# 循環1000次訓練模型net.fit(trainData, trainLabel, epochs=1000, batch_size=1)# 本地化模型net.save_weights(netFile)# 訓練集數據回判# keras用predict給出預測概率,predict_classes才是給出預測類別,而且兩者的預測結果都是n*1維數組,而不是通常的1*nrst = net.predict_classes(trainData).reshape(len(trainData))# 輸出混淆矩陣cm = confusion_matrix(trainLabel, rst)print('訓練集混淆矩陣', cm)# 測試集預測rst_test = net.predict_classes(testData).reshape(len(testData))cm2 = confusion_matrix(testLabel, rst_test)print('測試集混淆矩陣', cm2)rst2 = net.predict(testData).reshape(len(testData))fpr, tpr, thresholds = roc_curve(testLabel, rst2, pos_label=1)#plt.rcParams['font.sans-serif'] = ['SimHei']plt.rcParams['axes.unicode_minus'] = Falseplt.plot(fpr, tpr, linewidth=2, label='ROC of LM')plt.title("LM神經網絡分類結果")plt.xlabel('False Positive Rate')plt.ylabel('True Positive Rate')plt.ylim(0, 1.05)plt.xlim(0, 1.05)plt.legend(loc=4)plt.show()modeling(trainData, trainLabel, testData, testLabel)if __name__ == '__main__':getDataSet('./data/model.xls')

具體數據集和代碼可以看我的github。

?

總結

以上是生活随笔為你收集整理的数据分析与挖掘实战-窃电漏电用户的发现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。