3. 特征工程

在这一部分,我们将对数据进行 特征选择、特征转换、特征构造,并划分训练集和测试集,确保特征与分析目标的相关性和有效性。

3.1 处理类别型变量

数据集中包含许多类别型变量(如 MSZoning、Neighborhood)。由于机器学习算法无法直接处理字符串数据,我们需要进行编码转换。

方法选择

  • 独热编码(One-Hot Encoding, OHE):适用于无序类别(如 Neighborhood)。
  • 标签编码(Label Encoding):适用于有序类别(如 ExterQual)。
from sklearn.preprocessing import LabelEncoder

# 选取类别型变量
categorical_cols = df.select_dtypes(include=['object']).columns

# 对于有序类别变量,使用 Label Encoding
ordinal_features = ['ExterQual', 'ExterCond', 'BsmtQual', 'BsmtCond', 'HeatingQC', 'KitchenQual', 'FireplaceQu', 'GarageQual', 'GarageCond', 'PoolQC']

for col in ordinal_features:
    if col in df.columns:
        le = LabelEncoder()
        df[col] = le.fit_transform(df[col])

# 其余类别变量使用 One-Hot Encoding
df = pd.get_dummies(df, columns=[col for col in categorical_cols if col not in ordinal_features], drop_first=True)

# 显示转换后的数据
print("类别变量转换后数据形状:", df.shape)

3.2 处理偏态分布

SalePrice(目标变量)和某些数值型变量可能呈现右偏态(Skewed Distribution),需要进行对数变换(Log Transformation)。

检测偏态

from scipy.stats import skew

# 计算数值型变量的偏度
numeric_cols = df.select_dtypes(include=['number']).columns
skewed_features = df[numeric_cols].apply(lambda x: skew(x.dropna())).sort_values(ascending=False)

# 选出偏态特征(偏度大于 0.75)
high_skew = skewed_features[skewed_features > 0.75].index
print("偏态特征:", list(high_skew))

对数变换

# 对高度偏态的变量进行 Log(1+x) 变换
for col in high_skew:
    df[col] = np.log1p(df[col])

# 目标变量 SalePrice 也进行对数变换
df['SalePrice'] = np.log1p(df['SalePrice'])

3.3 选择相关特征

在前面相关性分析 中,我们发现某些特征对 SalePrice 影响较小,因此我们删除这些低相关性特征,以减少维度,提高模型效率。

选取与 SalePrice 相关性高的特征

# 计算相关性
correlation_matrix = df.corr()
top_features = correlation_matrix['SalePrice'].abs().sort_values(ascending=False)[1:21]  # 选择前 20 个相关性特征

# 保留这些特征
selected_features = list(top_features.index)
df_selected = df[selected_features + ['SalePrice']]  # 加入目标变量

print("选择的特征:", selected_features)
print("特征工程后数据形状:", df_selected.shape)

3.5 小结

  • 类别型变量转换:有序类别用Label Encoding,无序类别用One-Hot Encoding。
  • 处理偏态:对右偏数据 进行对数变换,确保数据分布均匀。
  • 特征选择:选出相关性最高的 20 个特征,删除冗余变量。
  • 数据标准化:确保所有特征在相同的尺度上,提高模型稳定性。
  • 数据集划分:80%训练集+ 20%测试集,为后续模型训练做好准备
© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容