【问题标题】:How can you discover what features in a dataset are predictive?您如何发现数据集中的哪些特征具有预测性?
【发布时间】:2014-03-25 04:02:04
【问题描述】:

我正在为here 可用的数据集开发机器学习算法。

有 26 列数据。大部分是没有意义的。我如何有效快速地确定哪些特征是有趣的——哪些特征以一种或另一种方式告诉我给定的 URL 是短暂的还是常绿的(这是数据集中的因变量)?是否有智能的、程序化的 scikit 学习这样做的方法,或者只是将每个特征与从属特征(“标签”,第 26 列)进行图形化,然后看看有什么影响?

肯定有比这更好的方法!

有人可以帮忙吗? :)

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

import numpy as np
import 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.."

【问题讨论】:

标签: python machine-learning artificial-intelligence scikit-learn feature-detection


【解决方案1】:

许多拟合的 scikit-learn 估计器具有包含某种特征权重的属性 feature_importances_(线性模型除外,称为 coef_)。较高的权重通常意味着特征对最终预测的贡献更大,这可以解释为这些特征更具预测性。(*)

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

请参阅document classification example 了解如何使用这些属性。

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

【讨论】:

  • 非常感谢您的回复。我在我的回复中添加了一些逻辑回归代码——我说得对吗?我可以打印 rd.feature_importances_ 并且它会给我一个列表,列出每个特征对分类器的影响程度或我是否误解了。抱歉,我还是机器学习和 Python 的初学者 :)
  • @SimonKiely 逻辑回归是线性模型,所以你需要coef_。请阅读我链接到的示例脚本。
猜你喜欢
  • 2018-08-19
  • 1970-01-01
  • 2021-08-05
  • 2017-04-08
  • 2019-06-29
  • 1970-01-01
  • 2022-06-16
  • 2014-10-16
  • 2020-10-18
相关资源
最近更新 更多