從0到1數據分析實戰學習筆記(六)SVM乳腺癌檢測

SVM 支持向量機

在機器學習中,SVM是有監督的學習模型。

什麼是有監督的學習模型呢?它指的是我們需要事先對數據打上分類標籤,這樣機器就知道這個數據屬於哪個分類。同樣無監督學習,就是數據沒有被打上分類標籤,這可能是因爲我們不具備先驗的知識,或者打標籤的成本很高。所以我們需要機器代我們部分完成這個工作,比如將數據進行聚類,方便後續人工對每個類進行分析。SVM作爲有監督的學習模型,通常可以幫我們模式識別、分類以及迴歸分析。

項目實戰

VM是有監督的學習模型,我們需要事先對數據打上分類標籤,通過求解最大分類間隔來求解二分類問題。如果要求解多分類問題,可以將多個二分類器組合起來形成一個多分類器。
項目是生成一個乳腺癌診斷的SVM分類器,並計算這個分類器的準確率

數據集來自美國威斯康星州的乳腺癌診斷數據集,數據集下載地址:https://github.com/fuzhipeng/breast_cancer_data

總共分爲兩個階段:

  1. 加載文檔,數據清洗
  2. 生成分類器預測分類
1.加載文檔

數據表一共包括了32個字段,代表的含義如下:
在這裏插入圖片描述

讀取文件,清洗數據。

df = pd.read_csv('./data.csv')
features_mean= list(df.columns[2:12])
features_se= list(df.columns[12:22])
features_worst=list(df.columns[22:32])
df.drop('id', axis=1, inplace=True)
df['diagnosis'] =df['diagnosis'].map({'M':1,"B":0})
2.生成分類器預測分類
# 特徵選擇
features_remain = ['radius_mean','texture_mean', 'smoothness_mean','compactness_mean','symmetry_mean', 'fractal_dimension_mean']

# 抽取30%的數據作爲測試集,其餘作爲訓練集
train, test = train_test_split(df, test_size = 0.3)

# 抽取特徵選擇的數值作爲訓練和測試數據
train_X = train[features_remain]
train_y=train['diagnosis']
test_X= test[features_remain]
test_y =test['diagnosis']

#對數據進行規範化
ss = StandardScaler()
train_X = ss.fit_transform(train_X)
test_X = ss.transform(test_X)
# 創建SVM分類器
model = svm.SVC()
# 用訓練集做訓練
model.fit(train_X,train_y)
# 用測試集做預測
prediction=model.predict(test_X)
print('準確率: ', metrics.accuracy_score(prediction,test_y))
完整代碼
# SVM 分類
# 乳腺癌診斷分類
import pandas as pd
import  sns
from sklearn.model_selection import train_test_split
from sklearn import svm
from sklearn import metrics
from sklearn.preprocessing import StandardScaler

df = pd.read_csv('./data.csv')
# 將特徵字段分成3組
features_mean= list(df.columns[2:12])
features_se= list(df.columns[12:22])
features_worst=list(df.columns[22:32])
df.drop('id', axis=1, inplace=True)
df['diagnosis'] =df['diagnosis'].map({'M':1,"B":0})
print(features_mean)

features_remain = ['radius_mean','texture_mean', 'smoothness_mean','compactness_mean','symmetry_mean', 'fractal_dimension_mean']
train, test = train_test_split(df, test_size = 0.3)

# 抽取特徵選擇的數值作爲訓練和測試數據
train_X = train[features_remain]
train_y=train['diagnosis']
test_X= test[features_remain]
test_y =test['diagnosis']


ss = StandardScaler()
train_X = ss.fit_transform(train_X)
test_X = ss.transform(test_X)
# 創建SVM分類器
model = svm.SVC()
# 用訓練集做訓練
model.fit(train_X,train_y)
# 用測試集做預測
prediction=model.predict(test_X)
print('準確率: ', metrics.accuracy_score(prediction,test_y))

總結

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章