分类算法----逻辑回归特征选择

备注:以下均参考Python数据分析和数据挖掘实战

在利用Scikit-Learn对数据进行逻辑回归之前。首先进行特征筛选。特征筛选的方法很多,主要包含在Scikit-Learn的feature-selection库中,比较简单的有通过F检验(f_regression)来给出各个特征的F值个P值,从而可以筛选变量(选在F值达回执P值小的特征)。一下为利用稳定性选择方法中的随机逻辑回归进行特征筛选,然后利用筛选后的特征建立逻辑回归模型,输出平均正确率

数据为商品的一些销售信息,通过商品的销售信息,判断商品的好坏

代码清单如下

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------

import pandas as pd
from sklearn.linear_model import  LogisticRegression  as LR
from sklearn.linear_model import RandomizedLogisticRegression as RLR
data=pd.read_excel('categ_lvl3.xlsx')
select_var=~data.columns.isin(["CATEG_LVL3_ID","CATEG_LVL3_NAME","CATEG_LVL1_ID","FLAG","PROB","FLAG_PRE"])
pre_test=data.ix[:,select_var]
#print pre_test.shape,data.shape
pre_X = data.ix[:, select_var]
pre_Y=data.FLAG.values
rlr=RLR()
rlr=rlr.fit(pre_X,pre_Y)
#print rlr.get_support()
#print rlr.scores_
print '保留特征如下'
print (pre_X.columns[rlr.get_support()])
x=pre_X[pre_X.columns[rlr.get_support()]].as_matrix()#筛选好特征
lr=LR()
lr.fit(x,pre_Y)
print '逻辑回归模型结束:%s' % lr.score(x,pre_Y)#%s 和 % d" %s是字符串对应的格式通配符,%d是数值整型对应的格式通配符

lr1=lr.fit(pre_X,pre_Y)
print ('未做变量筛选时模型的准确率:%s' % lr.score(pre_X,pre_Y))
------------------------------------------------------------------------------------------------------------------------------------------------------------------------->>> runfile('D:/Python/test_lr.py', wdir='D:/Python')
保留特征如下
Index([    u'订单数',      u'商品数',     u'顾客数',
       u'老客数',       u'流量',       u'缺货天数'],
      dtype='object')
逻辑回归模型结束:0.927355278093
未做变量筛选时模型的准确率:0.862656072645

从上面的结果可以看出,采用采用随机逻辑回归剔除变量,仅保留  u'SKU_NUM',     u'ORDR_NUM',   u'CUST_NUM', u'OLD_CUST_NUM',       u'DETL_UV',
  u'CMPLNT_TIMES'这几个变量,准确率明显高于未做变量筛选时的准确率,备注读者可以手动设置RLR阈值(selection_threshold=0.5)

或者使用lasso和F(f_regression)也可以

你可能感兴趣的:(分类算法)