weka算法介绍

RWeka (http://cran.r-project.org/web/packages/RWeka/index.html) : 
1) 数据输入和输出 
WOW():查看Weka函数的参数。 
Weka_control():设置Weka函数的参数。 
read.arff():读Weka Attribute-Relation File Format (ARFF)格式的数据。 
write.arff:将数据写入Weka Attribute-Relation File Format (ARFF)格式的文件。 
2) 数据预处理 
Normalize():无监督的标准化连续性数据。 
Discretize():用MDL(Minimum Description Length)方法,有监督的离散化连续性数值数据。 
3) 分类和回归 
IBk():k最近邻分类 
LBR():naive Bayes法分类 
J48():C4.5决策树算法(决策树在分析各个属性时,是彻底独立的)。 
LMT():组合树结构和Logistic回归模型,每一个叶子节点是一个Logistic回归模型,准确性比单独的决策树和Logistic回归方法要好。 
M5P():M5 模型数算法,组合了树结构和线性回归模型,每一个叶子节点是一个线性回归模型,于是可用于连续数据的回归。 
DecisionStump():单层决策树算法,常被做为boosting的基本学习器。 
SMO():支持向量机分类 
AdaBoostM1():Adaboost M1方法。-W参数指定弱学习器的算法。 
Bagging():经过从原始数据取样(用替换方法),建立多个模型。 
LogitBoost():弱学习器采用了对数回归方法,学习到的是实数值 
MultiBoostAB():AdaBoost 方法的改进,可看做AdaBoost 和 “wagging”的组合。 
Stacking():用于不一样的基本分类器集成的算法。 
LinearRegression():创建合适的线性回归模型。 
Logistic():创建logistic回归模型。 
JRip():一种规则学习方法。 
M5Rules():用M5方法产生回归问题的决策规则。 
OneR():简单的1-R分类法。 
PART():产生PART决策规则。 
4) 聚类 
Cobweb():这是种基于模型方法,它假设每一个聚类的模型并发现适合相应模型的数据。不适合对大数据库进行聚类处理。 
FarthestFirst():快速的近似的k均值聚类算法 
SimpleKMeans():k均值聚类算法 
XMeans():改进的k均值法,能自动决定类别数 
DBScan():基于密度的聚类方法,它根据对象周围的密度不断增加聚类。它能从含有噪声的空间数据库中发现任意形状的聚类。此方法将一个聚类定义为一组“密度链接”的点集。 
5)关联规则 
Apriori():Apriori是关联规则领域里最具影响力的基础算法,是一种广度优先算法,经过屡次扫描数据库来获取支持度大于最小支持度的频繁项集。它的理论基础是频繁项集的两个单调性原则:频繁项集的任一子集必定是频繁的;非频繁项集的任一超集必定是非频繁的。在海量数据的状况下,Apriori 算法的时间和空间成本很是高。 
Tertius():Tertius算法。 
6)预测和评估: 
predict():根据分类或聚类结果预测新数据的类别 
table():比较两个因子对象 
evaluate_Weka_classifier():评估模型的执行,如:TP Rate,FP Rate,Precision,Recall,F-Measure。html

 

 

3. 分类与回归 
背景知识 
WEKA把分类(Classification)和回归(Regression)都放在“Classify”选项卡中,这是有缘由的。 
在 这两个任务中,都有一个目标属性(输出变量)。咱们但愿根据一个样本(WEKA中称做实例)的一组特征(输入变量),对目标进行预测。为了实现这一目的, 咱们须要有一个训练数据集,这个数据集中每一个实例的输入和输出都是已知的。观察训练集中的实例,能够创建起预测的模型。有了这个模型,咱们就能够新的输出 未知的实例进行预测了。衡量模型的好坏就在于预测的准确程度。 
在WEKA中,待预测的目标(输出)被称做Class属性,这应该是来自分类任务 的“类”。通常的,若Class属性是分类型时咱们的任务才叫分类,Class属性是数值型时咱们的任务叫回归。 

选择算法 
这一节中,咱们使用C4.5决策树算法对bank-data创建起分类模 型。 
咱们来看原来的“
bank-data.csv”文件。“ID”属性确定是不须要的。因为C4.5算法能够处理数值型的属性,我 们不用像前面用关联规则那样把每一个变量都离散化成分类型。尽管如此,咱们仍是把“Children”属性转换成分类型的两个值“YES”和“NO”。另 外,咱们的训练集仅取原来数据集实例的一半;而从另一半中抽出若干条做为待预测的实例,它们的“pep”属性都设为缺失值。通过了这些处理的训练集数据 在这里下载;待预测集数据在这里下载。 

