日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

用SVC模型完成对手写数字的分类

發(fā)布時間:2025/3/21 c/c++ 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 用SVC模型完成对手写数字的分类 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

用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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。