[python数据处理] 共线性处理

  • 特征间共线性:
    两个或多个特征包含了相似的信息,期间存在强烈的相关关系

  • 常用判断标准:
    两个或两个以上的特征间的相关性系数高于0.8。

  • 共线性的影响:

    • 降低运算效率
    • 降低一些模型的稳定性
    • 弱化一些模型的预测能力
  • 处理方式:

    • 删除:一组相互共线的特征中只保留与y相关性最高的一个
    • 变换:对共线的两列特征进行求比值、求差值等计算
# 特征工程的演示
import pandas as pd
import matplotlib.pyplot as plt
# 样例数据读取
df = pd.read_excel('realestate_sample_preprocessed.xlsx')
# 数据集基本情况查看
print(df.shape)
print(df.dtypes)
print(df.isnull().sum())
print(df.head())
# 变量相关性矩阵
correlation_table = df.drop(columns='id').corr()
print(correlation_table)
# 对相关性矩阵进行可视化
import seaborn as sns
# 绘制相关性矩阵热力图
sns.heatmap(correlation_table)
plt.show()

[python数据处理] 共线性处理_第1张图片

# 查看共线的日间、夜间、夜间20-39岁人口与房价的关系
print(df[['average_price','daypop','nightpop','night20-39']].corr())

[python数据处理] 共线性处理_第2张图片

# 根据共线性矩阵,保留与房价相关性最高的日间人口,将夜间人口和20-39岁夜间人口进行比例处理
def age_percent(row):
    if row['nightpop'] == 0:
        return 0
    else:
        return row['night20-39']/row['nightpop']
df['per_a20_39'] = df.apply(age_percent,axis=1)
df = df.drop(columns=['nightpop','night20-39'])
# 再次查看相关性矩阵的热力图
correlation_table = df.corr()
sns.heatmap(correlation_table)

[python数据处理] 共线性处理_第3张图片

你可能感兴趣的:(python,数据处理,python)