咱们用“Explorer”打开训练集“bank.arff”,观察一下它是不 是按照前面的要求处理好了。切换到“Classify”选项卡,点击“Choose”按钮后能够看到不少分类或者回归的算法分门别类的列在一个树型框里。 3.5版的WEKA中,树型框下方有一个“Filter...”按钮,点击能够根据数据集的特性过滤掉不合适的算法。咱们数据集的输入属性中有 “Binary”型(即只有两个类的分类型)和数值型的属性,而Class变量是“Binary”的;因而咱们勾选“Binary attributes”“Numeric attributes”和“Binary class”。点“OK”后回到树形图,能够发现一些算法名称变红了,说明它们不能用。选择“trees”下的“J48”,这就是咱们须要的C4.5算 法,还好它没有变红。 
点击“Choose”右边的文本框,弹出新窗口为该算法设置各类参数。点“More”查看参数说明,点 “Capabilities”是查看算法适用范围。这里咱们把参数保持默认。 
如今来看左中的“Test Option”。咱们没有专门设置检验数据集,为了保证生成的模型的准确性而不至于出现过拟合(overfitting)的现象,咱们有必要采用10折交 叉验证(10-fold cross validation)来选择和评估模型。若不明白交叉验证的含义能够Google一下。 

建模结果 
OK,选上“Cross-validation”并在“Folds”框填上“10”。点“Start”按钮开始让算法生成决策树模型。很快,用 文本表示的一棵决策树,以及对这个决策树的偏差分析等等结果出如今右边的“Classifier output”中。同时左下的“Results list”出现了一个项目显示刚才的时间和算法名称。若是换一个模型或者换个参数,从新“Start”一次,则“Results list”又会多出一项。 

咱们看到“J48”算法交叉验证的结果之一为 
Correctly Classified Instances 206 68.6667 % 
也就是说这个模型 的准确度只有69%左右。也许咱们须要对原属性进行处理,或者修改算法的参数来提升准确度。但这里咱们无论它,继续用这个模型。 

右键点 击“Results list”刚才出现的那一项,弹出菜单中选择“Visualize tree”,新窗口里能够看到图形模式的决策树。建议把这个新窗口最大化,而后点右键,选“Fit to screen”,能够把这个树看清楚些。看完后截图或者关掉
Razz 

这 里咱们解释一下“Confusion Matrix”的含义。 
=== Confusion Matrix === 
  a b <-- classified as 
  74 64 | a = YES 
  30 132 | b = NO
 
这个矩阵是说,本来“pep”是“YES”的实例,有74个被正确的预测为 “YES”,有64个错误的预测成了“NO”;本来“pep”是“NO”的实例,有30个被错误的预测为“YES”,有132个正确的预测成了“NO”。 74+64+30+132 = 300是实例总数,而(74+132)/300 = 0.68667正好是正确分类的实例所占比例。这个矩阵对角线上的数字越大,说明预测得越好。 

模型应用 
如今咱们要用生成的模型对那些待预测的数据集进行预测了,注意待预测数据集和训练用数据集各个属性的设 置必须是一致的。WEKA中并无直接提供把模型应用到带预测数据集上的方法,咱们要采起间接的办法。 
在“Test Opion”中选择“Supplied test set”,而且“Set”成“bank-new.arff”文件。从新“Start”一次。注意此次生成的模型没有经过交叉验证来选择,“Classifier output”给出的偏差分析也没有多少意义。这也是间接做预测带来的缺陷吧。 
如今,右键点击“Result list”中刚产生的那一项,选择“Visualize classifier errors”。咱们不去管新窗口中的图有什么含义,点“Save”按钮,把结果保存成“bank-predicted.arff”。这个ARFF文件中 就有咱们须要的预测结果。在“Explorer”的“Preprocess”选项卡中打开这个新文件,能够看到多了两个属性 “Instance_number”和“predictedpep”。“Instance_number”是指一个实例在原“bank- new.arff”文件中的位置,“predictedpep”就是模型预测的结果。点“Edit”按钮或者在“ArffViewer”模块中打开能够查 看这个数据集的内容。好比,咱们对实例0的pep预测值为“YES”,对实例4的预测值为“NO”。 

使用命令行(推荐) 
虽然使用图形界面查看结果和设置参数很方便,可是最直接最灵活的 建模及应用的办法还是使用命令行。 
打开“Simple CLI”模块,像上面那样使用“J48”算法的命令格式为: 
java weka.classifiers.trees.J48 -C 0.25 -M 2 -t directory-path\bank.arff -d directory-path \bank.model 
其中参数“ -C 0.25”和“-M 2”是和图形界面中所设的同样的。“-t ”后面跟着的是训练数据集的完整路径(包括目录和文件名),“-d ”后面跟着的是保存模型的完整路径。注意!这里咱们能够把模型保存下来。 
输入上述命令后,所获得树模型和偏差分析会在“Simple CLI”上方显示,能够复制下来保存在文本文件里。偏差是把模型应用到训练集上给出的。 
把这个模型应用到“bank-new.arff”所用命 令的格式为: 
java weka.classifiers.trees.J48 -p 9 -l directory-path\bank.model -T directory-path \bank-new.arff 
其 中“-p 9”说的是模型中的Class属性是第9个(也就是“pep”),“-l”后面是模型的完整路径,“-T”后面是待预测数据集的完整路径。 
输 入上述命令后,在“Simple CLI”上方会有这样一些结果: 
0 YES 0.75 ? 
1 NO 0.7272727272727273 ? 
2 YES 0.95 ? 
3 YES 0.8813559322033898 ? 
4 NO 0.8421052631578947 ? 
...
 
