書中介紹太繞,甚至是不清楚的,在此記錄一下學習體會!git
該例主要講的是用戶洗浴用水事件的識別問題(熱水器數據),歸結爲0-1分類問題——這是全局觀github
按分析問題大的步驟:網絡
數據探索性分析——>數據規約——>一次用水事件劃分及閾值尋優——>特徵工程/屬性構造——>篩選洗浴事件(?)——>NN-Model學習
- (?)這一部分,沒搞懂做者意圖,問題一開始就說是要識別出獨立用水事件中的洗浴事件,那到此步驟不就完了,~後面就是爲了跑跑模型train-test,blabla~???
- 從該章標題看(?)及以前是家用電器用戶行爲分析,以後纔是事件識別,這樣才解釋得通
- 最值得吐槽的是:本身說的數值規約,然而本身實現起來就跟本不存在什麼數值規約哦
我的以爲本章最值得學習的點有:spa
- 問題的分析思路(前後該作些什麼、如何作),見上面步驟
- 數據分析處理方法(見下方簡要介紹)
- 特徵工程/屬性構造(涉及特定問題特定分析,結合問題的關注點,如選取了時長類指標、頻率類指標、水量指標、用水變化/波動指標)
- 篩選洗浴事件方式方法:一次用水事件劃分——>候選洗浴事件劃分(一次用水量<yLitre、用水時長<100s、總用水時長<120s)
關於數據分析處理方法,文中介紹甚是模糊,我的理解記錄於此:
時間的劃分均是基於用水量數據來區分的
一次用水事件劃分
閾值尋優
閾值尋優區間1min——9min,step=0.25min=15sexcel
計算原理:code
以閾值及對應劃分的用水事件數,做圖,當n個相鄰點斜率值(取最小的斜率對應的閾值,斜率小說明曲線平穩用戶習慣比較趨於平穩)blog
特徵工程/ 屬性構造
這類問題解構/組合須要經驗和對應問題須要,多多學習~~事件
篩選候選洗浴事件
文中給出的是斷定短暫用水事件,將其他的做爲候選洗浴事件,惋惜的是描述混亂+無代碼get
關於斷定標準,我的感受很是的主觀呀(這裏僅摘記文中標準,知足一個就算是短暫,或關係),但願大神留言講一講啊,thx~
- 一次用水事件總用水(總水量*熱水量(%)=純熱水)<yLitre
- 用水時長<100s
- 總用水時長<120s
其中文中y的取值也頗有意思,考慮了熱水器不一樣設定溫度下熱水的使用量閾值y:
由一系列假設,說明當一次洗浴中熱水溫度越高熱水量使用就越少,反之反是;
V表示熱水器的水恆50度時洗浴最低用量,X當前水溫,C注入的自來水每個月平均溫度(室溫均值)
多層神經網絡
1 from keras.models import Sequential 2 from keras.layers.core import Dense,Activation 3 4 net = Sequential() 5 #net.add(Dense(input_dim = 11, output_dim = 17))#keras 2.0以前版本 6 net.add(Dense(input_dim=11, units=17))#keras 2.0 ,推薦;添加輸入層、隱藏層的鏈接 7 net.add(Activation('relu')) 8 net.add(Dense(input_dim=17, units=10)) 9 net.add(Activation('relu')) 10 #model.add(Dense(10, 1)) #添加隱藏層、輸出層的鏈接 11 net.add(Dense(1)) # 輸出層,同上 12 net.add(Activation('sigmoid')) 13 net.compile(loss='binary_crossentropy', optimizer='adam',metrics=['accuracy']) 14 15 #net.fit(x_train, y_train,epochs=10,batch_size=1)#keras 2.0以前版本 16 net.fit(x_train, y_train,epochs=1000,batch_size=1,verbose=1)#keras 2.0,推薦,verbose=0,不顯示過程,默認等於1顯示過程 17 r = pd.DataFrame(model.predict_classes(x_test), columns = [u'預測結果']) 18 pd.concat([data_test.iloc[:,:5], r], axis = 1).to_excel(testoutputfile) 19 net.predict(x_test)
REF:
《數據分析與挖掘實戰》
源代碼及數據須要可自取:https://github.com/Luove/Data