特征选择/相关性

本文深入探讨了多种特征选择方法,包括基于方差、Pearson相关系数、互信息、最大信息系数、距离相关系数的选择策略,以及基于学习模型的特征排序。详细解释了线性模型、正则化、随机森林在特征选择中的应用,对比了L1和L2正则化的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、去掉取值变化小的特征:可通过计算方差来衡量。

二、单变量特征选择:

1、Pearson相关系数中,会提到p-value。p-value用来反应显著水平。如果两变量间不显著,相关系数再高也没有用,可能只是偶然因素引起的。一般p值小于0.05就是显著了,如果小于0.01就更显著了。例如p值=0.001,就是很高的显著水平了,只要显著,就可以下结论说,拒绝原假设无关,两组数据显著相关,也可以说,两者之间确实有明显关系。通常,需要p值小于0.1,最好小于0.05甚至0.01,才可以得出结论,即两组数据有明显关系。如果p=0.5,远大于0.1,只能说明相关程度不明显,甚至不相关,起码不能说是线性相关。

2、Pearson相关系数,通常也成为R值,在确认上面指标显著的情况下,再来看这个指标,一般相关系数越高,表明两者间关系越密切。

3、互信息:

互信息用于特征选择,不太方便。互信息不属于度量方式,没有办法归一化,在不同数据集上的结果无法作比较。对于连续型变量计算不方便,因为他要求先离散化,而互信息的结果对离散化的方式很敏感。

4、最大信息系数(MIC)克服了上述互信息的问题。它首先寻找一种最优的离散化方法,然后把互信息取值转换为一种度量方式,取值区间在[0,1]。python的minepy包中提供了MIC功能。

但是,MIC的统计能力遭到了一些质疑,当零假设不成立时,MIC的统计结果就会受到影响。零假设:在统计学中,零假设(虚无假设)是做统计检验时的一类假设,零假设的内容一般是希望证明错误的假设。如果我们要研究两个时间的关系时,零假设的意思就是说,两件事情之间没有关系。

5、距离相关系数

距离相关系数是为了客服Pearson相关系数的弱点而生,在x和x^2的相关性这个例子中,Pearson相关系数为0,我们不能断定这两个变量是独立的,但是如果距离相关系数为0,那么我们可以说这两个变量是独立的。

尽管MIC和距离相关系数都在了,但当变量之间的关系接近新乡相关的时候,Pearson相关系数仍然不可替代,第一,Pearson香瓜系数计算速度非常快,在处理大规模数据的时候很重要,第二,Pearson相关系数的取值区间[-1,1],而MIC和距离相关系数取值范围都是[0,1]。这个特点使得Pearson相关系数能够表征更丰富的关系,符号表示关系的正负,绝对值表示强度。当然,Pearson相关系数有效的前提是两个变量的变化关系时单调的。

6、基于学习模型的特征排序

直接使用你要用的机器学习算法,针对单独的特征和相应变量建立预测模型。

三、线性模型和正则化

单变量特征选择方法独立的衡量每个特征与相应变量之间的关系,另一种主流的特征选择方法是基于机器学习模型的方法。有些机器学习方法本身就具有对特征进行打分的机制,或者很容易将其运用到特征选择任务中,例如回归模型、svm、决策树等等。这种方法好像叫做wrapper类型,大概意思是说,特征排序模型和机器学习模型耦合在一起,对应的非wrapper类型的特征选择方法叫做filter类型。

如何回归模型的系数来选择特征,越是重要的特征在模型中对应的系数就越大,而跟输出变量越无关的特征对用的系数就越接近0.在噪音不多的数据集上,或者在数据量远远大于特征数的数据集上,如果特征之间相对来说比较独立,那么即便是应用简单的线性回归模型,也能取得好滴效果。

L1正则化:将L1范数作为惩罚项加到损失函数上,由于正则项非零,这就迫使那些弱的特征所对应的系数变成0.因此,L1正则化往往会得到的模型很系数。这个特性使得L1正则化成为很好的特征选择方法。提高惩罚项的系数,模型就会变得越来越稀疏。L1正则化不稳定,如果特征集合中存在相关联的特征,当数据发生卫星的变化时,也有可能导致很大的模型差异。

