交叉驗證與網格搜尋(以KNN分類鳶尾花為例)

2021-10-19 13:17:38 字數 3248 閱讀 2303

總結

import pandas as pd

pd.set_option

('display.max_rows',6

)#1獲取資料

from sklearn.datasets import load_iris

iris=

load_iris()

#新建乙個dataframe,把iris中data方進來,並且dataframe的列的名字是iris的特徵名字

iris_df=pd.

dataframe

(data=iris.data,columns=iris.feature_names)

iris_df[

'class'

]=iris.target#然後再把鳶尾花的分類target放進來

iris_df#這樣就有了乙個**,含有特徵的標籤的乙個**

#2劃分資料集

from sklearn.model_selection import train_test_split

#iris_df的前4行iris_df.iloc[:,:4]是特徵x,最後一列iris_df["class"]是標籤y,70%是訓練集,30%是測試集

x_train,x_test,y_train,y_test=

train_test_split

(iris_df.iloc[:,

:4],iris_df[

"class"

],random_state=

5,test_size=

0.3)

#3特徵工程

from sklearn.preprocessing import standardscaler

std=

standardscaler()

#訓練集資料fit_transform

x_train=std.

fit_transform

(x_train)

#測試集資料只用transform就行了

x_test=std.

transform

(x_test)

#4匯入knn演算法模型,並採用網格劃分和交叉驗證

from sklearn.neighbors import kneighborsclassifier

model_knn=

kneighborsclassifier

()#這個時候n_neighbors等於幾就不指定了 因為下面準備交叉驗證

#匯入網格搜尋和交叉驗證的包

from sklearn.model_selection import gridsearchcv

#準備一下網格驗證的引數 這裡就是knn模型裡的k的個數 n_neighbors

p_dict=

#用字典型別,字典裡面的value用list

#把上面準備好的模型model_knn和p_dict放進來

#並做5折交叉驗證,即訓練的資料再分成5份(其中1份輪流做測試集其餘4份做訓練集)訓練之後結果求平均

gscv=

gridsearchcv

(model_knn,param_grid=p_dict,cv=5)

#訓練資料

#5模型評估

#直接打乙個分數出來

gscv.

score

(x_test,y_test)

0.9555555555555556

#檢視一下網格驗證訓練之後效果和引數

print

('最佳引數組合:{}'

.format

(gscv.best_params_)

)print

('最佳引數組合的模型model:{}'

.format

(gscv.best_estimator_)

)

最佳引數組合:

最佳引數組合的模型model:kneighborsclassifier(algorithm=『auto』, leaf_size=30, metric=『minkowski』,

metric_params=none, n_jobs=none, n_neighbors=7, p=2,

weights=『uniform』)

print

('交叉驗證中二次劃分的分數:{}'

.format

(gscv.best_score_)

)print

('交叉驗證的結果:{}'

.format

(gscv.cv_results_)

)

交叉驗證中二次劃分的分數:0.9714285714285715

交叉驗證的結果:, , , , ], 『split0_test_score』: array([1., 1., 1., 1., 1.]), 『split1_test_score』: array([0.9047619 , 0.9047619 , 0.95238095, 0.9047619 , 0.9047619 ]), 『split2_test_score』: array([1., 1., 1., 1., 1.]), 『split3_test_score』: array([0.85714286, 0.95238095, 0.95238095, 0.95238095, 0.95238095]), 『split4_test_score』: array([0.95238095, 0.95238095, 0.95238095, 0.95238095, 0.95238095]), 『mean_test_score』: array([0.94285714, 0.96190476, 0.97142857, 0.96190476, 0.96190476]), 『std_test_score』: array([0.05553288, 0.03563483, 0.02332847, 0.03563483, 0.03563483]), 『rank_test_score』: array([5, 2, 1, 2, 2], dtype=int32)}

交叉驗證與網格搜尋

交叉驗證與網格搜尋是機器學習中的兩個非常重要且基本的概念,但是這兩個概念在剛入門的時候並不是非常容易理解與掌握,自己開始學習的時候,對這兩個概念理解的並不到位,現在寫一篇關於交叉驗證與網格搜尋的文章,將這兩個基本的概念做一下梳理。網格搜尋 grid search 名字非常大氣,但是用簡答的話來說就是...

網格搜尋與交叉驗證

一.網格搜尋驗證 sklearn.model selection.gridsearchcv estimator,param grid,scoring none,fit params none,n jobs 1,iid true,refit true,cv none,verbose 0,pre dis...

網格搜尋和交叉驗證

在介紹網格搜尋和交叉驗證以前先要介紹下什麼是機器學習的超引數。我們常說的機器學習的引數指的是和特徵相關的係數,超引數指的是對於模型的整體規劃具有重要意義的指標 例如支援向量機中的乘法因子c 用於權衡經驗風險和模型複雜度 當支援向量機核函式是為徑向基rbf核函式,對應的鐘型函式的寬度gamma就是核函...