sklearn.model_selection就是選擇模型的額叙凡,主要方法是cross_val_score蜗搔,主要是把原始數(shù)據(jù)拿出一部分來做驗證,看訓練的怎么樣锌钮,就像考試一樣,考題和平時的練習題不一樣才能知道學的怎么樣引矩,假如用訓練數(shù)據(jù)做test梁丘,出現(xiàn)的問題就是過擬合,很好理解旺韭,就是練習題(training data 得分很高)做的非常熟練氛谜,一考試(test data 得分很低)就蒙圈。
from sklearn.model_selection import cross_val_score
scores = cross_val_score( clf, iris.data, iris.target, cv=5, scoring='f1_macro')
這里scoring是驗證方法区端,一般分類都選用accuracy值漫。
f1_macro,‘f1_micro’ 這兩個都是針對數(shù)據(jù)非常不平等织盼,有一個labe很少出現(xiàn)杨何,比如癌癥,你用accuracy來評價不科學悔政,因為出現(xiàn)癌癥本身的概率太小晚吞,就要用這兩個指標來衡量假陽性和假陰性延旧。
cv是k折一般谋国,就是分成幾份,k-1份訓練迁沫,1分test芦瘾。默認用kfold捌蚊,數(shù)據(jù)是連續(xù)的。
另:吳恩達這樣建議近弟,training set缅糟,cross_validation set跟test set比例為6:2:2,即留出20%的數(shù)據(jù)專門用于test祷愉。
這可以用train_test_split來實現(xiàn)窗宦。
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, test_size=0.2, random_state=0)
random_state是隨機種子,這叫 偽隨機二鳄,因為相同的隨機種子會劃分同樣的數(shù)據(jù)集赴涵。
還有一種替代kfold,sklearn.model_selection.ShuffleSplit订讼,先打亂數(shù)據(jù)髓窜,再分,比如股市受大盤影響比較大欺殿,用kfold來分寄纵,可以training set是震蕩市,test set是下跌市脖苏,就不準程拭。
文檔這樣形容[ShuffleSplit
可以替代 KFold
交叉驗證,因為其提供了細致的訓練 / 測試劃分的 數(shù)量和樣例所占的比例等的控制棍潘。
]
from sklearn.model_selection import ShuffleSplit
ss = ShuffleSplit(n_splits=3,test_size=0.25,random_state=0)
scores = cross_val_score( clf, iris.data, iris.target, cv=ss, scoring='f1_macro')