用SVC模型完成对手写数字的分类
用SVC模型進行紅酒分類
文章目錄
- 用SVC模型進行紅酒分類
- 實驗說明
- 實驗代碼
- 參數(shù)優(yōu)化
- 支持向量
實驗說明
實驗要求:使用SVC模型完成對手寫數(shù)字的分類( load_digits),并使用評測指標 precision_score、 recall_score、f1_score 對分類結(jié)果評測。
- 實驗環(huán)境:Pycharm
- Python版本:3.6
- 需要的第三方庫:sklearn
實驗代碼
這里 SVC 模型采用的是高斯核函數(shù) kernel=‘rbf’,懲罰系數(shù) C=0.8。
我們采用 classification_report 來進行評價,其中就包含了 precision_score、 recall_score、f1_score 。
有關 SVC 模型的參數(shù)以及如何選擇, 可以參考這篇博客 sklearn.svm.svc 參數(shù)說明
from sklearn.datasets import load_digits from sklearn.svm import SVC from sklearn.metrics import classification_report from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split #加載數(shù)據(jù)集 digits=load_digits() x=digits.data y=digits.target #打印數(shù)據(jù)形狀 # print("x.shape:\n", x.shape) #輸出digits數(shù)據(jù)集中的特征 #print('digits.feature_names: \n',digits.feature_names) # print('digits.target_names: \n', digits.target_names)# 拆分數(shù)據(jù)集 x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=10) #創(chuàng)建svc實例 svc=SVC(C=0.8,kernel='rbf',class_weight='balanced') svc=svc.fit(x_train,y_train) #預測 svc_predict=svc.predict(x_test) #評價結(jié)果 svc_metric=classification_report(y_test,svc_predict,digits.target_names) print(svc_metric) print("accuracy_score",accuracy_score(y_test,svc_predict))從結(jié)果中可以看到,預測的準確率是比較高的。
參數(shù)優(yōu)化
我們采用網(wǎng)格參數(shù)搜索的方式進行優(yōu)化,核函數(shù)依然選擇高斯核函數(shù),我們針對 懲罰系數(shù) C 和核函數(shù)系數(shù) gamma 進行調(diào)參。
from sklearn.datasets import load_digits from sklearn.model_selection import train_test_split from sklearn.svm import SVC from sklearn.metrics import classification_report, accuracy_score from sklearn.model_selection import GridSearchCV# 加載數(shù)據(jù)集 digits = load_digits() x = digits.data y = digits.target # 打印數(shù)據(jù)形狀 # print("x.shape:\n", x.shape) # 輸出數(shù)據(jù)集中的特征、分類名 # print("digits.feature_names:\n", digits.feature_names) # print("digits.target_names:\n", digits.target_names) # print()# 拆分數(shù)據(jù)集 x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=10)# 設置超參數(shù) C = [0.1, 0.2, 0.5, 0.8, 0.9, 1] kernel = 'rbf' gamma = [0.001, 0.01, 0.1, 0.2, 0.5, 0.8] # 參數(shù)字典 params_dict = {'C': C,'gamma': gamma }# 創(chuàng)建SVC實例 svc = SVC()# 網(wǎng)格參數(shù)搜索 gsCV = GridSearchCV(estimator=svc,param_grid=params_dict,n_jobs=2,scoring='r2',cv=6 ) gsCV.fit(x_train, y_train) # 輸出參數(shù)信息 print("最佳度量值:", gsCV.best_score_, end=",") print("最佳參數(shù):", gsCV.best_params_) print("最佳模型:", gsCV.best_estimator_)# 用最佳參數(shù)生成模型 svc = SVC(C=gsCV.best_params_['C'], kernel=kernel, gamma=gsCV.best_params_['gamma'])# 擬合訓練集 svc = svc.fit(x_train, y_train)# 預測 svc_predict = svc.predict(x_test)# 評價結(jié)果 svc_metric = classification_report(y_test, svc_predict) print(svc_metric) print("accuracy_score:", accuracy_score(y_test, svc_predict))網(wǎng)格參數(shù)搜索是以窮舉的方式進行參數(shù)選擇的,所以會比較耗時,一般只用于小數(shù)據(jù)集。
大約等待了幾分鐘,終于跑出了結(jié)果。從預測結(jié)果我們看出,參數(shù)調(diào)優(yōu)之后準確率明顯升高。
支持向量
想要查看該實驗的支持向量的個數(shù)以及相應的向量,并將分類錯誤的數(shù)據(jù)輸出。
# 查看支持向量 sum = 0 for i in range(len(svc.n_support_)):sum += svc.n_support_[i] print("支持向量的個數(shù):", sum) print("支持向量:", svc.support_vectors_) print("分類錯誤的數(shù)據(jù):") for i in range(len(svc_predict)):if(svc_predict[i] != y_test[i]):print("索引:{},數(shù)值:{}".format(i, svc_predict[i]))總結(jié)
以上是生活随笔為你收集整理的用SVC模型完成对手写数字的分类的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 逻辑回归实验
- 下一篇: QT入门注意事项(1)