这里 的第一列就是咱们提到过的“Instance_number”,第二列就是刚才的“predictedpep”,第四列则是“bank- new.arff”中原来的“pep”值(这里都是“?”缺失值)。第三列对预测结果的置信度(confidence )。好比说对于实例0,咱们有75%的把握说它的“pep”的值会是“YES”,对实例4咱们有84.2%的把握说它的“pep”值会是“NO”。 
我 们看到,使用命令行至少有两个好处。一个是能够把模型保存下来,这样有新的待预测数据出现时,不用每次从新建模,直接应用保存好的模型便可。另外一个是对预 测结果给出了置信度,咱们能够有选择的采纳预测结果,例如,只考虑那些置信度在85%以上的结果。 
惋惜,命令行仍不能保存交叉验证等方式选择过 的模型,也不能将它们应用到待预测数据上。要实现这一目的,须用到“KnowledgeFlow”模块的“ PredictionAppender”。 

---- 整理自
http://maya.cs.depaul.edu/~classes/ect584/WEKA/classify.html 



4. 聚类分析 

原理与实现 
聚类分析中的“类”(cluster)和前面分类的“类”(class)是不一样的,对cluster更加准确的翻译应该是“簇”。聚类的任务是 把全部的实例分配到若干的簇,使得同一个簇的实例汇集在一个簇中心的周围,它们之间距离的比较近;而不一样簇实例之间的距离比较远。对于由数值型属性刻画的 实例来讲,这个距离一般指欧氏距离。 
如今咱们对前面的“bank data”做聚类分析,使用最多见的K均值(K-means)算法。下面咱们简单描述一下K均值聚类的步骤。 
K均值算法首先随机的指定K个簇中 心。而后:1)将每一个实例分配到距它最近的簇中心,获得K个簇;2)计分别计算各簇中全部实例的均值,把它们做为各簇新的簇中心。重复1)和2),直到K 个簇中心的位置都固定,簇的分配也固定。 

上述K均值算法只能处理数值型的属性,遇到分类型的属性时要把它变为若干个取值0和1的属性。 WEKA将自动实施这个分类型到数值型的变换,并且WEKA会自动对数值型的数据做标准化。所以,对于原始数据“bank-data.csv”,咱们所作 的预处理只是删去属性“id”,保存为ARFF格式后,修改属性“children”为分类型。这样获得的数据文件为“
bank.arff”,含600条实例。 

用“Explorer”打开刚才获得的 “bank.arff”,并切换到“Cluster”。点“Choose”按钮选择“SimpleKMeans”,这是WEKA中实现K均值的算法。点击 旁边的文本框,修改“numClusters”为6,说明咱们但愿把这600条实例聚成6类,即K=6。下面的“seed”参数是要设置一个随机种子,依 此产生一个随机数,用来获得K均值算法中第一次给出的K个簇中心的位置。咱们不妨暂时让它就为10。 
选中“Cluster Mode”的“Use training set”,点击“Start”按钮,观察右边“Clusterer output”给出的聚类结果。也能够在左下角“Result list”中此次产生的结果上点右键,“View in separate window”在新窗口中浏览结果。 

结果解释 
首先我 们注意到结果中有这么一行: 
Within cluster sum of squared errors: 1604.7416693522332 
这是评价聚类好坏的标准,数值越小说明同一簇实例之间的 距离越小。也许你获得的数值会不同;实际上若是把“seed”参数改一下,获得的这个数值就可能会不同。咱们应该多尝试几个seed,并采纳这个数值 最小的那个结果。例如我让“seed”取100,就获得 
Within cluster sum of squared errors: 1555.6241507629218 
我该取后面这个。固然再 尝试几个seed,这个数值可能会更小。 

接下来“Cluster centroids:”以后列出了各个簇中心的位置。对于数值型的属性,簇中心就是它的均值(Mean);分类型的就是它的众数(Mode), 也就是说这个属性上取值为众数值的实例最多。对于数值型的属性,还给出了它在各个簇里的标准差(Std Devs)。 

最后的 “Clustered Instances”是各个簇中实例的数目及百分比。 

为了观察可视化的聚类结果,咱们在左下方“Result list”列出的结果上右击,点“Visualize cluster assignments”。弹出的窗口给出了各实例的散点图。最上方的两个框是选择横坐标和纵坐标,第二行的“color”是散点图着色的依据,默认是根 据不一样的簇“Cluster”给实例标上不一样的颜色。 
能够在这里点“Save”把聚类结果保存成ARFF文件。在这个新的ARFF文件 中,“instance_number”属性表示某实例的编号,“Cluster”属性表示聚类算法给出的该实例所在的簇。 
java

相关文章
相关标签/搜索