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
步驟:
導入數據,轉換矩陣
調包。
from sklearn.linear_model import LogisticRegression as LR
邏輯迴歸,from sklearn.linear_model import RandomizedLogisticRegression as RLR
隨機森林輸出有效特徵、輸出相關係數
這裏在運行的時候,會有一個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,相反爲負面詞。 - 轉換矩陣。用決策樹訓練,得到模型。
from sklearn.tree import DecisionTreeClassifier as DTC
- 轉換回
DataFrame
,獲取columns
。用dot
文件進行保存。from sklearn.tree import export_graphviz
第三部分——用Keras神經網絡訓練數據
對應函數programmer_3
步驟:
- 導入數據,轉換文字,轉換矩陣(同上)
- 編譯模型,這裏需要注意的是
output_dim
參數改爲了units
。from keras.layers.core import Activation, Dense
、from keras.models import Sequential
- 訓練模型,這裏需要注意的是
nb_epochs
參數改爲了epochs
- 畫圖
輸出圖形如下:
第四部分——用K聚類算法(KMeans)分類並保存數據和畫概率密度圖
對應函數programmer_4
步驟:
- 導入數據,設定聚類簇數目
k=3
,迭代次數iteration=500
,線程數n_jobs=4
- 用
KMeans
模型訓練,得到分類結果model.labels_
,聚類中心model_cluster_centers_
- 統計各個類別的數目,並構成一個新的
DataFrame
輸出到新的excel
文件中。 - 繪概率密度圖。大致根據每個類別的比例進行繪製。
輸出結果如下:
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
圖形如下:
第五部分——用TSNE進行降維處理並進行可視化
對應函數programmer_5
步驟:
- 用上一部分得到的數據,進行降維處理。
from sklearn.manifold import TSNE
- 根據各個類別的不同,繪製散點圖
圖形如下:
第六部分——用ARIMA訓練時序模型並進行預測,相關過程進行可視化和檢驗
對應函數programmer_6
步驟:
- 導入數據,繪圖調用模塊
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
- 繪製第一幅自相關圖。
- 計算原始序列的平穩性檢測
from statsmodels.tsa.stattools import adfuller as ADF
- 計算差分
diff().dropna()
- 繪製時序圖
- 繪製第二幅自相關圖(差分後)
- 繪製偏自相關圖
- 計算差分序列的平穩性檢測
- 計算差分序列的白噪聲檢驗
from statsmodels.stats.diagnostic import acorr_ljungbox
- 用
ARIMA
求得bic
矩陣最小p
、q
值。from statsmodels.tsa.arima_model import ARIMA
- 之後再用
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值爲:0、1
輸出圖形如下:
第七部分——用K聚類算法(KMeans)分類並可視化標記離羣點
對應函數programmer_7
步驟:
- 前半部分同第四部分。構造一個新的
DataFrame
來保存分類後的結果 - 計算聚類中心的相對距離
- 超過閾值
threshold=2
的點標記爲離羣點。繪製散點圖
輸出圖形如下:
第八部分——計算各個特徵的關聯程度
對應函數programmer_8
步驟:
- 讀取數據,轉換爲0-1矩陣。設定最小支持度
support=0.2
,最小置信度confidence=0.5
- 根據支持度篩選列數據。創建連接數據,計算連接後的支持度,計算置信度序列,再進行置信度篩選
我的理解就是,從第一個特徵開始到最後,一直找出支持度高的集合進行遍歷所有可能性,詳情可以看代碼。
輸出如下:
轉換原始數據至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