feature-engineering-book核心组件:kmeans_featurizer.py源码实现与原理分析

【免费下载链接】feature-engineering-book 【免费下载链接】feature-engineering-book 项目地址: https://gitcode.com/gh_mirrors/fe/feature-engineering-book

feature-engineering-book是一个专注于特征工程的开源项目,其中的kmeans_featurizer.py是实现基于K-means聚类的特征工程工具,能够将数值数据转换为聚类成员特征,为机器学习模型提供更有价值的输入特征。

核心功能解析

KMeansFeaturizer类是kmeans_featurizer.py的核心,它通过K-means聚类算法将输入数据转换为聚类成员特征。这个工具特别之处在于,当提供目标变量时,会对其进行缩放后作为K-means聚类的输入,从而得到既考虑数据相似性又尊重分类边界的聚类结果。

主要参数说明

  • k:聚类数量,默认为100,决定了最终生成的特征维度
  • target_scale:目标变量的缩放因子,默认为5.0,值越大聚类结果越尊重分类边界
  • random_state:随机数生成器种子,确保结果可复现

源码实现分析

初始化方法

def __init__(self, k=100, target_scale=5.0, random_state=None):
    self.k = k
    self.target_scale = target_scale
    self.random_state = random_state
    self.cluster_encoder = OneHotEncoder().fit(np.array(range(k)).reshape(-1,1))

初始化方法设置了主要参数,并创建了一个OneHotEncoder实例用于将聚类ID转换为独热编码特征。

核心拟合逻辑

拟合方法根据是否提供目标变量y,采用不同的聚类策略:

  1. 无目标变量情况:直接对输入数据X执行K-means聚类
  2. 有目标变量情况
    • 将目标变量缩放后与输入数据合并
    • 先在包含目标变量的数据上预训练K-means模型
    • 使用预训练得到的中心点,在原始输入空间上再执行一次K-means迭代

这种处理方式使得聚类结果不仅考虑数据本身的相似性,还能更好地反映数据的分类边界。

特征转换过程

transform方法将输入数据映射到最近的聚类中心,并通过OneHotEncoder将聚类ID转换为独热编码特征:

def transform(self, X, y=None):
    clusters = self.km_model_.predict(X)
    return self.cluster_encoder.transform(clusters.reshape(-1,1))

实际应用示例

在项目的07.03-05_K-means_featurization.ipynb文件中,展示了KMeansFeaturizer的实际应用:

kmf_hint = KMeansFeaturizer(k=100, target_scale=10, random_state=seed).fit(training_data, training_labels)
kmf_no_hint = KMeansFeaturizer(k=100, target_scale=0, random_state=seed).fit(training_data, training_labels)

这段代码展示了两种使用方式:

  • kmf_hint:使用目标变量作为聚类提示(target_scale=10)
  • kmf_no_hint:不使用目标变量(target_scale=0),相当于标准K-means聚类

使用步骤指南

  1. 克隆项目仓库:
git clone https://gitcode.com/gh_mirrors/fe/feature-engineering-book
  1. 导入KMeansFeaturizer类:
from kmeans_featurizer import KMeansFeaturizer
  1. 创建实例并拟合数据:
featurizer = KMeansFeaturizer(k=50, target_scale=5.0, random_state=42)
features = featurizer.fit_transform(X_train, y_train)
  1. 将生成的特征用于模型训练:
model = RandomForestClassifier()
model.fit(features, y_train)

总结

kmeans_featurizer.py提供了一种将聚类分析与特征工程相结合的创新方法,特别适合处理复杂的数值型数据。通过灵活调整target_scale参数,可以在数据相似性和分类边界之间取得平衡,为机器学习模型提供更具区分度的输入特征。无论是用于分类问题还是回归任务,这个工具都能有效提升特征表达能力,值得在实际项目中尝试应用。

【免费下载链接】feature-engineering-book 【免费下载链接】feature-engineering-book 项目地址: https://gitcode.com/gh_mirrors/fe/feature-engineering-book

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