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












请登录后查看评论内容