周志華《機器學習》課後習題解答系列(四):Ch3.4 - 交叉驗證法練習
本系列主要採用Python-sklearn實現,環境搭建可參考 資料探勘入門:Python開發環境搭建(eclipse-pydev模式).
相關答案和原始碼託管在我的Github上:PY131/Machine-Learning_ZhouZhihua.
3.4 比較k折交叉驗證法與留一法
本題採用UCI中的 Iris Data Set 和 Blood Transfusion Service Center Data Set,基於sklearn完成練習(檢視完整程式碼)。
關於資料集的介紹:
IRIS資料集簡介 - 百度百科;通過花朵的性狀資料(花萼大小、花瓣大小…)來推測花卉的類別。變數屬性X=4種,類別標籤y公有3種,這裡我們選取其中兩類資料來擬合對率迴歸(邏輯斯蒂迴歸)。
Blood Transfusion Service Center Data Set - UCI;通過獻血行為(上次獻血時間、總獻血cc量…)的歷史資料,來推測某人是否會在某一時段獻血。變數屬性X=4種,類別y={0,1}。該資料集相對iris要大一些。
具體過程如下:
1. 資料匯入、視覺化、預分析:
iris資料集十分常用,sklearn的資料包已包含該資料集,我們可以直接載入。對於transfusion資料集,我們從UCI官網上下載匯入即可。
採用seaborn庫可以實現基於matplotlib的非常漂亮的視覺化呈現效果,下圖是採用seaborn.pairplot()繪製的iris資料集各變數關係組合圖,從圖中可以看出,類別區分十分明顯,分類器應該比較容易實現:
相關樣例程式碼:
import numpy as np
import seaborn as sns
sns.set(style="white", color_codes=True)
iris = sns.load_dataset("iris")
iris.plot(kind="scatter", x="sepal_length", y="sepal_width")
sns.pairplot(iris,hue='species')
sns.plt.show()
2. 基於sklearn進行擬合與交叉驗證:
這裡我們選擇iris中的兩類資料對應的樣本進行分析。k-折交叉驗證可直接根據sklearn.model_selection.cross_val_predict()得到精度、F1值等度量(該函式要求1<k<n-1)。留一法稍微複雜一點,這裡採用loop實現。
面向iris資料集的樣例程式碼:
'''
2-nd logistic regression using sklearn
'''
from sklearn.linear_model import LogisticRegression
from sklearn import metrics
from sklearn.model_selection import cross_val_predict
# log-regression lib model
log_model = LogisticRegression()
m = np.shape(X)[0]
# 10-folds CV
y_pred = cross_val_predict(log_model, X, y, cv=10)
print(metrics.accuracy_score(y, y_pred))
# LOOCV
from sklearn.model_selection import LeaveOneOut
loo = LeaveOneOut()
accuracy = 0;
for train, test in loo.split(X):
log_model.fit(X[train], y[train]) # fitting
y_p = log_model.predict(X[test])
if y_p == y[test] : accuracy += 1
print(accuracy / np.shape(X)[0])
得出了精度(預測準確度)結果如下:
0.97
0.96
可以看到,兩種方法的模型精度都十分高,這也得益於iris資料集類間散度較大。
同樣的方法對blood-transfusion資料集得出的精度結果:
0.76
0.77
也可以看到,兩種交叉驗證的結果相近,但是由於此資料集的類分性不如iris明顯,所得結果也要差一些。同時由程式執行可以看出,LOOCV的執行時間相對較長,這一點隨著資料量的增大而愈發明顯。
所以,一般情況下選擇K-折交叉驗證即可滿足精度要求,同時運算量相對小。
本文的一些重要索引如下:
相關文章
- 周志華《機器學習》課後習題解答系列(一):目錄機器學習
- 周志華《機器學習》課後習題解答系列(四):Ch3 - 線性模型機器學習模型
- 周志華《機器學習》課後習題解答系列(六):Ch5.8 - SOM網路實驗機器學習H5
- 周志華《機器學習》課後習題解答系列(六):Ch5.7 - RBF網路實驗機器學習H5
- 周志華《機器學習》課後習題解答系列(五):Ch4 - 決策樹機器學習
- 機器學習-周志華-課後習題答案5.5機器學習
- 周志華《機器學習》課後習題解答系列(六):Ch5 - 神經網路機器學習H5神經網路
- 周志華《機器學習》課後習題解答系列(四):Ch3.3 - 程式設計實現對率迴歸機器學習程式設計
- 周志華《機器學習》課後習題解答系列(三):Ch2 - 模型評估與選擇機器學習模型
- 周志華《機器學習》課後習題解答系列(六):Ch5.5 - BP演算法實現機器學習H5演算法
- 周志華《機器學習》課後習題解答系列(六):Ch5.6 - BP演算法改進機器學習H5演算法
- 周志華《機器學習》課後習題解答系列(六):Ch5.10 - 卷積神經網路實驗機器學習H5卷積神經網路
- 周志華《機器學習》課後習題解答系列(四):Ch3.5 - 程式設計實現線性判別分析機器學習程式設計
- 周志華《機器學習》課後習題解答系列(五):Ch4.3 - 程式設計實現ID3演算法機器學習程式設計演算法
- 周志華《機器學習》課後習題解答系列(五):Ch4.4 - 程式設計實現CART演算法與剪枝操作機器學習程式設計演算法
- 機器學習-周志華機器學習
- 周志華 機器學習ppt機器學習
- 周志華西瓜書《機器學習》機器學習
- 課後練習
- 重磅!周志華《機器學習》手推筆記來了!機器學習筆記
- 練習第四周8.31
- 《機器學習導論》和《統計機器學習》學習資料:張志華教授機器學習
- 機器學習定義及基本術語(根據周志華的《機器學習》概括)機器學習
- U7-11課綜合練習+12課階段測評練習——複習練習題目
- 《C和指標》第三章課後習題解答指標
- AI會議排名_周志華AI
- 周志華西瓜書《機器學習》第三章線性模型機器學習模型
- python第四章課後習題Python
- 演算法導論課後習題解答 第一部分 練習1.1-1->1.1-5演算法
- 周志華西瓜書《機器學習筆記》學習筆記第二章《模型的評估與選擇》機器學習筆記模型
- 微課|玩轉Python輕鬆過二級:第2章課後習題解答(3課,79題)Python
- 10. 建立管理表課後練習
- python課後習題Python
- java課後題複習Java
- 課堂練習
- 2018 AI World 觀後感——周志華教授partAI
- 微課|玩轉Python輕鬆過二級:第3章課後習題解答3Python
- 微課|玩轉Python輕鬆過二級:第3章課後習題解答4Python