逻辑回归 - sklearn (LR、LRCV、MLP、RLR)- Python代码实现
目錄
LR(LogisticRegression) - 線性回歸
LRCV(LogisticRegressionCV )- 邏輯回歸
MLP(MLPRegressor) - 人工神經(jīng)網(wǎng)絡(luò)
RLR(RandomizedLogisticRegression)-隨機邏輯回歸
logistic回歸--因變量一般有1和0兩種取值,將因變量的取值范圍控制再0-1范圍內(nèi),表示取值為1的概率。
數(shù)據(jù)源一般是這種類型(其中前8列是自變量,最后一列是因變量,因變量一般是0/1):
| 年齡 | 婚姻狀況 | 子嗣 | 工齡 | 住宅類型 | 房產(chǎn)類型 | 月收入 | 合同金額 | 是否逾期 |
| 47 | 2 | 1 | 25 | 4 | 3 | 12800 | 50627 | 0 |
| 40 | 2 | 1 | 7 | 1 | 1 | 50000 | 28573 | 1 |
| 45 | 2 | 1 | 8 | 5 | 4 | 40000 | 57088 | 1 |
| 55 | 2 | 1 | 10 | 5 | 4 | 150000 | 58835 | 1 |
| 37 | 3 | 1 | 7 | 2 | 1 | 40000 | 57146 | 1 |
| 62 | 2 | 1 | 21 | 2 | 1 | 5600 | 42859 | 1 |
| 38 | 3 | 2 | 5 | 4 | 3 | 2800 | 54717 | 0 |
在sklearn?,與邏輯回歸有關(guān)的主要有三類:LogisticRegression(LR)、LogisticRegressionCV (LRCV)、logistic_regression_path。
LR和LRCV的主要區(qū)別是LRCV使用了交叉驗證來選擇正則化系數(shù)C,而LR需要自己每次指定一個正則化系數(shù)。例如這樣:
model = LogisticRegression(C=0.000001);除此之外,兩者用法基本相同。
logistic_regression_path比較特殊,它只能提供邏輯回歸后最佳擬合函數(shù)的系數(shù),不能直接給出預(yù)測結(jié)果,這有點不潮流。因此這里不做講述,對比一些其他網(wǎng)站會發(fā)現(xiàn),logistic_regression_path只是作為一個名字存在了。
除了上述三個類之外,這里還講到了MLPRegressor(MLP)和RandomizedLogisticRegression(RLR)。
MLP即多層感知器,是一種前向結(jié)構(gòu)的人工神經(jīng)網(wǎng)絡(luò),映射一組輸入向量到一組輸出向量(如下圖所示)。但是由于MLP的學(xué)習(xí)過程過于簡單,大家一般不會單獨拿來用,但是對于deep learning新手來說,還是可以入個門的。
?RLR看起來特別像LR的兄弟,但是RLR屬于維度規(guī)約的算法類,不屬于我們常說的分類算法的范疇。在本例中,由于我們選擇了8個自變量,但是其中或許有不必要的自變量,我們需要通過維度規(guī)約(降維)來丟棄無用的自變量,這樣可以降低算法存儲量和時間的復(fù)雜度,優(yōu)化模型。
LR(LogisticRegression) - 線性回歸
LogisticRegression 的官方文檔地址
代碼實現(xiàn):
# -*- coding:utf-8 -*- from __future__ import division import pandas as pddatafile = u'E:\\pythondata\\data\\ycshk2.csv'#文件所在位置,u為防止路徑中有中文名稱,此處沒有,可以省略 data = pd.read_csv(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件則用read_csvx = data.iloc[:,:8].as_matrix()#第1列到第7列的所有行 selection = [v for v in range(len(x)) if v % 10 != 0]#訓(xùn)練集所在的行數(shù),只是一個索引,沒有取到對應(yīng)行的數(shù)據(jù) selection2 = [v for v in range(len(x)) if v % 10 == 0]#每隔10行取一行作為檢驗集,v表示所在的行數(shù),只是一個索引,沒有取到對應(yīng)行的數(shù)據(jù) x2 = x[selection, :]#訓(xùn)練集數(shù)據(jù)-因素 x3 = x[selection2, :]#檢驗集數(shù)據(jù)-因素y = data.iloc[:,-1:].as_matrix()#最后一列 y2 = y[selection, :]#訓(xùn)練集數(shù)據(jù)-結(jié)果 y3 = y[selection2, :]#檢驗集數(shù)據(jù)-結(jié)果 print(x2) print(y2)from sklearn.linear_model import LogisticRegression as LR#創(chuàng)建邏輯回歸對象(3種情況:1.自設(shè)參數(shù);2.balanced; 3.默認參數(shù) ########################################################### 1 .自己設(shè)置模型參數(shù) #penalty = {0: 0.2, 1: 0.8} #lr = LR(class_weight = penalty)#設(shè)置模型分類的權(quán)重為penalty# 2. 選擇樣本平衡-balanced #lr = LR(class_weight='balanced')#樣本平衡# 3. 默認參數(shù),class_weight=none lr = LR() ############################################################### 調(diào)用LogisticRegression中的fit函數(shù)/模塊用來訓(xùn)練模型參數(shù) lr.fit(x2, y2) print(u'邏輯回歸模型篩選特征結(jié)束。')#通過檢驗集和預(yù)測模型來判斷準確率 y22 = lr.predict(x2)#用訓(xùn)練集x2的數(shù)據(jù)通過模型進行預(yù)測,結(jié)果儲存在變量y22中。 print(u'模型的平均準確率(訓(xùn)練集)為:%s'% lr.score(x2, y2))#使用邏輯回歸模型自帶的評分函數(shù)score獲得模型在測試集上的準確性結(jié)果。 print(u'模型的平均準確率(訓(xùn)練集,y=0)為:%s'% (sum(y22[i] == 0 for i,v in enumerate(y2) if v == 0) / sum(1 for i,v in enumerate(y2) if v == 0))) print(u'模型的平均準確率(訓(xùn)練集,y=1)為:%s'% (sum(y22[i] == 1 for i,v in enumerate(y2) if v == 1) / sum(1 for i,v in enumerate(y2) if v == 1))) #上述準確率計算的解釋:enumerate()表示遍歷y2中的數(shù)據(jù)下標i和數(shù)據(jù)v,若y2[i]=v==0,且y22[i]==0,則求和, #類似統(tǒng)計在預(yù)測變量y22中,預(yù)測結(jié)果與原結(jié)果y2是一致為0的個數(shù),除以y2中所有為0的個數(shù),得到預(yù)測變量y22的準確率y32 = lr.predict(x3)#用檢驗集x3的數(shù)據(jù)通過模型進行預(yù)測,結(jié)果儲存在變量y32中。 print(u'模型的平均準確率(檢驗集)為:%s'% lr.score(x3, y3))#使用邏輯回歸模型自帶的評分函數(shù)score獲得模型在測試集上的準確性結(jié)果。 print(u'模型的平均準確率(檢驗集,y=0)為:%s'% (sum(y32[i] == 0 for i,v in enumerate(y3) if v == 0) / sum(1 for i,v in enumerate(y3) if v == 0))) print(u'模型的平均準確率(檢驗集,y=1)為:%s'% (sum(y32[i] == 1 for i,v in enumerate(y3) if v == 1) / sum(1 for i,v in enumerate(y3) if v == 1)))print(lr)#查看模型 print(lr.coef_)#查看模型的最佳擬合曲線各變量的參數(shù) print(lr.intercept_)#查看模型的最佳擬合曲線的截距(常數(shù)項)#y2 = lr.predict_proba(x)準確率對比:
1.自設(shè)參數(shù):模型的平均準確率為:0.9563838146700168
2.banlance:模型的平均準確率為:0.5679417157381089
3.默認參數(shù):模型的平均準確率為:0.9563838146700168
權(quán)重怎么設(shè)置和業(yè)務(wù)緊密相關(guān),但是在這里我的自設(shè)參數(shù)和默認參數(shù)得到的結(jié)果是一樣的,不知何故???
LRCV(LogisticRegressionCV )- 邏輯回歸
LRCV的官方文檔地址
兩種算法基本相同,因此將上述代碼中的
“from sklearn.linear_model import LogisticRegression as LR”
改為“from sklearn.linear_model import LogisticRegressionCV as LRCV”
“l(fā)r = LR()”改為“l(fā)r = LRCV()”,即可!
MLP(MLPRegressor) - 人工神經(jīng)網(wǎng)絡(luò)
MLP的官方文檔地址
上述兩段代碼改為:
from sklearn.neural_network import MLPRegressor as MLPlr = MLP(activation='tanh', learning_rate='adaptive')#創(chuàng)建mlp神經(jīng)網(wǎng)絡(luò)對象RLR(RandomizedLogisticRegression)-隨機邏輯回歸
RLR的官方文檔地址
代碼實現(xiàn):
#-*- coding: utf-8-*-import pandas as pddatafile = u'E:\\pythondata\\kehu.xlsx'#文件所在位置,u為防止路徑中有中文名稱,此處沒有,可以省略 data = pd.read_excel(datafile)#datafile是excel文件,所以用read_excel,如果是csv文件則用read_csv x = data.iloc[:,:8].as_matrix()#第1列到第8列 y = data.iloc[:,8].as_matrix()#第9列from sklearn.linear_model import RandomizedLogisticRegression as RLRrlr = RLR() rlr.fit(x, y)#訓(xùn)練模型 rlr.get_support(indices=True) print(u'通過隨機邏輯回歸模型篩選特征結(jié)束。') print(u'有效特征為:%s'%','.join(data.columns[rlr.get_support(indices=True)])) x = data[data.columns[rlr.get_support(indices=True)]].as_matrix()這個代碼需要注意的是,.join(data.columns[rlr.get_support(indices=True)]這部分的包更新刪減了,因此會報錯。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的逻辑回归 - sklearn (LR、LRCV、MLP、RLR)- Python代码实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 转usb驱动cmw500 ni_支持US
- 下一篇: log4net异步写入日志_微信支付万亿