0

假设我有一个包含 10 个输入特征的输入特征向量,每个输入特征的数量级约为1E-7

当我使用log这些输入特征运行线性回归时,我得到的R^2值约为0.98

但是,如果我1E-2在运行上述拟合之前添加到每个输入特征,我会R^2得到0.5616.

问题是我不会先验地知道添加到我的输入特征的常数是1E-2,所以我不能每次都简单地减去那个数量。

有没有一种通用的方法来纠正添加到我的输入特征集中的大型未知常量?

这是一个示例输入文件: http ://stanford.edu/~hq6/13

这是一个相应的输出文件: http ://stanford.edu/~hq6/15

下面是一些用于训练的代码:

input_features = read.csv('InputFeatures.csv', header=F)

# Adding constant error term to all input features
input_features = input_features + 1E-2
# How can we correct for this constant if we do not know what the constant is beforehand?

input_features[input_features <= 0] = 1E-10
input_features = log(input_features)
output = read.csv('Output.csv', header=F)

full_data = data.frame(input_features,  output)
summary(lm(V1.1 ~ ., data=full_data))

当这段代码在没有行的情况下运行时input_features = input_features + 1E-2,我从输出R-squared中得到一个近似值。0.98summary

当这条线被放入时,则R-squared小于0.5

4

2 回答 2

1

所以你建议你的数据集适合y = A + B*exp(C*x)。为什么不使用nls或其他非线性拟合工具进行直接拟合?

如果您希望对双方的对数进行线性拟合,那么从对数规则(例如 log(ab) = log(a) + log(b) )中应该很明显,您无法将两者的影响分开总和。

于 2013-10-31T11:38:11.880 回答
0

R^10 的线性回归导致 11 个实数是 10 维超平面的系数。从您的帖子看来,您似乎有一个(“...的值”)或最多两个(“R^2”),这似乎仍然是错误的。

或者也许 R^2 你的意思是残差错误?

线性回归本身对于添加常数是不变的,只要它不会导致一些数值不精确并且您将其添加到所有特征中。如果你只添加一个,那么很明显它会改变结果 - 因为这个维度可能变得更重要/更不重要(取决于常数的符号)。为了使其对此类操作保持不变,您可以标准化您的数据(通过线性缩放到区间或标准化为 mean=0 和 std=1)

于 2013-10-31T06:40:22.227 回答