SVM:如何進(jìn)行乳腺癌檢測(cè)?

SVM 是有監(jiān)督的學(xué)習(xí)模型,我們需要事先對(duì)數(shù)據(jù)打上分類標(biāo)簽,通過求解最大分類間隔來求解二分類問題。如果要求解多分類問題,可以將多個(gè)二分類器組合起來形成一個(gè)多分類器。

1 基本介紹

SVM 既可以做回歸,也可以做分類器。

當(dāng)用 SVM 做回歸的時(shí)候,我們可以使用 SVR 或?LinearSVR。SVR 的英文是 Support?Vector Regression。

當(dāng)做分類器的時(shí)候,我們使用的是 SVC 或者LinearSVC。SVC 的英文是 Support?Vector Classification。

LinearSVC 是個(gè)線性分類器,用于處理線性可分的數(shù)據(jù),只能使用線性核函數(shù)。

如果是針對(duì)非線性的數(shù)據(jù),需要用到 SVC。在 SVC 中,我們既可以使用到線性核函數(shù)(進(jìn)行線性劃分),也能使用高維的核函數(shù)(進(jìn)行非線性劃分)。

2 如何創(chuàng)建一個(gè) SVM 分類器呢?

使用 SVC 的構(gòu)造函數(shù):model = svm.SVC(kernel=‘rbf’, C=1.0, gamma=‘‘a(chǎn)uto’),這里有三個(gè)重要的參數(shù)kernel、C 和 gamma。

(1) kernel 代表核函數(shù)的選擇,它有四種選擇,只不過默認(rèn)是 rbf,即高斯核函數(shù)。

A. linear:線性核函數(shù)?

B. poly:多項(xiàng)式核函數(shù)

C. rbf:高斯核函數(shù)(默認(rèn))?

D. sigmoid:sigmoid 核函數(shù)

線性核函數(shù),是在數(shù)據(jù)線性可分的情況下使用的,運(yùn)算速度快,效果好。不足在于它不能處理線性不可分的數(shù)據(jù)。

多項(xiàng)式核函數(shù)可以將數(shù)據(jù)從低維空間映射到高維空間,但參數(shù)比較多,計(jì)算量大。

高斯核函數(shù)同樣可以將樣本映射到高維空間,但相比于多項(xiàng)式核函數(shù)來說所需的參數(shù)比較少,通常性能不錯(cuò),所以是默認(rèn)使用的核函數(shù)。

sigmoid 經(jīng)常用在神經(jīng)網(wǎng)絡(luò)的映射中。因此當(dāng)選用 sigmoid 核函數(shù)時(shí),SVM 實(shí)現(xiàn)的是多層神經(jīng)網(wǎng)絡(luò)。

(2) 參數(shù) C 代表目標(biāo)函數(shù)的懲罰系數(shù),懲罰系數(shù)指的是分錯(cuò)樣本時(shí)的懲罰程度,默認(rèn)情況下為 1.0。當(dāng) C 越大的時(shí)候,分類器的準(zhǔn)確性越高,但同樣容錯(cuò)率會(huì)越低,泛化能力會(huì)變差。相反,C 越小,泛化能力越強(qiáng),但是準(zhǔn)確性會(huì)降低。

(3)?參數(shù) gamma 代表核函數(shù)的系數(shù),默認(rèn)為樣本特征數(shù)的倒數(shù),即 gamma = 1 / n_features。

3 代碼實(shí)現(xiàn)

# 加載數(shù)據(jù)集,你需要把數(shù)據(jù)放到目錄中

data = pd.read_csv("./../data/svm/data.csv")

# 數(shù)據(jù)探索

# 因?yàn)閿?shù)據(jù)集中列比較多,我們需要把 dataframe 中的列全部顯示出來

pd.set_option('display.max_columns', None)

#print(data.columns)

#print(data.head(5))

#print(data.describe())

# 將特征字段分成 3 組

features_mean =list(data.columns[2:12])

features_se =list(data.columns[12:22])

features_worst =list(data.columns[22:32])

# 數(shù)據(jù)清洗

# ID 列沒有用,刪除該列

data.drop("id", axis=1, inplace=True)

# 將 B 良性替換為 0,M 惡性替換為 1

data['diagnosis'] = data['diagnosis'].map({'M':1, 'B':0})

#print(data.head(5))

# 將腫瘤診斷結(jié)果可視化

sns.countplot(data['diagnosis'], label="Count")

plt.show()

# 用熱力圖呈現(xiàn) features_mean 字段之間的相關(guān)性

corr = data[features_mean].corr()

plt.figure(figsize=(14, 14))

# annot=True 顯示每個(gè)方格的數(shù)據(jù)

sns.heatmap(corr, annot=True)

plt.show()

# 特征選擇

features_remain = ['radius_mean','texture_mean', 'smoothness_mean','compactness_mean','symmetry_mean', 'fractal_dimension_mean']

# 抽取 30% 的數(shù)據(jù)作為測(cè)試集,其余作為訓(xùn)練集

train, test = train_test_split(data, test_size=0.3)# in this our main data is splitted into train and test

# 抽取特征選擇的數(shù)值作為訓(xùn)練和測(cè)試數(shù)據(jù)

train_X = train[features_remain]

train_y = train['diagnosis']

test_X = test[features_remain]

test_y = test['diagnosis']

# 采用 Z-Score 規(guī)范化數(shù)據(jù),保證每個(gè)特征維度的數(shù)據(jù)均值為 0,方差為 1

ss = StandardScaler()

train_X = ss.fit_transform(train_X)

test_X = ss.transform(test_X)

# 創(chuàng)建 SVM 分類器

#model = svm.SVC()

#model = svm.SVC(kernel="linear")

model = svm.LinearSVC()

# 用訓(xùn)練集做訓(xùn)練

model.fit(train_X, train_y)

# 用測(cè)試集做預(yù)測(cè)

prediction = model.predict(test_X)

print('準(zhǔn)確率: ', metrics.accuracy_score(prediction,test_y))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 推行周禮。 一 禮 生活規(guī)范。 禮儀、禮節(jié)、禮俗。 禮儀之邦,彬彬有禮。 二 禮的意識(shí) 表現(xiàn)出人與人之間自發(fā)的感情...
    Dansy丹閱讀 2,639評(píng)論 0 2
  • 從前,有一片沙漠,里面有一片綠洲。 有一個(gè)邪惡的女巫叫西巫,她聽說沙漠里有許多金銀財(cái)寶,就霸占了綠...
    若菡日記閱讀 459評(píng)論 0 1
  • 我甘愿化作一片雪 不去為征途愁惱 無需耗費(fèi)過多心氣 任風(fēng)裹挾,四處飄散 我甘愿化作一片雪 渾身潔白,無瑕疵 任憑世...
    水小享閱讀 298評(píng)論 0 2
  • 昨天回家做作業(yè),小宋讓媽媽查看群里老師發(fā)布的作業(yè)——家庭作業(yè)第七頁,打開書包,卻怎么也找不到家庭作業(yè)。 看到他小腦...
    宋具洪閱讀 212評(píng)論 0 0
  • 歷史,是17年年初就定下的主題閱讀之一。 2月份最火的電視節(jié)目莫過于《詩詞大會(huì)》和《朗讀者》,恰巧在那時(shí)我遇見了蔣...
    靜恰恰閱讀 754評(píng)論 3 8

友情鏈接更多精彩內(nèi)容