特征选择之相关性分析
特征选择之相关性分析
前言
在数据科学和机器学习领域中,特征选择是一项关键的任务,它的目的是从大量特征中筛选出对目标变量具有显著影响的特征,从而提高模型的性能和泛化能力。相关性分析作为特征选择的一种方法,通过衡量特征与目标变量之间的相关性来评估特征的重要性。
一、相关性分析是什么?
相关性分析能够帮助我们理解特征与目标变量之间的关系,找出对目标变量影响最大的特征,进而简化模型、减少过拟合、提高模型的解释性和泛化能力。在相关性分析中,我们可以使用多种指标来度量特征与目标变量之间的相关性,如皮尔逊相关系数、斯皮尔曼相关系数等。
二、相关性分析原理以及分析
1、原理
计算特征与目标变量之间的相关性,相关性越高,说明该特征对目标变量的影响越大,也就越有可能是有效特征。
2、分析
通过查看与目标变量的相关性数值,绝对值越接近 1 说明相关性越强,可认为是更有效的特征。
三、皮尔逊相关系数、斯皮尔曼相关系数、Kendall相关系数
1、皮尔逊相关系数
适用于连续型变量,衡量两个变量之间的线性相关性。其取值范围在 -1 到 1 之间,-1 表示完全负相关,1 表示完全正相关,0 表示不存在线性相关。例如,在分析身高和体重的关系时,皮尔逊相关系数可以帮助我们了解两者之间线性关系的强弱。
2、斯皮尔曼相关系数:
它是一种非参数的相关性度量方法,不要求变量满足正态分布,更侧重于衡量变量之间的单调关系。在处理顺序变量或不满足正态分布的连续变量时,斯皮尔曼相关系数更为适用。
3、Kendall相关系数
用于衡量变量之间的单调关系,但对于小样本数据更为稳健。
四.使用自有数据集的代码实现
1、代码
import matplotlib
matplotlib.use('TkAgg')
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# 设置字体
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# 读取文件
df = pd.read_excel('C:/Users/LENOVO/Desktop/单因素.xlsx')
# 确定特征和目标变量,排除住院号列
target_column = '结局'
features = df.drop(columns=['住院号', target_column])
target = df[target_column]
# 将特征和目标变量合并到一个新的数据框中,以便后续计算相关性
new_df = pd.concat([features, target], axis=1)
# 默认使用皮尔逊相关系数计算相关性矩阵
correlation_matrix_pearson = new_df.corr()
# 使用斯皮尔曼相关系数计算相关性矩阵
correlation_matrix_spearman = new_df.corr(method='spearman')
# 使用皮尔逊相关系数的
# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix_pearson, annot=True, cmap='coolwarm')
plt.title('Pearson Correlation Heatmap')
plt.show()
# 查看与目标变量的相关性
correlation_with_target = correlation_matrix_pearson[target_column].drop(target_column)
print(correlation_with_target)
# 使用斯皮尔曼相关系数的
# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix_spearman, annot=True, cmap='coolwarm')
plt.title('Spearman Correlation Heatmap')
plt.show()
# 查看与目标变量的相关性
correlation_with_target = correlation_matrix_spearman[target_column].drop(target_column)
print(correlation_with_target)
2、效果图以及结果
(1)皮尔逊相关系数的结果
(2)斯皮尔曼相关系数的结果
(3)Kendall相关系数的结果
五、 使用在线公有数据集代码操作
1、代码
import pandas as pd
import matplotlib
matplotlib.use('TkAgg')
from sklearn.datasets import load_iris
import seaborn as sns
import matplotlib.pyplot as plt
# 加载数据集
data = load_iris()
df = pd.DataFrame(data.data, columns=data.feature_names)
df['target'] = data.target
# 计算相关性矩阵
# correlation_matrix = df.corr()#计算相关性矩阵时默认使用的是皮尔逊相关系数。
# 默认使用皮尔逊相关系数计算相关性矩阵
correlation_matrix_pearson = df.corr()
# 使用斯皮尔曼相关系数计算相关性矩阵
correlation_matrix_spearman = df.corr(method='spearman')
#使用皮尔逊相关系数的
# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix_pearson, annot=True, cmap='coolwarm')
plt.title('Pearson Correlation Heatmap')
plt.show()
# 查看与目标变量的相关性
correlation_with_target = correlation_matrix_pearson['target'].drop('target')
print(correlation_with_target)
#使用斯皮尔曼相关系数的
# 绘制热力图
plt.figure(figsize=(8, 6))
sns.heatmap(correlation_matrix_spearman, annot=True, cmap='coolwarm')
plt.title('Spearman Correlation Heatmap')
plt.show()
# 查看与目标变量的相关性
correlation_with_target = correlation_matrix_spearman['target'].drop('target')
print(correlation_with_target)
2、效果图以及结果
(1)皮尔逊相关系数的结果
(2)斯皮尔曼相关系数的结果
(3)Kendall相关系数的结果
六、使用大模型实现特征选择技巧
1、模型选择
本教学采用豆包达模型
2、数据选择
数据采用医疗临床数据用于特征选择,由于隐私问题数据暂不提供。
3、操作方式
源代码采用的是在线公有数据集代码,然后将代码复制到搜索框中,单因素文件复制到豆包中,提问“读取单因素文件除了住院号外,结局作为target,其他作为特征名,以上代码需要怎么改”然后即可将代码修改并且能够自动输出结果,结果包含图片以及打印结果。
4、效果展示
输出结果与pycharm中的输出打印一样
此热力图可直接下载,效果与pycharm运行效果一样。
总结
相关性分析是特征选择中常用的方法,其目的是确定不同特征之间的相关程度,从而找出与目标变量最相关的特征。以下是相关性分析的一些关键点:
Pearson相关系数:用于衡量两个连续变量之间的线性关系,取值范围为-1到1。相关系数接近1表示正相关,接近-1表示负相关,接近0表示无相关性。
Spearman相关系数:用于衡量两个变量之间的单调关系,不要求变量呈线性关系。适用于无法满足正态分布假设的数据。
- Kendall相关系数:也用于衡量变量之间的单调关系,但对于小样本数据更为稳健。
相关性热图:通过可视化的方式展示不同特征之间的相关性,有助于发现高度相关的特征,并进行特征筛选。
多重共线性:指特征之间存在强相关性,会导致模型不稳定或难以解释。在特征选择中需要避免多重共线性问题。
注意事项:相关性分析并不代表因果关系,只能揭示变量之间的关联性。在进行特征选择时,还需要考虑其与目标变量的相关性以及特征之间的独立性。
综上所述,相关性分析是特征选择中一种重要的方法,可以帮助筛选与目标变量相关性较高且相互独立的特征,从而提高模型的预测性能。