1. 程式人生 > >挖掘建模-分類與預測-迴歸分析-邏輯迴歸

挖掘建模-分類與預測-迴歸分析-邏輯迴歸

利用Scikit-Learn對以下資料集進行邏輯迴歸分析。首先進行特徵篩選,特徵篩選的方法很多,主要包含在Scikit-Learn的feature-selection庫中,比較簡單的有通過F檢驗(f_regression)來給出各個特徵的F值和p值,從而可以篩選變數(選擇F值大的或者p值小的特徵)。其次有遞迴特徵消除(Recursive Feature Elimination, RFE)和穩定性選擇(Stability Selection)等比較新的方法。這裡使用了穩定性選擇方法中的隨機邏輯迴歸進行特徵篩選,然後利用篩選後的特徵建立邏輯迴歸模型,輸出平均正確率,程式碼如下:

程式碼來源: Python資料分析與挖掘實戰

#-*- coding: utf-8 -*-

import pandas as pd
import numpy as np
from sklearn.linear_model import LogisticRegression as LR
from sklearn.linear_model import RandomizedLogisticRegression as RLR

filename = '../data/bankloan.xls'
data = pd.read_excel(filename)

x = data.iloc[:,:8].as_matrix()  #自變數;data.iloc[:,:8]取除違約列的資料,官方文件說明as_matrix()方法將會在pandas 0.23.0開始被values()代替,as_matrix()這裡將所有記錄轉換為陣列表示
y = data.iloc[:,8].as_matrix()     #data[:,8]只取違約列的資料; y在這裡做為邏輯迴歸的因變數,取值只能為0,1

rlr = RLR()    #建立隨機邏輯迴歸模型,篩選變數
rlr.fit(x, y)    #訓練模型

rlr.get_support(indices=True)   #獲取特徵篩選結果:返回為True的索引[2 3 5 6];也可以用.score_方法獲取各個特徵的分數

print(u'通過隨機邏輯迴歸模型篩選特徵結束')
print(u'有效特徵為: %s' % ','.join(data.columns[rlr.get_support(indices=True)]))     #','.join(...)表示後面的各個元素以逗號分割, data.columns: Index([u'年齡', u'教育', u'工齡', u'地址', u'收入', u'負債率', u'信用卡負債', u'其他負債', u'違約'], dtype='object')

x = data[data.columns[rlr.get_support(indices=True)]].as_matrix()     #篩選好特徵

lr = LR()    #建立邏輯貨櫃模型
lr.fit(x, y)    #用篩選後的特徵資料來訓練模型
print(u'邏輯迴歸模型訓練結束。')
print(u'模型的平均正確率為: %s' % lr.score(x, y))    #給出模型的平均正確率,本例為81.4%

返回值: 

通過隨機邏輯迴歸模型篩選特徵結束
有效特徵為: 工齡,地址,負債率,信用卡負債
邏輯迴歸模型訓練結束。
模型的平均正確率為: 0.8142857142857143