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