Logistic回歸分析——以良/惡性乳腺癌腫數(shù)據(jù)集為例

本文作者:陳?鼎侯嘀,中南財經(jīng)政法大學(xué)統(tǒng)計與數(shù)學(xué)學(xué)院
文字編輯:任?哲
技術(shù)總編:張馨月

??Logistic回歸分析是一種廣義的線性回歸分析模型偏窝,常用于數(shù)據(jù)挖掘贡必,疾病自動診斷,經(jīng)濟預(yù)測等領(lǐng)域比搭。Logistic回歸在二十世紀初用于生物科學(xué), 隨后被用于許多社會科學(xué)應(yīng)用中南誊。關(guān)于該模型的算法和原理介紹敢辩,大家可以在今天推送的第二篇推文《Logistic回歸理論與模型簡介》里了解。在本文中弟疆,我們將以良/惡性乳腺癌腫數(shù)據(jù)集為例戚长,簡要介紹Logistic回歸的代碼實現(xiàn)。

一怠苔、代碼實現(xiàn)

(一) 讀取數(shù)據(jù)集

??本案例使用“良/惡性乳腺癌腫數(shù)據(jù)集”同廉,該數(shù)據(jù)集收集了699條病人樣本,共11列數(shù)據(jù)。第一列為檢索的患者id迫肖,后9列包括了與癌癥相關(guān)的9個特征指標锅劝,分別為腫塊厚度(Clump Thickness),細胞大小的均勻性(Uniformity of Cell Size)蟆湖,細胞形狀的均勻性(Uniformity of Cell Shape)故爵,邊際附著力(Marginal Adhesion),單個上皮細胞大小(Single Epithelial Cell Size)隅津,裸核(Bare Nuclei)诬垂,淡色染色質(zhì)(Bland Chromatin),正常核(Normal Nucleoli)伦仍,核分裂(mitoses)结窘。類別(class)代表良性/惡性腫瘤,分別以2,4代替充蓝。數(shù)據(jù)中包含16個缺失值隧枫,以"?"標出。首先導(dǎo)入下文需要使用的庫和數(shù)據(jù)集:

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import pandas as pd
import numpy as np

#1.獲取數(shù)據(jù)
column_list = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']
dataset = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data"
,names = column_list)
pd.set_option('display.max_columns',None)
dataset.head()
image

(二) 特征工程

1.處理缺失值

??將數(shù)據(jù)集中帶"?"的數(shù)據(jù)替換成np.nan谓苟,再利用Pandas庫的dropna函數(shù)便能快速地將缺失值刪除官脓。代碼如下:

dataset = dataset.replace("?",np.nan)
dataset = dataset.dropna()

2.劃分數(shù)據(jù)

??分析上述數(shù)據(jù)集,第一列(Sample code number)是我們不需要的涝焙,應(yīng)將其舍去卑笨;最后一列(Class)是我們的預(yù)測分類結(jié)果。利用sklearn.model_selection庫中的train_test_split方法纱皆,實現(xiàn)訓(xùn)練集與測試集的劃分湾趾。

y = dataset['Class']
x = dataset.iloc[:,2:10]
x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)

??x_train,x_test,y_train,y_test的含義在推文《樸素貝葉斯算法——以20Newsgroups數(shù)據(jù)集為例》中已經(jīng)闡明,這里不再贅述派草。

3.數(shù)據(jù)標準化

??為避免異常值對模型擬合產(chǎn)生影響搀缠,對每個特征進行標準化。導(dǎo)入sklearn.preprocessing中的StandardScaler近迁,可以方便地對數(shù)據(jù)集按列進行標準化操作艺普。標準化的公式與代碼如下:

x^* =\frac{x-\bar{x}}{\sigma}

std = StandardScaler()
x_train = std.fit_transform(x_train)
x_test = std.transform(x_test)

(三) 進行Logistic回歸

??導(dǎo)入sklearn.linear_model中的Logistic Regression方法,實例化一個Logistic分類器鉴竭,傳入訓(xùn)練集供分類器學(xué)習(xí)歧譬。值得注意的是,在該案例中搏存,我們需要關(guān)注的是查全率而非查準率(放過一個惡性癌癥患者所帶來的成本與風(fēng)險要比誤診一個良性癌癥患者所帶來的成本高得多)瑰步,因此我們利用sklearn.metrics中的classification_report方法,通過查看其查全率來觀察該分類器的預(yù)測效果璧眠。在預(yù)測之前缩焦,我們按住ctrl+B定位到LogisticRegression的源碼中读虏,可以看到sklearn庫中LogisticRegression默認設(shè)置的正則化項系數(shù)為l2(嶺回歸),且正則化力度為1.0袁滥。如下圖所示:

image

??以下是代碼實現(xiàn):

lg = LogisticRegression()
lg.fit(x_train,y_train)
y_predict = lg.predict(x_test)
print("預(yù)測模型的系數(shù)為:",lg.coef_)
print("測試集的預(yù)測結(jié)果為:",y_predict)
print("準確率為:",lg.score(x_test,y_test))
print("查準率與查重率:",classification_report(y_test, y_predict, labels=[2,4], target_names=["良性","惡性"],))

