特征选择 - 逐步回归 (stepwise regression)
在学习统计学的时候,留意到有一个算法叫做逐步回归 (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}')
--
参考:
- 「统计学II」课程的教学
- DataCamp的Python技术教学
--
这是我的第一次根据个人已有知识,在网上搜寻再自行学习及整理的笔记,与以往跟着网上课程的笔记有所不同,希望大家支持。如有不正确的说明,也请大家帮忙指正,谢谢!
特征选择 - 逐步回归 (stepwise regression)相关推荐
- 回归问题-逐步回归(Stepwise Regression)
逐步回归(Stepwise Regression) 逐步回归主要解决的是多变量共线性问题,也就是不是线性无关的关系,它是基于变量解释性来进行特征提取的一种回归方法. 逐步回归的主要做法有三种: (一) ...
- R语言基于逐步回归(Stepwise regression)进行特征筛选(feature selection)
R语言基于逐步回归(Stepwise regression)进行特征筛选(feature selection) 对一个学习任务来说,给定属性集,有些属性很有用,另一些则可能没什么用.这里的属性即称为& ...
- R构建逐步回归模型(Stepwise Regression)
R构建逐步回归模型(Stepwise Regression) 目录 R构建逐步回归模型(Stepwise Regression) 逐步回归模型(Stepwise Regression)
- python实现逐步回归分析_Python实现逐步回归(stepwise regression)
逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新 ...
- 基于spss的多元线性回归(逐步回归法 stepwise regression)
回归分析的基本思想是: 虽然自变量和因变量之间没有严格的.确定性的函数关系,但可以设法找出最能代表它们之间关系的数学表达形式. 多元回归分析的由来: 在自变量很多时,其中有的因素可能对应变量的影响不是 ...
- 逐步回归(stepwise regression)完整指南
回归是一种统计方法,可让我们了解自变量和因变量之间的关系. 逐步回归是回归分析中一种筛选变量的过程,我们可以使用逐步回归从一组候选变量中构建回归模型,让系统自动识别出有影响的变量. 理论说明 逐步回归 ...
- python直接进行逐步回归,Python实现逐步回归(stepwise regression)
从0到1Python数据科学之旅(博主录制) http://dwz.date/cqpw 逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验 ...
- python逐步回归筛选变量_Python实现逐步回归(stepwise regression)
逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新 ...
- MATLAB算法实战应用案例精讲-【回归算法】逐步式回归(Stepwise Regression)(附MATLAB、Java、Python和R语言代码)
前言 回归分析是一种预测建模技术的方法,研究因变量(目标)和自变量(预测器)之前的关系.这一技术被用在预测.时间序列模型和寻找变量之间因果关系.例如研究驾驶员鲁莽驾驶与交通事故发生频率之间的关系,就可 ...
最新文章
- Tomcat漏洞说明与安全加固
- iOS UI、Xcode、调试、代码等常见问题总汇(持续更新中)
- 嵌入式GUI FTK支持输入法
- Java学习---JDK的安装和配置
- python读写大文件 meoryerror_Python – 如何在没有MemoryError的情况下gzip大文本文件?...
- 2015-01-13
- sql虚拟服务器安装,安装SQL Server 2012服务器
- 几个好用的makefile 几乎可以不用修改
- 20.TCP/IP 详解卷1 --- TCP 的成块数据流
- 非关系型数据库和关系型数据库区别(转载)
- JavaScript数据结构学习笔记(封装二叉树)
- python梦幻西游辅助_GitHub - woshiliushan/mhxy_fz: 一个基于计算机视觉开发的梦幻西游辅助脚本...
- 2020vue面试题汇总
- 平面向量内积坐标公式推导_向量的数量积的坐标运算公式是如何推导出的 两个向量的向量积公式是怎...
- win7一激活就蓝屏
- 软件测试找游戏bug,豪之诺游戏测试常见Bug整理
- 经典贪吃蛇大战逆向_游戏内购
- 80个自我提升的网站
- IoC与DI工厂、单例、原型模式详解
- vscode文件图标消失