我有一个数据集,其中包含7个数字属性和一个标称值(即类变量)。 我想知道如何才能将最好的属性用于预测类属性。 解决方案是通过每个属性找到最大的信息增益吗?
您是否只想要该属性的名称 ,或者您还想要此“最佳”属性的可量化指标(如t值)?
对于定性方法,您可以生成仅包含一个拆分,两个叶子的分类树。
例如,weka的“ diabetes.arff”样本数据集(n = 768),其结构与您的数据集类似(所有attribs均为数字,但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”是最重要的属性,因为它是为第一次拆分而选择的。 但这并不能告诉您多么重要。
对于更定量的方法,也许您可以使用(多项式)Logistic回归。 我对此不太熟悉,但是无论如何:
在Exlorer GUI工具中,选择“分类”>“功能”>“物流”。
运行模型。 比值比和系数可能会量化地包含您所需要的内容。 较低的优势比(但> 0.5)会更好/更显着,但我不确定。 也许在这里读到,别人回答这个问题 。
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 %
因此,您要问的问题属于特征选择的范围,更广泛地说是特征工程的范围。 在线上有很多关于此的文献,并且在线上肯定有很多关于如何做到这一点的博客/教程/资源。
为了给您提供一个通俗易懂的链接,这是一个博客,其中包含有关在Weka中进行特征选择的一些方法的教程 ,以及该博客对特征选择的一般介绍 。 正如knb的答案所指出的,自然有很多不同的方法。
为了提供简短的描述,有几种解决方法:您可以为每个功能分配分数(例如信息获取等),并用“不良”分数过滤掉特征; 您可以将查找最佳参数视为搜索问题,在其中您可以使用功能的不同子集并依次评估准确性; 并且您可以使用嵌入式方法,这种方法可以了解哪些功能在构建模型时最有助于准确性。 嵌入式方法的示例是诸如LASSO和ridge回归之类的正则化算法。