??其輸出結(jié)果如下圖所示:

image

??從上圖輸出結(jié)果可以看出盖桥,模型擬合的十分完美,其中惡性腫瘤的查全率(recall)已經(jīng)到了99%题翻。這也證明了前文的論斷:Logistic回歸分析往往在預(yù)測癌癥揩徊,預(yù)測廣告點擊率,電商購物等領(lǐng)域表現(xiàn)良好嵌赠。Logistic回歸與樸素貝葉斯分類器都作為有監(jiān)督學(xué)習(xí)塑荒,其算法都涉及到預(yù)測概率,具有一定的相同之處猾普,但是有如下區(qū)別:1.Logistic回歸屬于判別模型袜炕,樸素貝葉斯分類器屬于生成模型本谜。2.Logistic回歸只能解決二分類問題(多分類問題需依賴softmax與神經(jīng)網(wǎng)絡(luò))初家,樸素貝葉斯分類器可以解決多分類問題。3.Logistic回歸具有超參數(shù)(如帶有嶺回歸的線性模型中的正則化項系數(shù))乌助,其模型可以通過交叉驗證法不斷優(yōu)化溜在,樸素貝葉斯分類器則不行。4.Logistic回歸在預(yù)測患病他托,廣告點擊等方面應(yīng)用廣泛掖肋,樸素貝葉斯分類器常用于于文本分類中。

二赏参、源碼

??將上述過程封裝成函數(shù)志笼,完整代碼如下:

from sklearn.linear_model import LogisticRegression
from sklearn.preprocessing import StandardScaler
from sklearn.model_selection import train_test_split
from sklearn.metrics import classification_report
import pandas as pd
import numpy as np


def logistic():
    #獲取數(shù)據(jù)
    column_list = ['Sample code number','Clump Thickness', 'Uniformity of Cell Size','Uniformity of Cell Shape','Marginal Adhesion','Single Epithelial Cell Size','Bare Nuclei','Bland Chromatin','Normal Nucleoli','Mitoses','Class']
    dataset = pd.read_csv("https://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data"
,names = column_list)
    pd.set_option('display.max_columns',None)
    print(dataset.head())
    #刪除缺失值
    dataset = dataset.replace("?",np.nan)
    dataset = dataset.dropna()
    #進行數(shù)據(jù)分割
    y = dataset['Class']
    x = dataset.iloc[:,2:10]
    x_train,x_test,y_train,y_test = train_test_split(x,y,test_size=0.25)
    #進行標準化
    std = StandardScaler()
    x_train = std.fit_transform(x_train)
    x_test = std.transform(x_test)
    #進行l(wèi)ogistic預(yù)測
    lg = LogisticRegression()
    lg.fit(x_train,y_train)
    y_predict = lg.predict(x_test)
    print("預(yù)測模型的系數(shù)為:",lg.coef_)
    print("測試集的預(yù)測結(jié)果為:",y_predict)
    print("準確率為:",lg.score(x_test,y_test))
    print("查準率與查重率:",classification_report(y_test, y_predict, labels=[2,4], target_names=["良性","惡性"],))


if __name__ == '__main__':
    logistic()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市把篓,隨后出現(xiàn)的幾起案子纫溃,更是在濱河造成了極大的恐慌,老刑警劉巖韧掩,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件紊浩,死亡現(xiàn)場離奇詭異,居然都是意外死亡疗锐,警方通過查閱死者的電腦和手機坊谁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來滑臊,“玉大人口芍,你說我怎么就攤上這事」途恚” “怎么了鬓椭?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵虹钮,是天一觀的道長。 經(jīng)常有香客問我膘融,道長芙粱,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任氧映,我火速辦了婚禮春畔,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岛都。我一直安慰自己律姨,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布臼疫。 她就那樣靜靜地躺著择份,像睡著了一般。 火紅的嫁衣襯著肌膚如雪烫堤。 梳的紋絲不亂的頭發(fā)上荣赶,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音鸽斟,去河邊找鬼拔创。 笑死,一個胖子當(dāng)著我的面吹牛富蓄,可吹牛的內(nèi)容都是我干的剩燥。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼立倍,長吁一口氣:“原來是場噩夢啊……” “哼灭红!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起口注,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤变擒,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后疆导,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體赁项,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年澈段,在試婚紗的時候發(fā)現(xiàn)自己被綠了悠菜。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡败富,死狀恐怖悔醋,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兽叮,我是刑警寧澤芬骄,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布猾愿,位于F島的核電站,受9級特大地震影響账阻,放射性物質(zhì)發(fā)生泄漏蒂秘。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一淘太、第九天 我趴在偏房一處隱蔽的房頂上張望姻僧。 院中可真熱鬧,春花似錦蒲牧、人聲如沸撇贺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽松嘶。三九已至,卻和暖如春挎扰,著一層夾襖步出監(jiān)牢的瞬間翠订,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工鼓鲁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蕴轨,地道東北人港谊。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓骇吭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親歧寺。 傳聞我的和親對象是個殘疾皇子燥狰,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348