sklearn構建svm分類模型及其模型評價

2021-09-17 04:36:25 字數 3453 閱讀 2312

sklearn中常用的分類演算法(模組名--函式名--演算法名):

(1)  linear_model       logisticregression       邏輯斯蒂回歸

(2)svm                     svc                              支援向量機

(3)neighbors            kneighborsclassifier    k近鄰分類

(4)*****_bayes       gaussiannb                   高斯樸素貝葉斯

(5)tree                     decision treeclassifier   分類決策樹

(6)ensemble            randomforestclassifier 隨機森林分類

(7)ensemble            gradientboostingclassifier梯度提公升分類樹

使用sklearn估計器構建svm模型

##匯入各模組和所需函式

import numpy as np

from sklearn.datasets import load_breast_cancer

from sklearn.svm import svc

from sklearn.model_selection import train_test_split

from sklearn.preprocessing import standardscaler

##cancer資料集特徵

cancer = load_breast_cancer()

cancer_data = cancer['data']

cancer_target = cancer['target']

cancer_names = cancer['feature_names']

## 將資料劃分為訓練集測試集

cancer_data_train,cancer_data_test, cancer_target_train,cancer_target_test = \

train_test_split(cancer_data,cancer_target,test_size = 0.2,random_state = 22)

## 資料標準化

stdscaler = standardscaler().fit(cancer_data_train)

cancer_trainstd = stdscaler.transform(cancer_data_train)

cancer_teststd = stdscaler.transform(cancer_data_test)

## 建立svm模型

svm = svc().fit(cancer_trainstd,cancer_target_train)

print('建立的svm模型為:\n',svm)

## **訓練集結果

cancer_target_pred = svm.predict(cancer_teststd)

print('**前20個結果為:\n',cancer_target_pred[:20])

將**結果和真實結果做對比,求出準確率,**如下:

## 求出**和真實一樣的數目

true = np.sum(cancer_target_pred == cancer_target_test )

print('**對的結果數目為:', true)

print('**錯的的結果數目為:', cancer_target_test.shape[0]-true)

print('**結果準確率為:', true/cancer_target_test.shape[0])

方法名稱——最佳值——sklearn函式

precision(精確率)   1.0  metrics.precision_score

recall(召回率)        1.0  metrics.recall_score

f1值                        1.0  metrics.f1_score

roc曲線                 最靠近y軸  metrics.roc_curve

**如下:

from sklearn.metrics import accuracy_score,precision_score, \

print('使用svm**breast_cancer資料的準確率為:',

accuracy_score(cancer_target_test,cancer_target_pred))

print('使用svm**breast_cancer資料的精確率為:',

precision_score(cancer_target_test,cancer_target_pred))

print('使用svm**breast_cancer資料的召回率為:',

recall_score(cancer_target_test,cancer_target_pred))

print('使用svm**breast_cancer資料的f1值為:',

f1_score(cancer_target_test,cancer_target_pred))

另外,sklearn的metrics模組除了提供precision等單一評價指標的函式外,還提供了乙個能輸出分類模型評價報告的函式classification_report,**如下:

from sklearn.metrics import classification_report

print('使用svm**iris資料的分類報告為:','\n',

classification_report(cancer_target_test,

cancer_target_pred))

除此之外,還可以用roc曲線的方式來評價分類模型,**如下:

from sklearn.metrics import roc_curve

import matplotlib.pyplot as plt

## 求出roc曲線的x軸和y軸

fpr, tpr, thresholds = roc_curve(cancer_target_test,cancer_target_pred)

plt.figure(figsize=(10,6))

plt.xlim(0,1) ##設定x軸的範圍

plt.ylim(0.0,1.1) ## 設定y軸的範圍

plt.xlabel('false postive rate')

plt.ylabel('true postive rate')

plt.plot(fpr,tpr,linewidth=2, linestyle="-",color='red')

plt.show()

SVM簡單分類的使用 sklearn機器學習

sklearn 庫中匯入 svm 模組 from sklearn import svm 定義三個點和標籤 x 2,0 1,1 2,3 y 0,0,1 定義分類器,clf 意為 classifier,是分類器的傳統命名 clf svm.svc kernel linear svc 就是 svm 的方程,...

用sklearn中的SVM畫資料的分類面

參考部落格 所用資料如下 如下,有詳細注釋 from sklearn import svm import numpy as np import matplotlib.pyplot as plt dataset np.array 1,2,1 2,3,1 3,3,1 2,1,1 3,2,1 x trai...

Sklearn構建k 近鄰分類器用於手寫數字識別

示例 使用k 近鄰演算法的手寫識別系統 1 收集資料 提供文字檔案。2 準備資料 編寫函式classify0 將影象格式轉換為分類器使用的list格式。3 分析資料 在python命令提示符中檢查資料,確保它符合要求。4 訓練演算法 此步驟不適用於k 近鄰演算法。5 測試演算法 編寫函式使用提供的部...