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

入选变量数 #2

Open
kittykwy opened this issue Jul 13, 2018 · 8 comments
Open

入选变量数 #2

kittykwy opened this issue Jul 13, 2018 · 8 comments

Comments

@kittykwy
Copy link

你好,看了你之前的方差以及卡方等选择变量方法,可以设置入选变量数,我自己也实现了。
想问下你,这个遗传算法,在哪儿可以设置入选变量数,或者选择训练的变量数,可以像随机森林一样,随机抽一部分变量训练。
我自己的样本有155个变量(不包含target),结果训练处的最佳组合就155个变量,AUC为1
想问下,我想设置下我的最终入选变量数为<20,怎么设置。
因为我的目的是做评分卡,变量太多了

@rogeroyer
Copy link
Owner

因为遗传算法里面有随机因子,所以没办法控制输出变量个数除非修改内部函数来强制约束,不过你可以将self.columns里面的变量设置少一点(35维左右)应该是可以控制输出变量在20维以内,因为算法只能从self.columns里面的特征进行选择,所以你可以把你认为比较重要的那些变量放进去试试。我觉得遗传算法是为了选择出一个好的特征组合而并不一定是最有区分度的特征。
关于AUC为1的情况,想请问你self.columns这个list是怎样的,这个list里面第一个元素应该是标签(target),其它元素是放特征。可以看看这个Issue里面的讨论或许对你有用

@kittykwy
Copy link
Author

我明白了,对于变量少时,可以用遗传算法选最优组合,我的第一个变量时target,谢谢你的回答,代码写的很好!还有想问下,里面的这个参数,aGeneLenght (基因长度),可不可以理解为第一次,进入遗传算法的,关键变量的数量少一点,比如我设置 aGeneLenght =len(self.columns)*0.5,是不是最后出来的最优组合变量就会少一点,因为第一步筛选的时候只会选择一半的变量

@rogeroyer
Copy link
Owner

aGeneLenght是基因长度,取决于self.columns的长度,如果让aGeneLenght =len(self.columns)*0.5的话基因长度就改变了,那么self.columns里面的变量就表示不完全,这样是不可行的。

@kittykwy
Copy link
Author

明白,谢谢你,提供的代码,和思路讲解

@jjxsecurity
Copy link

你好,只能用于二分类的特征选择吗?

@rogeroyer
Copy link
Owner

可以进行多分类,需要修改下代码文件Feature_selection_genetic_algorithm.py 中的auc_score函数,评测指标要求越大越好。

@vantree
Copy link

vantree commented Nov 27, 2020

你好,请问我是否可以通过控制initPopulation函数里随机产生gene中0和1的比例来控制最终的入选变量数?

@rogeroyer
Copy link
Owner

应该不行,这控制不了变异过程

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

4 participants