L2正则化:L2正则化会让系数的取值变得平均。对于关联特征,这意味着他们能够获得更想近的对应系数。还是以Y=X1+X2为例,假设X1和X2具有很强的关联,如果用L1正则化,不论学到的模型是Y=X1+X2还是Y=2X1,惩罚都是一样的,都是2 alpha。但是对于L2来说,第一个模型的惩罚项是2 alpha,但第二个模型的是4*alpha。可以看出,系数之和为常数时,各系数相等时惩罚是最小的,所以才有了L2会让各个系数趋于相同的特点。

四、随机森林

随机森林提供两种特征选择方法:平均不纯度减少和平均精确率减少。

随机森林由多个决策树构成。树中每个节点都是关于某个特征的条件,为的是将数据集按照不同的响应变量一分为二,利用不纯度可以确定节点。对于分类问题,通常采用基尼不纯度或者信息增益。对于回归问题,通常采用的是方差或者最小二乘拟合。当训练决策树的时候,可以计算出每个特征减少了多少树的不纯度。对于一个决策树森铃来说,可以算出每个特征平均减少了多少不纯度,并把它平均减少的不纯度作为特征选择的值。

使用基于不纯度的方法的时候,要记住:1、这种方法存在 偏向 ,对具有更多类别的变量会更有利;2、对于存在关联的多个特征,其中任意一个都可以作为指示器(优秀的特征),并且一旦某个特征被选择之后,其他特征的重要度就会急剧下降,因为不纯度已经被选中的那个特征降下来了,其他的特征就很难再降低那么多不纯度了,这样一来,只有先被选中的那个特征重要度很高,其他的关联特征重要度往往较低。在理解数据时,这就会造成误解,导致错误的认为先被选中的特征是很重要的,而其余的特征是不重要的,但实际上这些特征对响应变量的作用确实非常接近的(这跟Lasso是很像的)。

 

参考:https://blog.csdn.net/chenpe32cp/article/details/79644803

 

