SVM分類器演算法總結&應用
1、SVM就是尋找最大分類間隔的過程,即使得資料點到分類超平面之間的距離最大化。
2、SVM分類最初是為二分類設計,所以適合二分類問題,也可用於多分類,對多分類問題的處理有下面兩種方式:
(1)一對多法:
假設要把資料集分為A、B、C、D 4個類,可以將其中一個類作為分類1,其他類作為分類2,這樣我們要進行 4次SVM分類:
類別1:A 類別2:B、C、D
類別1:B 類別2:A、C、D
類別1:C 類別2:A、B、D
類別1:D 類別2:B、C、D
這種方法,針對 K 個分類,需要訓練 K 個分類器,分類速度較快,但訓練速度較慢,因為每個分類器都需要對全部樣本進行訓練,而且負樣本數量遠大於正樣本數量,會造成樣本不對稱的情況,而且當增加新的分類,比如第 K+1 類時,需要重新對分類器進行構造。
(2)一對一法:
在任意兩類樣本之間構造一個 SVM,這樣針對 K 類的樣本,就會有 C(k,2) 類分類器。
比如我們想要劃分 A、B、C 三個類,可以構造 3 個分類器:
a) 分類器 1:A、B; b) 分類器 2:A、C; c) 分類器 3:B、C。
當對一個未知樣本進行分類時,每一個分類器都會有一個分類結果,即為 1 票,最終得票最多的類別就是整個未知樣本的類別。
優點:如果新增一類,不需要重新訓練所有的 SVM,只需要訓練和新增這一類樣本的分類器。而且這種方式在訓練單個 SVM 模型的時候,訓練速度快。
缺點:分類器的個數與 K 的平方成正比,所以當 K 較大時,訓練和測試的時間會比較慢。
3、硬間隔:對於完全線性可分的資料集,分類全部準確,沒有錯誤,此時的線性分類器的核心思想就是找到最大分類間隔。
4、軟間隔:實際工作中的資料沒有那麼幹淨,劃分資料集時容許一定量的分類錯誤,此時的分類間隔為軟間隔。
5、對於非線性可分的資料集,引入了核函式,核函式將資料集投射到更高緯的空間,使得資料集線性可分。
6、用svm演算法對乳腺癌進行檢測:
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn import metrics
from sklearn.preprocessing import StandardScaler
# 匯入資料
data = pd.read_csv('breast_cancer_data-master/data.csv')
# 探索資料
pd.set_option('display.max_columns', None)
print(data.columns)
print(data.head())
print(data.describe())
# 資料清洗
data.drop('id', axis=1, inplace=True)
data['diagnosis'] = data['diagnosis'].map({'M':1, 'B':0})
# 將特徵欄位分成3組
features_mean = list(data.columns[2:12])
features_se = list(data.columns[12:22])
features_worst = list(data.columns[22:32])
# 將腫瘤診斷結果視覺化
sns.countplot(data['diagnosis'], label='Count')
plt.show()
# 用熱力圖呈現features_mean欄位之間的關係
corr = data[features_mean].corr()
plt.figure(figsize=(14,14))
# annot=True顯示每個方格的資料
sns.heatmap(corr, annot=True)
plt.show()
# 選擇特徵欄位
features_remain = ['radius_mean', 'texture_mean', 'perimeter_mean',
'area_mean', 'smoothness_mean',
'concave points_mean', 'symmetry_mean', 'fractal_dimension_mean',]
# 從樣本中抽取30%資料作為測試集,其餘作為訓練集
train, test = train_test_split(data, test_size=0.3)
# 抽取特徵選擇的資料作為訓練和測試資料
train_x = train[features_remain]
train_y = train['diagnosis']
test_x = test[features_remain]
test_y = test['diagnosis']
# 規範化資料,保證每個特徵維度的資料均值為0,方差為1
ss = StandardScaler()
train_x = ss.fit_transform(train_x)
test_x = ss.fit_transform(test_x)
# 建立svm分類器
model = svm.SVC()
model.fit(train_x, train_y)
prediction = model.predict(test_x)
print('準確率為:{}'.format(metrics.accuracy_score(prediction, test_y)))
相關文章
- 用Python實現一個SVM分類器策略Python
- 分類演算法-支援向量機 SVM演算法
- opencv SVM分類DemoOpenCV
- python ubuntu人臉識別 -1 SVM binary 分類器PythonUbuntu
- 使用sklearn實現svm--用於機械故障分類
- 後端應用分層經驗總結後端
- IT開發工作分類【總結】
- python中的scikit-learn庫來實現SVM分類器。Python
- 樸素貝葉斯/SVM文字分類文字分類
- 【火爐煉AI】機器學習014-用SVM構建非線性分類模型AI機器學習模型
- 用電負荷相關聚類演算法總結(1)聚類演算法
- 機器學習總結(2)—分類中的代數模型機器學習模型
- python建立分類器小結Python
- 計算機視覺—人臉識別(Hog特徵+SVM分類器)(8)計算機視覺HOG特徵
- Kaggle樹葉分類Leaves Classify總結
- 嵌入式中常見的儲存器總結(一)儲存器分類
- 應用閘道器的演進歷程和分類
- 恆訊科技分析:伺服器應用分類有哪些?伺服器
- 字串合集應用總結字串
- java面試題總結-詳細分類Java面試題
- 動態規劃分類題目總結動態規劃
- phpRedis函式使用總結【分類詳細】PHPRedis函式
- Swift 專案總結 02 常用分類方法Swift
- Support Vector Machines(SVM)如何根據虹膜分類評估性格類別?Mac
- 神經網路加速器應用例項:影象分類神經網路
- Dash應用瀏覽器端回撥常用方法總結瀏覽器
- 機器學習3-分類演算法機器學習演算法
- 基於WOA-SVM的乳腺癌資料分類識別演算法matlab模擬,對比BP神經網路和SVM演算法Matlab神經網路
- 基於PSO-SVM的乳腺癌資料分類識別演算法matlab模擬,對比BP神經網路和SVM演算法Matlab神經網路
- 類載入器——ClassLoader應用
- 機器學習--有監督學習--分類演算法(預測分類)機器學習演算法
- 前端演算法類面試總結(持續更新...)前端演算法面試
- 分類器
- 通用結果類用於返回響應結果
- 機器學習4-分類演算法2機器學習演算法
- 常見形式 Web API 的簡單分類總結WebAPI
- codetop演算法分類演算法
- 資料結構與演算法知識點總結(4)各類排序演算法資料結構演算法排序