Python垃圾郵件的邏輯回歸分類示例詳解
?加載垃圾郵件數(shù)據(jù)集spambase.csv(數(shù)據(jù)集基本信息:樣本數(shù): 4601,特征數(shù)量: 57, 類別:
1 為垃圾郵件,0 為非垃圾郵件),閱讀并理解數(shù)據(jù)。
按以下要求處理數(shù)據(jù)集
(1)分離出僅含特征列的部分作為 X 和僅含目標(biāo)列的部分作為 Y。
(2)將數(shù)據(jù)集拆分成訓(xùn)練集和測(cè)試集(70%和 30%)。
建立邏輯回歸模型
分別用 LogisticRegression 建模。
結(jié)果比對(duì)
(1)輸出測(cè)試集前 5 個(gè)樣本的預(yù)測(cè)結(jié)果。
(2)計(jì)算模型在測(cè)試集上的分類準(zhǔn)確率(=正確分類樣本數(shù)/測(cè)試集總樣本數(shù))
(3)從測(cè)試集中找出模型不能正確預(yù)測(cè)的樣本。
(4)對(duì)參數(shù) penalty 分別取‘l1', ‘l2', ‘elasticnet', ‘none',對(duì)比它們?cè)跍y(cè)試集上的預(yù)測(cè)性能(計(jì)算 score)。

拆分特征值和目標(biāo)數(shù)據(jù)前面已經(jīng)可知,預(yù)測(cè)和模型得分結(jié)果也是直接使用模型的方法,下面主要是要測(cè)試準(zhǔn)確率和找出不能正確預(yù)測(cè)的樣本,以及不同的懲罰下的模型得分,主要運(yùn)用到Numpy模塊和列表list的函數(shù),代碼如下:
y_train_pred = model.predict(x_train)
# In[26]:
train_accu = np.equal(y_train,y_train_pred)
print(y_train.shape,y_train_pred.shape)
# In[27]:
#計(jì)算模型在測(cè)試集上的分類準(zhǔn)確率(=正確分類樣本數(shù)/測(cè)試集總樣本數(shù))
accuracy = list(train_accu).count(True)/len(list(y_train))
print("準(zhǔn)確率為"+"%f"%float(accuracy*100)+"%")
# In[28]:
#從測(cè)試集中找出模型不能正確預(yù)測(cè)的樣本。
test_accu = list(np.equal(y_pred,y_test))
i = 0
len_test = len(test_accu)
False_index = []
[False_index.append(i) for i in range(0,len_test) if test_accu[i]==False]
print(x_test[False_index])
# In[29]:
#對(duì)參數(shù) penalty 分別取‘l1', ‘l2', ‘elasticnet', ‘none',對(duì)比它們?cè)跍y(cè)試集上的預(yù)測(cè)性能(計(jì)算 score)。
model2 = LogisticRegression(multi_class='ovr',penalty='l1',max_iter=10000,solver='saga').fit(x_train, y_train)
print("penalty='l1'"+'的得分:', model2.score(x_test, y_test))
# In[33]:
#對(duì)參數(shù) penalty 分別取‘l1', ‘l2', ‘elasticnet', ‘none',對(duì)比它們?cè)跍y(cè)試集上的預(yù)測(cè)性能(計(jì)算 score)。
model2 = LogisticRegression(multi_class='ovr',penalty='l2',max_iter=10000).fit(x_train, y_train)
print("penalty='l2'"+'的得分:', model2.score(x_test, y_test))
# In[31]:
model4 = LogisticRegression(multi_class='ovr',penalty='elasticnet',max_iter=10000,solver='saga',l1_ratio=0).fit(x_train, y_train)
#模型建立產(chǎn)生一些參數(shù)的問題一般都是sklearn的版本問題,要是忽略,就升級(jí)更新一下版本就好了solver指定penalty參數(shù)的范圍
print("penalty='elasticnet'"+'的得分:', model4.score(x_test, y_test))
# In[32]:
model5 = LogisticRegression(multi_class='ovr',penalty='none',max_iter=10000,solver='lbfgs').fit(x_train, y_train)
print("penalty='none'"+'的得分:', model5.score(x_test, y_test))
總結(jié)
到此這篇關(guān)于Python垃圾郵件的邏輯回歸分類的文章就介紹到這了,更多相關(guān)Python垃圾郵件分類內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python如何將兩個(gè)數(shù)據(jù)表中的對(duì)應(yīng)數(shù)據(jù)相加
這篇文章主要介紹了python如何將兩個(gè)數(shù)據(jù)表中的對(duì)應(yīng)數(shù)據(jù)相加問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08
深入理解Python虛擬機(jī)中的Code?obejct
在本篇文章當(dāng)中主要給大家深入介紹在?cpython?當(dāng)中非常重要的一個(gè)數(shù)據(jù)結(jié)構(gòu)?code?object!?我們簡單介紹了一下在?code?object?當(dāng)中有哪些字段以及這些字段的簡單含義,在本篇文章當(dāng)中將會(huì)舉一些例子以便更加深入理解這些字段2023-04-04
python調(diào)用c++傳遞數(shù)組的實(shí)例
今天小編就為大家分享一篇python調(diào)用c++傳遞數(shù)組的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-02-02
Python Pandas list列表數(shù)據(jù)列拆分成多行的方法實(shí)現(xiàn)
這篇文章主要介紹了Python Pandas list(列表)數(shù)據(jù)列拆分成多行的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
python自動(dòng)化測(cè)試中裝飾器@ddt與@data源碼深入解析
最近工作中接觸了python自動(dòng)化測(cè)試,所以下面這篇文章主要給大家介紹了關(guān)于python自動(dòng)化測(cè)試中裝飾器@ddt與@data源碼解析的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
python實(shí)現(xiàn)判斷數(shù)組是否包含指定元素的方法
這篇文章主要介紹了python實(shí)現(xiàn)判斷數(shù)組是否包含指定元素的方法,涉及Python中in的使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07

