寻找变量和 class 变量之间的相关性

Finding a correlation between variable and class variable

我有一个数据集,其中包含 7 个数值属性和一个标称值,即 class 变量。我想知道如何找到可用于预测 class 属性的最佳属性。找到每个属性的最大信息增益是解决方案吗?

您只需要该属性的 名称,还是还需要该 "best" 属性的可量化指标(如 t 值)?

对于定性方法,您可以生成一棵只有一个分裂、两个叶子的class化树。

例如weka的"diabetes.arff"样本数据集(n=768),它和你的数据集有相似的结构(所有属性都是数字,但是class属性有只有 两个 个不同的分类结果),我可以将 minNumObj 参数设置为 200。这意味着:创建一个树,每个叶子中至少有 200 个实例。

java -cp $WEKA_JAR/weka.jar  weka.classifiers.trees.J48 -C 0.25 -M 200 -t data/diabetes.arff 

输出:

J48 pruned tree
------------------

plas <= 127: tested_negative (485.0/94.0)
plas > 127: tested_positive (283.0/109.0)

Number of Leaves  :     2

Size of the tree :  3


Time taken to build model: 0.11 seconds
Time taken to test model on training data: 0.04 seconds

=== Error on training data ===

Correctly Classified Instances         565               73.5677 %

这将创建一棵树,在 "plas" 属性上有一个拆分。就解释而言,这是有道理的,因为糖尿病患者的血浆中葡萄糖浓度确实升高。所以 "plas" 是最重要的属性,因为它是为第一次拆分选择的。但这并没有告诉你有多重要。

对于更定量的方法,也许您可​​以使用(多项式)逻辑回归。我不太熟悉这个,但无论如何:

在 Exlorer GUI 工具中,选择 "Classify" > 函数 > 逻辑。

运行 模型。比值比和系数可能以可量化的方式包含您需要的内容。较低的比值比(但 > 0.5)是 better/more 显着,但我不确定。也许在此处继续阅读,this answer 其他人的文章。

    java -cp $WEKA_JAR/weka.jar  weka.classifiers.functions.Logistic -R 1.0E-8 -M -1 -t data/diabetes.arff 

这是命令行输出

Options: -R 1.0E-8 -M -1 

Logistic Regression with ridge parameter of 1.0E-8
Coefficients...
                       Class
Variable     tested_negative
============================
preg                 -0.1232
plas                 -0.0352
pres                  0.0133
skin                 -0.0006
insu                  0.0012
mass                 -0.0897
pedi                 -0.9452
age                  -0.0149
Intercept             8.4047


Odds Ratios...
                       Class
Variable     tested_negative
============================
preg                  0.8841
plas                  0.9654
pres                  1.0134
skin                  0.9994
insu                  1.0012
mass                  0.9142
pedi                  0.3886
age                   0.9852

=== Error on training data ===

Correctly Classified Instances         601               78.2552 %
Incorrectly Classified Instances       167               21.7448 %

所以你问的问题属于特征选择领域,更广泛地说,特征工程。网上有很多关于这方面的文献,网上肯定有很多 blogs/tutorials/resources 如何做到这一点。

给大家一个好的link刚刚看完,这里有一个blog with a tutorial on some ways to do feature selection in Weka, and the same blog's general introduction on feature selection。正如 knb 的回答所指出的那样,自然有很多不同的方法。

不过,为了简短描述,有几种方法可以解决这个问题:您可以为每个特征(如信息增益等)分配一个分数,并过滤掉得分为 'bad' 的特征;您可以将寻找最佳参数视为一个搜索问题,您可以在其中获取不同的特征子集并依次评估准确性;你可以使用嵌入式方法,在构建模型时了解哪些特征对准确性贡献最大。嵌入式方法的示例是正则化算法,如 LASSO 和岭回归。