Alexey,我还有一个关于你的筛选预测器的函数的问题--它的返回值应该有什么区间?我在我的数据上运行了那个随机输入 的健身函数(fitness_f(runif(predictor_number, min = 0, max = 1))),看到的结果是从0到0,03。我在代码中还看到,如果出现错误(零输入),函数将返回0。这里有问题,GenSA试图使结果最小化,也就是说,在最后GenSA将只是得到零输入并停止。也许,我们应该改变健身函数结果的符号,使GenSA的作用方向相反? 如果健身函数在优化的某个阶段开始返回负数,而且越低越好--那么现在一切都很好。
Alexey,我对你的筛选预测器的函数还有一个问题--它的返回值应该是什么区间?我在我的数据上运行了那个随机输入 的健身函数(fitness_f(runif(predictor_number, min = 0, max = 1))),看到的结果是从0到0,03。我在代码中还看到,如果出现错误(零输入),函数将返回0。这里有问题,GenSA试图使结果最小化,也就是说,在最后GenSA将只是得到零输入并停止。也许,我们应该改变健身函数结果的符号,使GenSA的作用方向相反? 如果健身函数在优化的某个阶段开始返回负数,而且越低越好--那么现在一切都很好。
这是个好问题。你想清楚了。
我正在写一篇关于这种方法的文章,这里是一个摘录。
基于修正的相互信息和随机搜索的预测器子集的算法框图。
a) 以已知方式之一对数据集进行分类。
b) 评估数据集的参数,如行数、预测器、预测器的平均水平数(如果它们有不同的水平数),并根据这些数据计算出最终子集中预测器的 "最佳数量"。
c) 用均匀分布在[0, 1]范围内的随机数初始化一个数字类型的向量,并将向量值的下限(0)和上限(1)的边界分配给SA函数的参数。
Alexey,我还有一个关于你的筛选预测器的函数的问题--它的返回值应该有什么区间?我在我的数据上运行了那个随机输入 的健身函数(fitness_f(runif(predictor_number, min = 0, max = 1))),看到的结果是从0到0,03。我在代码中还看到,如果出现错误(零输入),函数将返回0。这里有问题,GenSA试图使结果最小化,也就是说,在最后GenSA将只是得到零输入并停止。也许,我们应该改变健身函数结果的符号,使GenSA的作用方向相反?
如果健身函数在优化的某个阶段开始返回负数,而且越低越好--那么现在一切都很好。
Alexey,我对你的筛选预测器的函数还有一个问题--它的返回值应该是什么区间?我在我的数据上运行了那个随机输入 的健身函数(fitness_f(runif(predictor_number, min = 0, max = 1))),看到的结果是从0到0,03。我在代码中还看到,如果出现错误(零输入),函数将返回0。这里有问题,GenSA试图使结果最小化,也就是说,在最后GenSA将只是得到零输入并停止。也许,我们应该改变健身函数结果的符号,使GenSA的作用方向相反?
如果健身函数在优化的某个阶段开始返回负数,而且越低越好--那么现在一切都很好。
基于修正的相互信息和随机搜索的预测器子集的算法框图。
b "点需要澄清。变量的最佳数量是一个条件值,用公式计算。
直觉是, 考虑到输入变量的独立性假设,一个变量的平均水平数必须提高到所需的功率,以获得唯一互动水平的总数,使它们中的每一个平均至少有n个观察值集中,其中n被认为是100。
我们不能有太多的输入变量和太多的水平,因为对输入水平的观察频率的保守估计会太小,无法给出关于输出变量对输入水平集合的依赖性的统计推断。
通过设置阈值,超过该阈值的输入变量数的向量值将被转换为1(变量索引包含标志),我们进行概率计算。
其本质是,我们设定最大概率值来选择计算出的最佳输入数量。而这个逻辑是通过应用二项分布来检验的。
例如,让我们来看看我们的数据:整个数据集的一半,用于训练。
我们有17,973行,12个预测因子,每个有5个水平。应用上述公式,我们得到最佳的预测器数量是3226个。
应用将一个预测器纳入集合的阈值公式,我们得到0.731。
在二项分布上,最可能得到的选定变量的数量是多少?
最多是3次观察。准确地说,5 ^ 3,226将给我们提供178个级别,这将容纳平均每个100个观察。
是的,我发现了一个具有负健身值的预测器子集。有很多预测因子,有几千个,我把gensa限制在只有2次迭代,我花了8个小时:)。健身函数的结果是6%。在用nnet对这些预测器进行前沿测试时,我得到了45%的误差。这不多,我不认为该EA会有利润。我又把迭代次数限制为10次,以找到一个更好的结果,运行它,已经等了24小时,希望gensa能完成。我得试试遗传学(GA库),它在多线程下工作会更快(GA最小化而不是最大化结果,即GA的健身函数结果应该改变其符号)。我将继续进行试验。
我读过关于主成分模型的各种文章,并试图教导该模型不仅要测量R^2并通过选择预测因子 使其最大化,还要在前沿测试数据上测试该模型。它的出现有点模棱两可。一方面,我通过去除相关的预测因子对来提高模型的R^2(来自bibiloteka caret的函数findCorrelation),但事实证明,当在前沿测试数据上测试该模型时,R^2会下降。奇迹并没有发生,PCA模型也被重新训练。我想尝试一种更复杂的预测器估计--将训练样本分成两份--用于适当的训练和验证,训练PCA模型,然后立即对验证样本进行测试,返回最小R^2作为最终结果。如果用这样的函数来评估一组预测器,并使这个值最大化,那么就会找到那些在训练和新数据上有良好效果的预测器组。我们需要检查它。
另外,我一定是误解了本主题中关于PCA的第一篇文章的文字。它是说必须选择描述95%变化的成分数量,我以为他们说的是目标变量的预测准确性。但事实并非如此,主成分的构建根本不需要目标变量,95%的准确率是用这些非常成分来描述原始数据的准确程度。而预测的准确性与此完全没有关系。
是的,我发现了一个具有负健身值的预测器子集。有很多预测因子,有几千个,我把gensa限制在只有2次迭代,我花了8个小时:)。健身函数的结果是6%。在用nnet对这些预测器进行前沿测试时,我得到了45%的误差。这不多,我不认为该EA会有利润。我又把迭代次数限制为10次,以找到一个更好的结果,运行它,已经等了24小时,希望gensa能完成。我得试试遗传学(GA库),它在多线程下工作会更快(GA最小化而不是最大化结果,即GA的健身函数的结果应该改变其符号)。我将进行更多的实验。
我读过关于主成分模型的各种文章,不仅尝试训练模型来测量R^2,并通过选择预测因子来最大化它,而且还尝试在前沿测试数据上真正测试模型。它的出现有点模棱两可。一方面,我通过去除相关的预测因子对来提高模型的R^2(来自bibiloteka caret的函数findCorrelation),但事实证明,当在前沿测试数据上测试该模型时,R^2会下降。奇迹并没有发生,PCA模型也被重新训练。我想尝试一种更复杂的预测器估计--将训练样本分成两份--用于适当的训练和验证,训练PCA模型,然后立即对验证样本进行测试,返回最小R^2作为最终结果。如果用这样的函数来评估一组预测器并使该值最大化,那么就会找到那些在训练和新数据上有良好效果的预测器组。我们将不得不检查。
另外,我一定是把这个主题中关于PCA的第一篇文章的文字搞错了。那里说,成分的数量应该被选择来描述95%的变化,我以为他们说的是目标变量预测的准确性。但事实并非如此,主成分的构建根本不需要目标变量,95%的准确率是用这些非常成分来描述原始数据的准确程度。而预测的准确性与此完全没有关系。
是的,事实证明,你没有得到它。
PCA可以作为一个独立的工具来应用,但这篇文章没有讨论这个问题。
所讨论的是如何从一些大的预测器集合中过滤掉噪音。
根据我的理解,这是按以下步骤进行的。
1.Y-意识。这就是根据目标变量对预测器进行缩放
2.使用PCA算法,对一组预测因子进行排序,取能解释95%方差的部分。
2.或者这样(我自己也没弄明白),使用PCA算法,通过将原来的预测因子乘以计算出来的系数(加载),构建一个新的预测因子集。这一套是订购的。我们在这些新的向量中选择尽可能多的解释95%的变异。
PS。
让我们去看看出版物,Y-aware是噪声预测器过滤领域的新窥视者。
成功
2.使用PCA算法,对预测因子集进行排序,取能解释95%方差的部分。
这一点我还没有搞清楚。(我现在只写y-aware的方法,以免与其他方法混淆)。文章本身在这里:http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/
在代码"princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)"之后有一个情况:数据被读取,按Y缩放,PC组件被建立。这个函数并不限制组件的数量--有多少个预测器就有多少个。首先要做的是只选择其中的一部分(建议足以描述95%的变化)。在文章本身中,作者看了成分的SDV图(一些未指定的变异),并说2或5就足够了,因为它们在图中很突出。我不知道为什么没有什么突出的东西,图表是平滑地递减的。
有一个SDV表,其中的条目数等于组件的数量。是否可以计算出从中抽取多少个成分?所有数字的总和不一定限于1,我见过6的总和,可能还有更多。
我还没有想明白。(我现在只写y-aware的方法,以免与其他方法混淆)。文章本身在这里:http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/
在代码"princ <- prcomp(dmTrain, center = FALSE, scale. = FALSE)"之后,我们得到了这样的情况:数据被读取,按Y缩放,PC组件被构建。这个函数并不限制组件的数量--有多少个预测器就有多少个。首先要做的是只选择其中的一部分(建议足以描述95%的变化)。在文章本身中,作者看了成分的SDV图(一些未指定的变异),并说2或5就足够了,因为它们在图中很突出。我不知道为什么没有什么突出的东西,图表是平滑地递减的。
有一个SDV表,其中的条目数等于组件的数量。是否可以计算出从中抽取多少个成分?所有数字的总和不一定限于1,我见过6的总和,可能还有更多。
我运行拨浪鼓,得到三张桌子。
最后一栏说,如果你只取PC1,它将解释0.9761的变异性(累积比例),如果你取两个成分--PC1和PC2,它将解释0.99996等等。
(我不知道如何插入表格)
组件的重要性。
PC1 PC2 PC3 PC4 PC5
标准差 2.2092 0.34555 0.01057 0.008382 0.004236
方差的比例 0.9761 0.02388 0.00002 0.000010 0.000000
累计比例 0.9761 0.99996 0.99998 1.000000 1.000000
找这个表很久了,终于在摘要中找到了。其实最明显的地方就是:), 谢谢你的展示。当某些东西在摘要中,但不在对象属性中时,就是这种情况。
summary(princ)$importance[3,]
事实证明,这篇文章有一个续集,专门讨论组件选择的问题,有一些针对Y-aware的特殊解决方案。还没有试过。
http://www.win-vector.com/blog/2016/05/pcr_part3_pickk/
找这个表很久了,终于在摘要中找到了。其实最明显的地方就是:), 谢谢你的展示。当某些东西在摘要中,但不在对象属性中时,就是这种情况。
事实证明,这篇文章有一个续集,专门讨论组件选择的问题,有一些针对Y-aware的特殊解决方案。还没有试过。
http://www.win-vector.com/blog/2016/05/pcr_part3_pickk/
是的,我发现了一个具有负健身值的预测器子集。有很多预测因子,有几千个,我把gensa限制在只有2次迭代,我花了8个小时:)。健身函数的结果是6%。在用nnet对这些预测器进行前沿测试时,我得到了45%的误差。这不多,我不认为该EA会有利润。我又把迭代次数限制为10次,以找到一个更好的结果,运行它,已经等了24小时,希望gensa能完成。我得试试遗传学(GA库),它在多线程下工作会更快(GA最小化而不是最大化结果,即GA的健身函数的结果应该改变其符号)。我将进行更多的实验。
我阅读了关于主成分模型的各种文章,现在我不仅尝试训练模型来测量R^2,并通过选择预测因子使其最大化,而且还尝试在前沿测试数据上真正测试模型。它的出现有点模棱两可。一方面,我通过去除相关的预测因子对来提高模型的R^2(来自bibiloteka caret的函数findCorrelation),但事实证明,当在前沿测试数据上测试该模型时,R^2会下降。奇迹并没有发生,PCA模型也被重新训练。我想尝试一种更复杂的预测器估计--将训练样本分成两份--用于适当的训练和验证,训练PCA模型,然后立即对验证样本进行测试,返回最小R^2作为最终结果。如果用这样的函数来评估一组预测器,并使这个值最大化,那么就会找到那些在训练和新数据上有良好效果的预测器组。我们将不得不检查。
另外,我一定是把这个主题中关于PCA的第一篇文章的文字搞错了。那里说,成分的数量应该被选择来描述95%的变化,我以为他们说的是目标变量预测的准确性。但事实并非如此,主成分的构建根本不需要目标变量,95%的准确率是用这些非常成分来描述原始数据的准确程度。而预测的准确性与此完全没有关系。