在学习统计学的时候,留意到有一个算法叫做逐步回归 (stepwise regression)。简单来说,就是数据集中的特征的重要性不同,这方法可以把它们排序,找出每一个特征对预测结果的重要性。

以下代码将会逐步说明从得到数据集开始,应怎么做才可以找到特征重要性的排序。(这次我们假设做一个二分类的任务)

1. 导入需要用到的工具

import pandas as pd
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import LabelEncoder
from sklearn import linear_model
from sklearn.metrics import roc_auc_scoreimport warnings
warnings.filterwarnings('ignore')

2. 取得数据集, 并且把一些特征已经很明显是不要的特征先行drop掉

df = pd.read_csv('df.csv')
df = df.drop(['fea1', 'fea3', 'fea4'], axis=1)

3. 为数据分类 (包括是CATEGORY还是NUMERIC),这里只分类x值, 不需要把目标值也分类

CATEGORY = ['fea5', 'fea6', 'fea7']
NUMERIC = ['fea2', 'fea8', 'fea9', 'fea10']

4. 数据预处理。

  • CATEGORY值是进行label encoder,因为用one-hot encoder的话会有机会导致找出来的「有用特征」都来源于同一个原有特征,那就不符合找出「有用特征」的原意。
  • NUMERIC值需缩放特征使其具相同比例,即是用于将数据归一到某一个范围。这个缩放特征的方式可以自行决定的。 (常见的处理方法包括:MinMaxScaler常态化、StandardScaler标准化等)
def preprocessing(df):# label encoderlabelencoder = LabelEncoder()for c in CATEGORY:df[c] = labelencoder.fit_transform(df[c])# MinMaxScalerscaler = MinMaxScaler()df[NUMERIC] = scaler.fit_transform(df[NUMERIC])return df

5. 由于我们在做二分类,但在做预测时的预测值是概率值 (probability),所以需要把概率值先行转为二分类的值,这里把阈值 (threshold)设定为0.5。

def y_pred_to_binary(y_pred):y_pred_bin_list = []for i in y_pred:if i >= 0.5:y_pred_bin = 1else:y_pred_bin = 0y_pred_bin_list.append(y_pred_bin)return y_pred_bin_list

6. 计算每一组特征所得到的AUC值,用作后来选特征

def auc(variables, target, basetable):y_pred_binary_list = []x = basetable[variables]y = basetable[target]log_reg = linear_model.LogisticRegression()log_reg.fit(x, y)y_pred = log_reg.predict_proba(x)[:, 1]y_pred_bin = y_pred_to_binary(y_pred) # 轉做binaryauc = roc_auc_score(y, y_pred_bin)return auc

7. 遍历所有 candidate_variables,跟踪哪个 var 是最好的(auc 与 best_var 相关),结合当前变量返回下一个最好的变量。

def next_best(current_variables, candidate_variables, target, basetable):best_auc = -1best_var = Nonefor v in candidate_variables:auc_v = auc(current_variables + [v], target, basetable)# 調整best_aucif auc_v >= best_auc:best_auc = auc_vbest_var = vreturn best_var

8. 首先要为数据集进行数据预处理,并查看处理后的数据状况。

# 数据预处理
df = preprocessing(df)# 目前的数据状况
print(f'features in df:\n{df.columns.tolist()}')
print(f'num of x_features: {len(df.columns) - 1}')
print(f'num of y_features: {1}, and the feature is {df.columns[-1]}')

9. 实施前向逐步程序,找出「有用特征」的顺序。

candidate_variables = df.columns[:-1].to_list()
current_variables = []
target = df.columns[-1]max_num_var = 5 # 这个值可自行定义 (或考虑使用相关性比例作选择也可,这方面这里没有说明)
num_iterations = min(max_num_var, len(candidate_variables))
print(f'num_iterations: {num_iterations}')for i in range(0, num_iterations):next_var = next_best(current_variables, candidate_variables, target, df)current_variables = current_variables + [next_var]candidate_variables.remove(next_var)# 「有用特征」的顺序
print(f'current_variables: {current_variables}')

--
参考:

  1. 「统计学II」课程的教学
  2. DataCamp的Python技术教学

--

这是我的第一次根据个人已有知识,在网上搜寻再自行学习及整理的笔记,与以往跟着网上课程的笔记有所不同,希望大家支持。如有不正确的说明,也请大家帮忙指正,谢谢!

