我正在研究大数据,我想找到重要的功能.因为我是一名生物学家,所以请原谅我缺乏的知识.
我的数据集有大约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_parameters中提供的alpha值范围,然后找到最佳值.您可以将效果标准从"f1_macro"更改为"f1_weighted"或其他指标.
要根据标签解决数据集的偏度,请使用SGDCassifier的class_weight参数并将其设置为" balance ".
要查找有助于类标签的前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"以使用规范化器来查看其对性能的影响,通常可以通过不同类型的特征规范化和样本规范化来进行一些操作.
注3:对于弹性网正则化,使用l1_ratio参数稍作一点.