Day Three——使用sklearn和Keras訓練模型可視化

Day Three——使用sklearn和Keras訓練模型可視化

完整代碼及數據地址

第一部分數據bankloan.xls

第二部分數據sales_data.xls

第三部分數據sales_data.xls

第四部分數據consumption_data.xls

第五部分數據consumption_data.xls

第六部分數據arima_data.xls

第七部分數據consumption_data.xls

第八部分數據menu_orders.xls

第一部分——隨機森林(RLR)求有效特徵,邏輯迴歸(LR)求相關係數

對應函數programmer_1

步驟:

  1. 導入數據,轉換矩陣

  2. 調包。from sklearn.linear_model import LogisticRegression as LR邏輯迴歸,

    from sklearn.linear_model import RandomizedLogisticRegression as RLR隨機森林

  3. 輸出有效特徵、輸出相關係數

這裏在運行的時候,會有一個warning。大意說,這個方法在之後會被取消。但是目前我沒有找到替代的方法。

DeprecationWarning: Class RandomizedLogisticRegression is deprecated; The class RandomizedLogisticRegression is deprecated in 0.19 and will be removed in 0.21.

有一個Error,解決方法就是去掉最後一列再進行索引。data.drop('違約', axis=1).columns[rlr_support]

IndexError: boolean index did not match indexed array along dimension 0; dimension is 9 but corresponding boolean dimension is 8

第二部分——用決策樹(DTC)生成dot文件並保存

對應函數programmer_2

步驟:

  1. 導入數據,將文字轉換爲1和-1。正面詞爲1,相反爲負面詞。
  2. 轉換矩陣。用決策樹訓練,得到模型。from sklearn.tree import DecisionTreeClassifier as DTC
  3. 轉換回DataFrame,獲取columns。用dot文件進行保存。from sklearn.tree import export_graphviz

第三部分——用Keras神經網絡訓練數據

對應函數programmer_3

步驟:

  1. 導入數據,轉換文字,轉換矩陣(同上)
  2. 編譯模型,這裏需要注意的是output_dim參數改爲了unitsfrom keras.layers.core import Activation, Densefrom keras.models import Sequential
  3. 訓練模型,這裏需要注意的是nb_epochs參數改爲了epochs
  4. 畫圖

輸出圖形如下:

3.png

第四部分——用K聚類算法(KMeans)分類並保存數據和畫概率密度圖

對應函數programmer_4

步驟:

  1. 導入數據,設定聚類簇數目k=3,迭代次數iteration=500,線程數n_jobs=4
  2. KMeans模型訓練,得到分類結果model.labels_,聚類中心model_cluster_centers_
  3. 統計各個類別的數目,並構成一個新的DataFrame輸出到新的excel文件中。
  4. 繪概率密度圖。大致根據每個類別的比例進行繪製。

輸出結果如下:

          R         F         M  類別數目
0  3.455055 -0.295654  0.449123    40
1 -0.149353 -0.658893 -0.271780   559
2 -0.160451  1.114802  0.392844   341

圖形如下:

pd_0.png

pd_1.png

pd_2.png

第五部分——用TSNE進行降維處理並進行可視化

對應函數programmer_5

步驟:

  1. 用上一部分得到的數據,進行降維處理。from sklearn.manifold import TSNE
  2. 根據各個類別的不同,繪製散點圖

圖形如下:

5.png

第六部分——用ARIMA訓練時序模型並進行預測,相關過程進行可視化和檢驗

對應函數programmer_6

步驟:

  1. 導入數據,繪圖調用模塊from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
  2. 繪製第一幅自相關圖。
  3. 計算原始序列的平穩性檢測from statsmodels.tsa.stattools import adfuller as ADF
  4. 計算差分diff().dropna()
  5. 繪製時序圖
  6. 繪製第二幅自相關圖(差分後)
  7. 繪製偏自相關圖
  8. 計算差分序列的平穩性檢測
  9. 計算差分序列的白噪聲檢驗from statsmodels.stats.diagnostic import acorr_ljungbox
  10. ARIMA求得bic矩陣最小pq值。from statsmodels.tsa.arima_model import ARIMA
  11. 之後再用ARIMA模型,得到模型報告model.summary2(),並且進行預測五天之後model.forecast(5)

出現了這個警告UserWarning: matplotlib is currently using a non-GUI backend, so cannot show the figure。產生原因是: 調用了多次plt.show()。解決方案就是繪製子圖,使用plt.subplot()

還有很多Warning。比如下面這個RuntimeWarning: overflow encountered in exp,這個指的是運算精度不夠,還有一些被除數不能爲零之類的警告。暫時不知道如何處理,使用了warning進行過濾。

輸出結果如下:

差分序列的ADF檢驗結果爲: (-3.1560562366723528, 0.022673435440048861, 0, 35, {'1%': -3.6327426647230316, '5%': -2.9485102040816327, '10%': -2.6130173469387756}, 287.59090907803341)
差分序列的白噪聲檢驗結果爲: (array([ 11.30402222]), array([ 0.00077339]))
BIC最小的p值和q值爲:01

輸出圖形如下:

第一幅自相關圖

6_1.png

時序圖

6_2.png

第二幅自相關圖(差分後)、偏自相關圖

6_3.png

第七部分——用K聚類算法(KMeans)分類並可視化標記離羣點

對應函數programmer_7

步驟:

  1. 前半部分同第四部分。構造一個新的DataFrame來保存分類後的結果
  2. 計算聚類中心的相對距離
  3. 超過閾值threshold=2的點標記爲離羣點。繪製散點圖

輸出圖形如下:

7.png

第八部分——計算各個特徵的關聯程度

對應函數programmer_8

步驟:

  1. 讀取數據,轉換爲0-1矩陣。設定最小支持度support=0.2,最小置信度confidence=0.5
  2. 根據支持度篩選列數據。創建連接數據,計算連接後的支持度,計算置信度序列,再進行置信度篩選

我的理解就是,從第一個特徵開始到最後,一直找出支持度高的集合進行遍歷所有可能性,詳情可以看代碼。

輸出如下:

轉換原始數據至0-1矩陣...

轉換完畢。

正在進行第1次搜索...
數目:6...

正在進行第2次搜索...
數目:3...

正在進行第3次搜索...
數目:0...

結果爲:
           support  confidence
e---a          0.3    1.000000
e---c          0.3    1.000000
c---e---a      0.3    1.000000
a---e---c      0.3    1.000000
a---b          0.5    0.714286
c---a          0.5    0.714286
a---c          0.5    0.714286
c---b          0.5    0.714286
b---a          0.5    0.625000
b---c          0.5    0.625000
b---c---a      0.3    0.600000
a---c---b      0.3    0.600000
a---b---c      0.3    0.600000
a---c---e      0.3    0.600000
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章