如何生成具备不同目标范围或模式的多目标回归数据集
多目标差异化回归数据集构造方案
核心逻辑很简单:不需要完全依赖make_regression直接生成多目标标签,手动为两个目标分别构造「线性关联规则」和「非线性关联规则」即可,和共用特征集拼接后就符合你的要求。
1. 生成共用特征集
先构造和你示例参数一致的特征集:
import numpy as np from sklearn.datasets import make_regression # 生成5000样本、10个特征的共用特征集 X, _ = make_regression(n_samples=5000, n_features=10, n_informative=7, random_state=1, noise=0)
2. 构造适配线性模型的目标y1
y1只保留和特征的纯线性加权关系,加少量噪声,刚好适配Linear、Lasso、Ridge这类线性模型:
# y1为纯线性关联,无任何非线性规则 y1 = 3.2 * X[:,0] + 1.5 * X[:,2] - 2.7 * X[:,3] + 4.1 * X[:,5] + np.random.normal(0, 5, size=len(X))
这个目标下线性模型的拟合效果和非线性模型没有明显差距,甚至泛化性更好
3. 构造适配非线性模型的目标y2
给y2加入大量线性模型无法捕捉的非线性规则,比如高阶项、特征交叉、三角函数、分段逻辑:
# y2包含多种非线性关联规则 y2 = 2.1 * np.square(X[:,1]) + 1.8 * np.sin(X[:,4]) + X[:,6] * X[:,7] + np.where(X[:,8] > 0, 3 * X[:,8], -2 * X[:,8]) + np.random.normal(0, 4, size=len(X))
这个目标下线性模型拟合R²通常不到0.4,RF、SVR、KNN的拟合R²可以达到0.9以上,差异非常明显
4. 合并为标准多目标数据集
和make_regression的输出格式完全对齐:
# 合并为shape=(5000, 2)的多目标标签矩阵 y = np.column_stack([y1, y2])
内容的提问来源于stack exchange,提问作者Opps_0
相关产品推荐
相关产品推荐

