在二进制分类中使用Lasso回归查找最佳特征

我正在处理大数据,我想找到重要的功能.

因为我是一名生物学家,所以请原谅我缺乏的知识.

我的数据集有大约5000个属性和500个样本,它们具有二进制类0和1.此外,数据集有偏差 – 样本大约400 0和100 1.
我想找到一些在决定课程时影响最大的特征.

  A1   A2   A3  ... Gn Class
S1    1.0  0.8 -0.1 ... 1.0 0 
S2    0.8  0.4  0.9 ... 1.0 0
S3   -1.0 -0.5 -0.8 ... 1.0 1
...

当我从前一个问题得到一些建议时,我试图找到属性系数高的重要特征,使用L1惩罚使用Lasso回归,因为它使得不重要特征的得分为0.

我正在使用scikit-learn库进行这项工作.

所以,我的问题是这样的.

>我可以使用Lasso回归来实现有偏见的二元类吗?如果不是,使用Logistic回归是否是一个很好的解决方案,尽管它不使用L1惩罚?
>如何使用LassoCV找到alpha的最佳值?该文件称LassoCV支持它,但我找不到该功能.
>这种分类还有其他好方法吗?

非常感谢你.

最佳答案 您应该使用分类器而不是回归器,因此SVM或Logistic回归都可以完成这项工作.相反,您可以使用SGDClassifier,您可以将损耗参数设置为Logistic回归的“log”或SVM的“hinge”.

在SGDClassifier中,您可以将惩罚设置为“l1”,“l2”或“elasticnet”中的任意一个,即两者的组合.

你可以通过循环不同的alpha值并在验证集上评估性能来找到’alpha’的最大值,或者你可以使用gridsearchcv:

tuned_parameters = {'alpha': [10 ** a for a in range(-6, -2)]}
clf = GridSearchCV(SGDClassifier(loss='hinge', penalty='elasticnet',l1_ratio=0.15, n_iter=5, shuffle=True, verbose=False, n_jobs=10, average=False, class_weight='balanced')
                  , tuned_parameters, cv=10, scoring='f1_macro')

#now clf is the best classifier found given the search space
clf.fit(X_train, Y_train)
#you can find the best alpha here
print(clf.best_params_)    

这样,搜索您在tuned_pa​​rameters中提供的alpha值范围,然后找到最佳值.您可以将效果标准从“f1_macro”更改为“f1_weighted”或其他指标.

要根据标签解决数据集的偏度,请使用class_weight参数SGDCassifier并将其设置为“balanced”.

要查找有助于类标签的前10个功能,您可以找到以下索引:

for i in range(0, clf.best_estimator_.coef_.shape[0]):
    top10 = np.argsort(clf.best_estimator_.coef_[i])[-10:]

注1:将数据集的某些部分保留为验证/测试集并在找到最佳模型后对剩余数据进行评估总是好的.

注2:通过将行或列划分为行或列的“l2”或“l1”以使用normalizer查看其对性能的影响,通常可以使用不同类型的特征规范化和样本规范化进行一点点处理.

注3:对于弹性网正则化,使用l1_ratio参数稍作一点.

点赞