如何发现数据集中哪些特征具有预测性?

我正在为这里提供的数据集开发一个机器学习算法。

数据集有26列。大部分数据似乎无关紧要。我如何有效且快速地确定哪些特征是有趣的——哪些特征可以告诉我一个给定的URL是短暂的还是永恒的(这是数据集中的因变量)?是否有智能的、程序化的Scikit-learn方法来做到这一点,还是仅仅是将每个特征与因变量(’label’,第26列)进行图形化对比,看看哪些特征有影响?

肯定有更好的方法,对吗?

编辑:我找到了一些分类器的代码——我如何打印出这里给每个特征的权重?

import numpy as npimport matplotlib.pyplot as plt  from sklearn import metrics,preprocessing,cross_validation  from sklearn.feature_extraction.text import TfidfVectorizer  import sklearn.linear_model as lm  import pandas as p  loadData = lambda f: np.genfromtxt(open(f,'r'), delimiter=' ')  print "loading data.."  traindata = list(np.array(p.read_table('train.tsv'))[:,2])  testdata = list(np.array(p.read_table('test.tsv'))[:,2])  y = np.array(p.read_table('train.tsv'))[:,-1]  tfv = TfidfVectorizer(min_df=3,  max_features=None, strip_accents='unicode',          analyzer='word',token_pattern=r'\w{1,}',ngram_range=(1, 2), use_idf=1,smooth_idf=1,sublinear_tf=1)  rd = lm.LogisticRegression(penalty='l2', dual=True, tol=0.0001,                              C=1, fit_intercept=True, intercept_scaling=1.0,                              class_weight=None, random_state=None)  X_all = traindata + testdata  lentrain = len(traindata)  print "fitting pipeline"  tfv.fit(X_all)  print "transforming data"  X_all = tfv.transform(X_all)  X = X_all[:lentrain]  X_test = X_all[lentrain:]  print "20 Fold CV Score: ", np.mean(cross_validation.cross_val_score(rd, X, y, cv=20, scoring='roc_auc'))  print "training on full data"  rd.fit(X,y)  pred = rd.predict_proba(X_test)[:,1]  testfile = p.read_csv('test.tsv', sep="\t", na_values=['?'], index_col=1)  pred_df = p.DataFrame(pred, index=testfile.index, columns=['label'])  pred_df.to_csv('benchmark.csv')  print "submission file created.."

回答:

许多已拟合的scikit-learn估计器都有一个属性feature_importances_(除了线性模型,它们称之为coef_),其中包含某种特征权重。通常情况下,权重越高,特征对最终预测的贡献就越大,这可以解释为这些特征更具预测性。(*)

这些属性包含NumPy数组,形状为(n_features,),适用于二元分类、回归和非线性模型,或者(n_features, n_classes),适用于多类线性模型。

请参阅文档分类示例,了解如何使用这些属性。

(*) 所有关于过拟合的常见警告都适用:在不好的模型中,错误的特征可能会获得更高的权重。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注