【发布时间】:2022-07-19 21:48:29
【问题描述】:
这是我大学作业的一部分,但我在网上找不到任何关于如何正确实施的资源。 我已经阅读了大量关于定义最优集合分割的指标(如熵、基尼等)的材料,因此我了解我们如何选择一个最优的特征值来将学习集分割成左右节点。
但是我完全不明白的是实现的复杂性,考虑到我们还必须选择最优特征,这意味着在每个节点上计算最优值需要 O(n^2),考虑到这是不好的真正的 ML 数据集的形状约为 10^2 x 10^6,这在计算成本方面确实很大。
我是否遗漏了某种可用于帮助降低复杂性的方法?
我目前有这个基线实现来选择最好的特性和价值来分割,但我真的想让它变得更好:
for f_idx in range(X_subset.shape[1]):
sorted_values = X_subset.iloc[:, f_idx].sort_values()
for v in sorted_values[self.min_samples_split - 1 : -self.min_samples_split + 1]:
y_left, y_right = self.make_split_only_y(f_idx, v, X_subset, y_subset)
if threshold is not None:
G = calc_g(y_subset, y_left, y_right)
if G < tr_G:
threshold = v
feature_idx = f_idx
tr_G = G
else:
threshold = v
feature_idx = f_idx
tr_G = G
return feature_idx, threshold
【问题讨论】:
标签: machine-learning decision-tree machine-learning-model