<think>首先,用户的问题是关于查找描述性分析和相关性分析的使用教程。用户提到:“我想查找描述性分析和相关性分析的使用教程 请问描述性分析和相关性分析使用教程 数据分析方法 教程”。所以,我需要提供描述性分析和相关性分析的使用教程,包括数据分析方法。 从系统级指令中,我有几个关键点: - 所有行内数学表达式必须使用$...$格式。 - 独立公式必须使用$$...$$格式并单独成段。 - LaTeX语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识,例如[^1]。 - 回答结构清晰,帮助用户逐步解决问题。 - 参考站内引用,但用户提供的引用是示例,不是真实需求。引用包括: - [^1]: 相关性分析的定义和R语言应用。 - [^2]: 相关性分析的方法,包括图形描述和工具。 - [^3]: 相关性分析的实际意义和分类。 - [^4]: 实证分析流程,包括相关性分析。 用户真正的需求是教程,所以我需要基于这些引用构建一个教程。 我的回答结构: 1. **介绍描述性分析**:解释什么是描述性分析,包括常见的统计量(如均值、中位数、标准差等),并提供代码示例(如使用Python或R)。 2. **介绍相关性分析**:解释什么是相关性分析,包括皮尔逊相关系数、斯皮尔曼相关系数等,并提供代码示例。 3. **步骤指南**:逐步展示如何执行这些分析,包括数据准备、计算和可视化。 4. **代码示例**:使用Python或R(基于引用中提到的R语言,但用户没有指定语言,我可以提供两种)。 5. **生成相关问题**:在末尾添加相关问题。 6. **引用标识**:在回答中自然地添加引用到提供的引用内容。 确保使用中文。 大纲: - **开头**:简要介绍描述性分析和相关性分析。 - **描述性分析教程**: - 定义和目的。 - 关键统计量。 - 示例代码(如Python的pandas或R)。 - 可视化(如直方图、箱线图)。 - **相关性分析教程**: - 定义和目的。 - 相关系数类型(皮尔逊、斯皮尔曼)。 - 示例代码计算相关系数。 - 可视化(如散点图、热力图)。 - **综合示例**:展示一个完整的数据分析流程。 - **相关问题**:生成3-5个相关问题。 参考引用: - 从[^1]:相关性分析用于研究变量之间的关系,R语言有工具。 - 从[^2]:相关性分析用于连续变量,图形描述(如散点图),使用皮尔逊或斯皮尔曼。 - 从[^3]:相关性分析需要变量关联,避免无意义的相关。 - 从[^4]:实证分析流程包括描述性、相关性、回归等。 所以,在教程中,我可以引用这些点。 代码示例: - 使用Python,因为它更常见。或者R,因为引用提到R。 - 示例数据:用简单的数据集,如Iris数据集或生成的数据。 数学表达式: - 行内:如皮尔逊相关系数公式:$r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2 \sum (y_i - \bar{y})^2}}$ - 独立公式:如果需要,单独显示。 生成相关问题: - 例如: 1. 如何解释描述性统计量的结果? 2. 相关性分析中如何处理非线性关系? 3. 相关性分析在机器学习中的应用? 最终回答结构: - 标题或开头。 - 描述性分析部分。 - 相关性分析部分。 - 相关问题。</think>### 描述性分析和相关性分析使用教程 描述性分析和相关性分析是数据分析的核心方法,用于探索数据的基本特征和变量间的关系。本教程将逐步指导你如何使用这些方法,包括理论解释、操作步骤和代码示例(基于Python和R语言)。教程基于实际数据分析流程,确保结果可靠。内容参考了权威资料[^1][^2][^3][^4],帮助避免常见误区(如分析无实际关联的变量)。 #### 一、描述性分析教程 描述性分析旨在总结数据集的基本特征,通过统计量和可视化展示数据的分布、中心趋势和离散程度。适用于数据探索的初步阶段。 **步骤指南:** 1. **数据准备**:加载数据集,处理缺失值(如填充均值或删除)。 2. **计算关键统计量**: - **中心趋势**:均值($\bar{x} = \frac{1}{n}\sum_{i=1}^{n} x_i$)、中位数、众数。 - **离散程度**:标准差($s = \sqrt{\frac{1}{n-1}\sum_{i=1}^{n} (x_i - \bar{x})^2}$)、方差、范围(最大值-最小值)。 - **分布形态**:偏度(衡量不对称性)、峰度(衡量峰值高低)。 3. **可视化**:使用直方图、箱线图或密度图展示数据分布。 4. **解释结果**:例如,标准差大表示数据分散,偏度大于0表示右偏。 **代码示例(Python使用pandas和matplotlib):** ```python import pandas as pd import matplotlib.pyplot as plt # 加载数据(示例:Iris数据集) data = pd.read_csv('iris.csv') # 假设数据文件包含花萼长度、花瓣长度等 print("描述性统计量:") print(data.describe()) # 输出均值、标准差等 # 可视化:直方图展示花萼长度的分布 plt.hist(data['sepal_length'], bins=15, color='skyblue', edgecolor='black') plt.title('花萼长度分布直方图') plt.xlabel('长度') plt.ylabel('频数') plt.show() # 可视化:箱线图比较不同类别的花瓣宽度 data.boxplot(column='petal_width', by='species') plt.title('花瓣宽度箱线图(按类别)') plt.suptitle('') # 移除自动标题 plt.show() ``` **代码示例(R语言使用dplyr和ggplot2):** ```r library(dplyr) library(ggplot2) # 加载数据 data <- read.csv('iris.csv') cat("描述性统计量:\n") summary(data) # 输出最小值、均值、最大值等 # 可视化:直方图 ggplot(data, aes(x = sepal_length)) + geom_histogram(fill = "skyblue", bins = 15, color = "black") + labs(title = "花萼长度分布直方图", x = "长度", y = "频数") # 可视化:箱线图 ggplot(data, aes(x = species, y = petal_width)) + geom_boxplot() + labs(title = "花瓣宽度箱线图(按类别)", x = "类别", y = "宽度") ``` **关键要点:** - 描述性分析帮助识别异常值(如箱线图中的离群点)和数据分布特征。 - 实际应用中,先做描述性分析再进入相关性分析,确保数据质量[^4]。 #### 二、相关性分析教程 相关性分析研究两个或多个连续变量之间的线性或非线性关系强度和方向。常用于预测建模前探索变量关联[^1][^2]。注意:变量必须逻辑相关(如收入与消费),避免无意义分析(如人口总量与身高)[^3]。 **步骤指南:** 1. **选择方法**: - **皮尔逊相关系数(Pearson)**:适用于线性关系,范围$[-1, 1]$,计算公式: $$ r = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2 \sum (y_i - \bar{y})^2}} $$ 其中$r$接近1表示强正相关,接近-1表示强负相关。 - **斯皮尔曼相关系数(Spearman)**:适用于非线性或序数数据,基于变量排名。 - **图形法**:特征少时用散点图直观判断关系。 2. **计算相关系数**:使用统计工具计算,并检验显著性(p值<0.05表示显著)。 3. **可视化**:散点图展示关系,热力图展示多变量相关系数矩阵。 4. **解释结果**:例如,$r=0.8$表示强正相关,但需结合业务意义避免误导[^3]。 **代码示例(Python使用scipy和seaborn):** ```python import scipy.stats as stats import seaborn as sns # 计算皮尔逊相关系数(示例:花萼长度与花瓣长度) r, p_value = stats.pearsonr(data['sepal_length'], data['petal_length']) print(f"皮尔逊相关系数: {r:.2f}, p值: {p_value:.4f}") # 输出如 r=0.87, p=0.001 # 可视化:散点图 sns.scatterplot(x='sepal_length', y='petal_length', data=data, hue='species') plt.title('花萼长度 vs 花瓣长度散点图') plt.show() # 可视化:热力图展示多变量相关系数矩阵 corr_matrix = data.corr(method='pearson') # 计算相关系数矩阵 sns.heatmap(corr_matrix, annot=True, cmap='coolwarm') plt.title('变量间相关系数热力图') plt.show() ``` **代码示例(R语言使用cor和corrplot):** ```r # 计算皮尔逊相关系数 cor_result <- cor.test(data$sepal_length, data$petal_length, method = "pearson") cat(sprintf("皮尔逊相关系数: %.2f, p值: %.4f\n", cor_result$estimate, cor_result$p.value)) # 可视化:散点图 ggplot(data, aes(x = sepal_length, y = petal_length, color = species)) + geom_point() + labs(title = "花萼长度 vs 花瓣长度散点图", x = "花萼长度", y = "花瓣长度") # 可视化:热力图 library(corrplot) cor_matrix <- cor(data[,1:4], method = "pearson") # 计算矩阵 corrplot(cor_matrix, method = "color", type = "upper", tl.col = "black") ``` **关键要点:** - 特征少时优先用图形法(如散点图),特征多用相关系数矩阵[^2]。 - 皮尔逊只能检测线性关系;非线性关系可用分组后方差分析或斯皮尔曼方法[^2]。 - 在实证分析中,相关性分析常作为回归建模的前置步骤[^4]。 #### 三、综合应用示例 在真实项目中(如用户行为分析),流程通常是: 1. **描述性分析**:计算用户年龄、消费额的均值和标准差。 2. **相关性分析**:检查年龄与消费额的相关性(如皮尔逊$r$)。 3. **结果应用**:如果$r > 0.5$,可构建回归模型预测消费。 使用Python完整代码: ```python # 假设数据:df包含'age'和'spending' import pandas as pd df = pd.DataFrame({'age': [25, 30, 35, 40], 'spending': [500, 800, 1000, 1200]}) # 描述性分析 print("描述性统计:") print(df.describe()) # 相关性分析 correlation = df.corr(method='pearson') print("\n相关系数矩阵:") print(correlation) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值