我正在研究可用数据集的机器学习算法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.."
答案 0 :(得分:7)
许多拟合的scikit-learn估算器都有一个属性feature_importances_
(线性模型除外,它称之为coef_
)包含某种特征权重。较高的权重通常意味着特征对最终预测的贡献更大,这可以解释为那些更具预测性的特征。(*)
这些属性包含NumPy数组,其形状为(n_features,)
,用于二元分类,回归和非线性模型,或(n_features, n_classes)
用于多类线性模型。
请参阅document classification example了解如何使用这些属性。
(*)所有关于过度拟合的常见警告都适用:在一个糟糕的模型中,错误的特征可能会获得更高的权重。