SVM实战:如何进行乳腺癌检测
如何在 sklearn 中使用 SVM
SVM 既可以做回歸,也可以做分類器。
當用 SVM 做回歸的時候,我們可以使用 SVR 或 LinearSVR,即support vector regression
LinearSVR用來處理線性可分的數據,也就是說,使用的線性核函數
如果是針對非線性的數據,需要用到 SVC。在 SVC 中,我們既可以使用到線性核函數(進行線性劃分),也可以使用高緯的核函數進行非線性劃分。
如何創建一個 SVM 分類器呢?
我們首先使用 SVC 的構造函數:model = svm.SVC(kernel=‘rbf’, C=1.0, gamma=‘auto’),這里有三個重要的參數 kernel、C 和 gamma。
kernel 代表核函數的選擇,它有四種選擇,只不過默認是 rbf,即高斯核函數。
線性核函數優點:是在數據線性可分的情況下使用的,運算速度快,效果好。 缺點:不能處理線性不可分的數據。
多項式核函數:可以將數據從低維空間映射到高維空間, 缺點是參數比較多,計算量大
高斯核函數:可以將數據從低維空間映射到高維空間,但相比于多項式核函數來說所需的參數比較少,通常性能也不錯。
了解深度學習的同學應該知道 sigmoid 經常用在神經網絡的映射中,因此當選用 sigmoid 核函數時,SVM 實現的是多層神經網絡。
參數 C 代表目標函數的懲罰系數,懲罰系數指的是分錯樣本時的懲罰程度,默認情況下為 1.0。當 C 越大的時候,分類器的準確性越高,但同樣容錯率會越低,泛化能力會變差。
參數 gamma 代表核函數的系數,默認為樣本特征數的倒數,即 gamma = 1 / n_features。
我們使用 model.fit(train_X,train_y),傳入訓練集中的特征值矩陣 train_X 和分類標識 train_y。特征值矩陣就是我們在特征選擇后抽取的特征值矩陣(當然你也可以用全部數據作為特征值矩陣)。分類標識就是人工事先針對每個樣本標識的分類結果。
我們可以使用 prediction=model.predict(test_X) 來對結果進行預測,傳入測試集中的樣本特征矩陣 test_X,可以得到測試集的預測分類結果 prediction。
同樣我們也可以創建線性 SVM 分類器,使用 model=svm.LinearSVC()。由于 LinearSVC 對線性分類做了優化,對于數據量大的線性可分問題,使用 LinearSVC 的效率要高于 SVC。
如果你不知道數據集是否為線性,可以直接使用 SVC 類創建 SVM 分類器。
如何用 SVM 進行乳腺癌檢測
選用的數據集:點擊下載
數據集來自美國威斯康星州的乳腺癌診斷數據集
數據集截圖展示:
涉及的字段名解釋如下:
在 569 個患者中,一共有 357 個是良性,212 個是惡性。其中有30個字段,由于按找平均數,最大值,便準差維度描述,所以,實質只有10個特征值。
處理步驟:
1、首先我們需要加載數據源;
2、可視化描述數據,用“完全合一”原則處理數據,根據需要選擇特征值(或特征工程)
3、在訓練集中訓練模型,在測試集中檢測模型
熱力圖中對角線上的為單變量自身的相關系數是 1。顏色越淺代表相關性越大。
所以你能看出來 radius_mean、perimeter_mean 和 area_mean 相關性非常大,compactness_mean、concavity_mean、concave_points_mean 這三個字段也是相關的,因此我們可以取其中的一個作為代表。
那么如何進行特征選擇呢?
我們將相關系數較大的特征中,選擇一個進行代表;比如我們選擇radius_mean 和 compactness_mean。
這樣我們就可以把原來的 10 個屬性縮減為 6 個屬性,代碼如下:
# 特征選擇,只選擇了平均值這一維度,并且還去除了相關系數較大的特征值 features_remain = ['radius_mean','texture_mean', 'smoothness_mean','compactness_mean','symmetry_mean', 'fractal_dimension_mean']對特征進行選擇之后,我們就可以準備訓練集和測試集:
在訓練之前,我們需要對數據進行規范化,這樣讓數據同在同一個量級上,避免因為維度問題造成數據誤差:
創建 SVM 分類器
model = svm.SVC()
用訓練集做訓練
model.fit(train_X,train_y)
用測試集做預測
prediction=model.predict(test_X)
print('準確率: ', metrics.accuracy_score(prediction,test_y))
model = svm.LinearSVC()
 現在,我們將原來平均值特征,換成所有的特征值,特征選擇
print(data.columns)#去除無用id,和結果指標’diagnosis’,剩下的作為我們的特征值
features_remain = [‘radius_mean’, ‘texture_mean’, ‘perimeter_mean’,
‘area_mean’, ‘smoothness_mean’, ‘compactness_mean’, ‘concavity_mean’,
‘concave points_mean’, ‘symmetry_mean’, ‘fractal_dimension_mean’,
‘radius_se’, ‘texture_se’, ‘perimeter_se’, ‘area_se’, ‘smoothness_se’,
‘compactness_se’, ‘concavity_se’, ‘concave points_se’, ‘symmetry_se’,
‘fractal_dimension_se’, ‘radius_worst’, ‘texture_worst’,
‘perimeter_worst’, ‘area_worst’, ‘smoothness_worst’,
‘compactness_worst’, ‘concavity_worst’, ‘concave points_worst’,
‘symmetry_worst’, ‘fractal_dimension_worst’]
總結
以上是生活随笔為你收集整理的SVM实战:如何进行乳腺癌检测的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 支持向量机SVM算法原理
- 下一篇: knn实战:如何对手写数字进行识别?