Python中留一法是分類算法中常用的一種,它的核心思想是將訓練數據集分為兩個部分,一個用于模型的訓練,另一個則用于模型的測試。在模型訓練的過程中,我們將留出一部分數據不參與訓練,然后在模型測試的階段使用這部分留出的數據來評估模型的準確率。
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.neighbors import KNeighborsClassifier
# 加載scikit-learn自帶的iris數據集
iris = load_iris()
# 將數據集分為訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=0, test_size=0.2)
# 訓練knn模型
knn = KNeighborsClassifier(n_neighbors=5)
knn.fit(X_train, y_train)
# 預測測試集的結果
y_pred = knn.predict(X_test)
# 計算模型在測試集上的準確率
accuracy = knn.score(X_test, y_test)
print("測試集準確率: {:.2f}".format(accuracy))
在上面的代碼中,我們使用scikit-learn中的train_test_split函數將數據集分為訓練集和測試集。這個函數的第一個參數是數據集的特征,第二個參數是數據集的標簽,test_size參數表示測試集占比,random_state參數是隨機數種子,保證每次運行結果一致。
然后我們使用KNeighborsClassifier算法訓練模型,并使用predict函數預測測試集的結果。最后使用score函數計算模型在測試集上的準確率。
使用留一法的好處是,我們可以更好地評估模型在新數據上的表現。這是因為模型在訓練過程中沒有看到留出的數據,因此其預測結果更加準確可靠,具有更好的泛化性。