【机器学习】K-近邻算法-模型选择与调优
前言
在KNN算法中,k值的選擇對我們最終的預測結果有著很大的影響
那么有沒有好的方法能夠幫助我們選擇好的k值呢?
模型選擇與調優
目標
-
說明交叉驗證過程
-
說明參數搜索過程
-
應用GirdSearchCV實現算法參數的調優
應用
Facebook 簽到位置預測調優
什么是交叉驗證(cross validation)
定義
將拿到的訓練數據,分為訓練和驗證集,以下圖為例:將數據分成4份,其中一份作為驗證集,然后經過4次(組)的測試,每次都更換不同的驗證集,即得到4組模型的結果,取平均值作為最終結果。由于是將數據分為4份,所以我們稱之為4折交叉驗證。
分析
我們之前知道數據分為訓練集和測試集,但是**為了讓從訓練得到模型結果更加準確。**做以下處理
-
訓練集:訓練集+驗證集
-
測試集:測試集
為什么要進行交叉驗證
交叉驗證的目的:為了讓被評估的模型更加準確可信
超參數搜索-網格搜索(Grid Search)
通常情況下,有很多參數是需要手動指定的(如K-近鄰算法中的k值),這種叫做超參數。但是手動過程繁雜,所以需要對模型預設幾種超參數組合。每組超參數都采用交叉驗證來進行評估。最后選出最優參數組合建立模型。
模型選擇與調優API
-
sklearn.model_selection.GridSearchCV(estimator, param_grid=None,cv=None)
-
對估計器的指定參數值進行詳細搜索
-
estimator:估計器對象
-
param_grid:估計器參數(dict){‘n_neighbors’:[1,3,5]}
-
cv: 指定幾折交叉驗證
-
fit :輸入訓練數據
-
score:準確率
-
結果分析:
-
bestscore:在交叉驗證中驗證的最好結果_
-
bestestimator:最好的參數模型
-
cvresults:每次交叉驗證后的驗證集準確率結果和訓練集準確率結果
鳶尾花案例增加K值調優
使用GridSearchCV構建估計器
def knn_iris_gscv():"""用KNN算法對鳶尾花進行分類,添加網格搜索和交叉驗證:return:"""# 1)獲取數據iris = load_iris()# 2)劃分數據集x_train, x_test, y_train, y_test = train_test_split(iris.data, iris.target, random_state=22)# 3)特征工程:標準化transfer = StandardScaler()x_train = transfer.fit_transform(x_train)x_test = transfer.transform(x_test)# 4)KNN算法預估器estimator = KNeighborsClassifier()# 加入網格搜索與交叉驗證# 參數準備param_dict = {"n_neighbors": [1, 3, 5, 7, 9, 11]}estimator = GridSearchCV(estimator, param_grid=param_dict, cv=10)estimator.fit(x_train, y_train)# 5)模型評估# 方法1:直接比對真實值和預測值y_predict = estimator.predict(x_test)print("y_predict:\n", y_predict)print("直接比對真實值和預測值:\n", y_test == y_predict)# 方法2:計算準確率score = estimator.score(x_test, y_test)print("準確率為:\n", score)# 最佳參數:best_params_print("最佳參數:\n", estimator.best_params_)# 最佳結果:best_score_print("最佳結果:\n", estimator.best_score_)# 最佳估計器:best_estimator_print("最佳估計器:\n", estimator.best_estimator_)# 交叉驗證結果:cv_results_print("交叉驗證結果:\n", estimator.cv_results_)總結
以上是生活随笔為你收集整理的【机器学习】K-近邻算法-模型选择与调优的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】分类算法-K-近邻算法
- 下一篇: 机器学习-sk-learn-Facebo