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