機器學習代碼實戰——網格搜索和交叉驗證(GridSearchCV)

1.實驗目的

(1)運用GridSearchCV比較不同的模型、不同的參數對實驗結果的影響。
(2)運用字典存儲模型和參數
(3)實驗所用數據集爲sklearn自帶的手寫數字數據集

2.導入必要模塊並讀取數據

from sklearn import datasets
from sklearn import svm    #支持向量機
from sklearn.ensemble import RandomForestClassifier  #隨機森林
from sklearn.linear_model import LogisticRegression   #邏輯迴歸
from sklearn.naive_bayes import GaussianNB      #先驗爲高斯分佈的樸素貝葉斯
from sklearn.naive_bayes import MultinomialNB   #先驗爲多項式分佈的樸素貝葉斯
from sklearn.tree import DecisionTreeClassifier  #決策樹

digits = datasets.load_digits()    #加載手寫題數據集

3.構建模型-參數字典

#構建模型到參數的字典
model_params = {
    'svm':{
        'model':svm.SVC(gamma='auto'),
        'params':{
            'C':[1,10,20],
            'kernel':['rbf','linear']
        }
    },
    'random_forest':{
        'model':RandomForestClassifier(),
        'params':{
            'n_estimators':[1,5,10]
        }
    },
    'logistic_regression':{
        'model':LogisticRegression(),
        'params':{
            'C':[1,5,10]
        }
    },
    'naive_bayes_gaussian':{
        'model':GaussianNB(),
        'params':{}
    },
    'naive_bayes_multinomial':{
        'model':MultinomialNB(),
        'params':{}
    },
    'decision_tree':{
        'model':DecisionTreeClassifier(),
        'params':{
            'criterion':['gini','entropy']
        }
    }
}

4.訓練

from sklearn.model_selection import GridSearchCV    #導入網格搜索與交叉驗證模型
import pandas as pd
scores = []

for model_name, mp in model_params.items():     
    clf = GridSearchCV(mp['model'],mp['params'],cv=5,return_train_score=False)   #實例化
    clf.fit(digits.data,digits.target)   #訓練
    scores.append({
        'model':model_name,
        'best_score':clf.best_score_,
        'best_params':clf.best_params_
    })

5.打印不同模型、不同參數對應的結果

df = pd.DataFrame(scores,columns=['model','best_score','best_params'])   #把結果放入表格
df

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章