1. 程式人生 > >機器學習十 交叉驗證

機器學習十 交叉驗證

交叉驗證(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)