機器學習十 交叉驗證
阿新 • • 發佈:2018-12-30
交叉驗證(Cross Validation)
定義(摘自百度百科):交叉驗證的基本思想是把在某種意義下將原始資料(dataset)進行分組,一部分做為訓練集(train set),另一部分做為驗證集(validation set or test set),首先用訓練集對分類器進行訓練,再利用驗證集來測試訓練得到的模型(model),以此來做為評價分類器的效能指標。
目的:為了獲得一個更加穩定可靠的模型。
交叉驗證程式碼例項
from sklearn import datasets from sklearn.svm import SVC iris = datasets.load_iris() features = iris.data labels = iris.target from sklearn import cross_validation features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(features,labels,test_size=0.4,random_state=0) clf = SVC(kernel="linear", C=1.) clf.fit(features_train, labels_train) print clf.score(features_test, labels_test)
K折交叉驗證(K Fold Cross Validation)
→將資料拆分成訓練集與驗證集的過程
演算法基本要點:將訓練資料平分到相同大小的K個容器內。
在K折交叉驗證中,將執行K次單獨的學習實驗,在每次實驗中,將從K個子集中挑選一個作為驗證集,剩下(K-1)個容器放在一起作為訓練集,然後訓練機器學習演算法。
在驗證集上驗證效能。
交叉驗證中的要點是這個操作會執行多次,然後對K次試驗的測試結果取平均值。
隨機化 Sklearn k 折 CV 中的事件
cv = KFold( len(authors), 2, shuffle=True )
Sklearn中的GridSearchCV
用於系統地遍歷多種引數組合,通過交叉驗證確定最佳效果引數。它的好處是,只需增加幾行程式碼,就能遍歷多種組合。
parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}
svr = svm.SVC()
clf = grid_search.GridSearchCV(svr, parameters)
clf.fit(iris.data, iris.target)