特征选择 - 逐步回归 (stepwise regression)相关推荐

  1. 回归问题-逐步回归(Stepwise Regression)

    逐步回归(Stepwise Regression) 逐步回归主要解决的是多变量共线性问题,也就是不是线性无关的关系,它是基于变量解释性来进行特征提取的一种回归方法. 逐步回归的主要做法有三种: (一) ...

  2. R语言基于逐步回归(Stepwise regression)进行特征筛选(feature selection)

    R语言基于逐步回归(Stepwise regression)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为& ...

  3. R构建逐步回归模型(Stepwise Regression)

    R构建逐步回归模型(Stepwise Regression) 目录 R构建逐步回归模型(Stepwise Regression) 逐步回归模型(Stepwise Regression)

  4. python实现逐步回归分析_Python实现逐步回归(stepwise regression)

    逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新 ...

  5. 基于spss的多元线性回归(逐步回归法 stepwise regression)

    回归分析的基本思想是: 虽然自变量和因变量之间没有严格的.确定性的函数关系,但可以设法找出最能代表它们之间关系的数学表达形式. 多元回归分析的由来: 在自变量很多时,其中有的因素可能对应变量的影响不是 ...

  6. 逐步回归(stepwise regression)完整指南

    回归是一种统计方法,可让我们了解自变量和因变量之间的关系. 逐步回归是回归分析中一种筛选变量的过程,我们可以使用逐步回归从一组候选变量中构建回归模型,让系统自动识别出有影响的变量. 理论说明 逐步回归 ...

  7. python直接进行逐步回归,Python实现逐步回归(stepwise regression)

    从0到1Python数据科学之旅(博主录制) http://dwz.date/cqpw 逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验 ...

  8. python逐步回归筛选变量_Python实现逐步回归(stepwise regression)

    逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新 ...

  9. MATLAB算法实战应用案例精讲-【回归算法】逐步式回归(Stepwise Regression)(附MATLAB、Java、Python和R语言代码)

    前言 回归分析是一种预测建模技术的方法,研究因变量(目标)和自变量(预测器)之前的关系.这一技术被用在预测.时间序列模型和寻找变量之间因果关系.例如研究驾驶员鲁莽驾驶与交通事故发生频率之间的关系,就可 ...

最新文章

  1. Tomcat漏洞说明与安全加固
  2. iOS UI、Xcode、调试、代码等常见问题总汇(持续更新中)
  3. 嵌入式GUI FTK支持输入法
  4. Java学习---JDK的安装和配置
  5. python读写大文件 meoryerror_Python – 如何在没有MemoryError的情况下gzip大文本文件?...
  6. 2015-01-13
  7. sql虚拟服务器安装,安装SQL Server 2012服务器
  8. 几个好用的makefile 几乎可以不用修改
  9. 20.TCP/IP 详解卷1 --- TCP 的成块数据流
  10. 非关系型数据库和关系型数据库区别(转载)
  11. JavaScript数据结构学习笔记(封装二叉树)
  12. python梦幻西游辅助_GitHub - woshiliushan/mhxy_fz: 一个基于计算机视觉开发的梦幻西游辅助脚本...
  13. 2020vue面试题汇总
  14. 平面向量内积坐标公式推导_向量的数量积的坐标运算公式是如何推导出的 两个向量的向量积公式是怎...
  15. win7一激活就蓝屏
  16. 软件测试找游戏bug,豪之诺游戏测试常见Bug整理
  17. 经典贪吃蛇大战逆向_游戏内购
  18. 80个自我提升的网站
  19. IoC与DI工厂、单例、原型模式详解
  20. vscode文件图标消失

热门文章

  1. 服务器物理机如何实现系统快照,Lvm快照实现物理备份之自动化
  2. cufft1d c2c
  3. Glide 入门到精通之四——图片缩放和调整大小
  4. 2021巅峰极客逆向baby_maze题wp
  5. python语言要英语基础吗_学编程需要英语基础吗?
  6. 如何能做好软件项目(迭代开发)
  7. SHA-256算法实现
  8. Linux学习日记15——exec函数族、回收子进程
  9. Java技术——你真的了解String类的intern()方法吗,快点来学吧
  10. 国际上进行盲源分离研究的主要学者及其研究方向