⭐為什麼要劃分測試集與訓練集?
⭐交叉驗證
k是使用者指定的數位,通常取0/5,
5折交叉驗證:資料劃分為5部分,每一部分叫做折。每一折依次輪流作為測試集,其餘做訓練集
mglearn.plots.plot_cross_validation()
利用model_selection中的cross_val_score(模型,訓練資料,真實標籤)
#在iris資料上,利用logisticregre進行評估
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_iris
from sklearn.model_selection import cross_val_score
iris = load_iris()
lrg = LogisticRegression()
scores = cross_val_score(lrg,iris.data,iris.target)
print("cross_validation scores:{}".format(scores))
'''
`cross_validation scores:[0.96666667 1. 0.93333333 0.96666667 1. ]`
'''
預設情況下,cross_val_score執行3折交叉驗證,可通過修改cv值改變折數
#總結交叉驗證精度:計算平均值
print("Average cross-validation:{:.2f}".format(scores.mean()))
'''
`Average cross-validation:0.97`
'''
⭐sklearn裡面的交叉驗證
分類問題時使用:分層交叉驗證
迴歸問題:標準k折交叉驗證
mglearn.plots.plot_stratified_cross_validation()
⭐可以用cv來調節cross_val_score的折數
sklearn還提供一個交叉驗證分離器(cross_validatoin splitter)作為cv引數
#在分類資料集上使用標準K折交叉驗證
#需要從model_selection匯入KFold分離器類,並將其範例化
from sklearn.model_selection import KFold
kf = KFold(n_splits=5) #5折
scores = cross_val_score(lrg,iris.data,iris.target,cv=kf)
print("cross_validation scores:{}".format(scores))
'''
`cross_validation scores:[1. 1. 0.86666667 0.93333333 0.83333333]`
'''
kf = KFold(n_splits=3) #3折
scores = cross_val_score(lrg,iris.data,iris.target,cv=kf)
print("cross_validation scores:{}".format(scores))
'''
`cross_validation scores:[0. 0. 0.]`
'''