Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ffm_model.setTXTModel 保存的 model.txt模型中参数的疑问. #263

Closed
fly12357 opened this issue May 29, 2019 · 7 comments
Closed

ffm_model.setTXTModel 保存的 model.txt模型中参数的疑问. #263

fly12357 opened this issue May 29, 2019 · 7 comments

Comments

@fly12357
Copy link

例如: v_1025805_41 中的 1025805 和输入的特征中的特征id是对应的吗?

如果输入样本中没有出现的feature id 就应该不计算在内吧~~那我输入的feature id 的编码岂不是与model.txt中的 id 会有差别吗? (输入的样本的feature id会考虑全部的feature,有部分可能不会在样本中出现)

举个例子:
输入的样本中特征编码(libffm格式) 1 1:1:1 2:3:1
0 1:1:1 2:1:1
如果field2 中的特征有 1, 2, 3三个
但是样本中只出现了 1,3
那么model.txt中对应的 v_featureid_fields 会考虑 fields2中的 2 特征?

@etveritas
Copy link
Collaborator

etveritas commented May 29, 2019

@fly12357 我认为ID是对应的。当你输入样本确定之后,程序会根据你输入样本中的特征ID最大值和域ID最大值来确定你的特征和域的个数,也就是我们假设这两个值是从0到最大值连续的,模型会根据最大值初始化参数。对于样本中实际存在的特征ID(或域ID)且不大于最大值的数据,会进行计算并更新对应的参数,如果某个ID在全部样本中都没有出现,则参数值为初始化时的值。

@fly12357
Copy link
Author

@fly12357 我认为ID是对应的。当你输入样本确定之后,程序会根据你输入样本中的特征ID最大值和域ID最大值来确定你的特征和域的个数,也就是我们假设这两个值是从0到最大值连续的,模型会根据最大值初始化参数。对于样本中实际存在的特征ID(或域ID)且不大于最大值的数据,会进行计算并更新对应的参数,如果某个ID在全部样本中都没有出现,则参数值为初始化时的值。

的确,我验证了一下,应该是取的最大值. 但是有一种情况会出现问题啊.

如果feature id 的最大值是所有特征的中间部分, 那么后边没出现的特征不就都丢失了么....(应该是当做未知id处理了吧)

例如: 接着上面的那个例子, 如果fields共计5个特征维度, 那么样本中最大只出现3的话, 4,5这两个特征维度就会没有了. (不过对计算没啥影响哈~)

感谢解答~

@fly12357
Copy link
Author

@fly12357 我认为ID是对应的。当你输入样本确定之后,程序会根据你输入样本中的特征ID最大值和域ID最大值来确定你的特征和域的个数,也就是我们假设这两个值是从0到最大值连续的,模型会根据最大值初始化参数。对于样本中实际存在的特征ID(或域ID)且不大于最大值的数据,会进行计算并更新对应的参数,如果某个ID在全部样本中都没有出现,则参数值为初始化时的值。

还有个问题~

可否给个变量初始化的接口, 因为, 可以用word2vec对feature的嵌入向量进行编码, 从而解决样本中没有出现的特征的问题.

@etveritas
Copy link
Collaborator

还有个问题~

可否给个变量初始化的接口, 因为, 可以用word2vec对feature的嵌入向量进行编码, 从而解决样本中没有出现的特征的问题.

如果样本中没有某个特征,我们就不根据它学习,预测时也不会用到它的。

@fly12357
Copy link
Author

还有个问题~
可否给个变量初始化的接口, 因为, 可以用word2vec对feature的嵌入向量进行编码, 从而解决样本中没有出现的特征的问题.

如果样本中没有某个特征,我们就不根据它学习,预测时也不会用到它的。

如果某个 featureid 处于 所有featureid 的最大值与最小值之间, 并且其在训练样本中没有出现, 预测的时候不也得按照初始值(应该是随机值)进行预测吗?

@etveritas
Copy link
Collaborator

如果某个 featureid 处于 所有featureid 的最大值与最小值之间, 并且其在训练样本中没有出现, 预测的时候不也得按照初始值(应该是随机值)进行预测吗?

初始化的w和b都是0

@fly12357
Copy link
Author

如果某个 featureid 处于 所有featureid 的最大值与最小值之间, 并且其在训练样本中没有出现, 预测的时候不也得按照初始值(应该是随机值)进行预测吗?

初始化的w和b都是0

了解~ 非常感谢~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants