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)))
相關文章
- 分類演算法-支援向量機 SVM演算法
- 用Python實現一個SVM分類器策略Python
- 第八篇:支援向量機 (SVM)分類器原理分析與基本應用
- opencv svm分類OpenCV
- 『sklearn學習』不同的 SVM 分類器
- opencv SVM分類DemoOpenCV
- css選擇器分類總結CSS
- Spark MLlib SVM 文字分類器實現Spark文字分類
- 機器視覺演算法與應用總結視覺演算法
- 利用Hog特徵和SVM分類器進行行人檢測HOG特徵
- 自己訓練SVM分類器進行HOG行人檢測HOG
- opencv中的SVM影像分類(二)OpenCV
- opencv中的SVM影像分類(一)OpenCV
- 使用sklearn實現svm--用於機械故障分類
- 後端應用分層經驗總結後端
- python ubuntu人臉識別 -1 SVM binary 分類器PythonUbuntu
- 樸素貝葉斯/SVM文字分類文字分類
- IT開發工作分類【總結】
- 學習SVM(一) SVM模型訓練與分類的OpenCV實現模型OpenCV
- 樸素貝葉斯分類器的應用
- 用初次訓練的SVM+HOG分類器在負樣本原圖上檢測HardExampleHOG
- python中的scikit-learn庫來實現SVM分類器。Python
- 中文分詞演算法總結中文分詞演算法
- TensotFlow 應用例項:09-classification 分類器
- 霍爾感測器的工作原理、分類及應用
- 計算機視覺—人臉識別(Hog特徵+SVM分類器)(8)計算機視覺HOG特徵
- 機器學習常見演算法分類彙總機器學習演算法
- 用電負荷相關聚類演算法總結(1)聚類演算法
- 嵌入式中常見的儲存器總結(一)儲存器分類
- 恆訊科技分析:伺服器應用分類有哪些?伺服器
- 樸素貝葉斯分類器的應用(轉載)
- 應用閘道器的演進歷程和分類
- java面試題總結-詳細分類Java面試題
- SVM演算法演算法
- python建立分類器小結Python
- matlab中的分類器使用小結(SVM、KNN、RF、AdaBoost、Naive Bayes、DAC)MatlabKNNAI
- Support Vector Machines(SVM)如何根據虹膜分類評估性格類別?Mac
- 資料探勘中分類演算法總結演算法