您的位置:首页 > 其它

[机器学习]K邻近算法及其应用--WEKA工具

2015-12-16 14:27 134 查看
K邻近算法理论基础
k邻近模型
距离度量

k值的选择

分类决策规则

WEKA实战
问题背景

数据预处理

得到分类器

对未知的数据进行分类预测

K邻近算法理论基础

(本节内容参考了:李航《统计学习方法》,清华大学出版社)

k邻近法是一种基本分类与回归方法。下面给出算法描述。

输入:训练数据集

       T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}

 其中,xix_i为实例的向量,yiy_i是实例的类型;

 另外输入实例xx。

 输出:实例xx所属的类yy。

k邻近模型

k邻近模型由距离度量、k值的选择和分类决策三个基本要素决定。

距离度量

特征空间中两个实例点的距离是两个实例点相似程度的反映。可以选择用欧式距离、曼哈顿距离等作为距离度量。这涉及到范数的概念,可以参考我的博文

k值的选择

k值的选择会对k近邻法的结果产生重大影响。

k值过大,模型过于简单,导致欠拟合;

k值过小,模型过于复杂,导致过拟合。

在实际应用中,k值一般取一个比较小的数值,通常采用
交叉验证法
来选取最优的k值。

分类决策规则

k近邻法中的分类决策规则往往是多数表决,即由输入实例的k个训练实例的多数类决定分类。实质上,就是利用了0-1损失函数的方法。

关于K邻近算法的可以参考李航《统计学习方法》。

WEKA实战

在Peter Harrington的《Machine Learning in Action》一书中,是采用了python语言对各种算法进行了实现。本文不自行实现算法,而是使用WEKA。

问题背景

该问题背景来源自:Peter Harrington,《Machine Learning in Action》。数据来源自它的官网。

问题描述:

约会对象的分类

简单的说,利用下面三个指标来判断对象的类型。

三个指标:1.每年获得的飞行里程数;2每周消费的冰淇淋公升数;3.玩游戏所占时间比。

对象的类型有三种:非常喜欢(largeDoses),一般喜欢(smallDoses),不喜欢(didntLike)。

《机器学习实战》那本书提供的数据是txt文件,我用java处理后得到了rtff格式的文件。文件下载地址。数据截图如下:




这是训练数据,将利用训练数据对yuce.rtff进行预测。

数据预处理

首先应当进行归一化处理,这样三个特征的权重就是一样的了。如下图所示。



得到分类器




选Bk,这就是K近邻算法。

上面我们提到了三个基本要数。

(1)距离度量的设置

点击下图红色部分。




得到



我们可以根据需要选择距离度量。默认的都是欧式距离。

(2)k值的选择

通过上面的叙述,明显是用交叉验证的方式来选取k值更加合理。

那么在WEKA中如何设置呢?




KNN设置到你想考虑最大的k值,这里假设为100,当然大可不必这么大。cross-Validate设置为true。

(3)分类决策规则

kNN使用0-1损失函数即可,这里不用设置。

运行得到模型结果。

[code]=== Run information ===

Scheme:       weka.classifiers.lazy.IBk -K 100 -W 0 -X -A "weka.core.neighboursearch.LinearNNSearch -A \"weka.core.EuclideanDistance -R first-last\""
Relation:     testKNN_predicted
Instances:    1000
Attributes:   4
              feiji
              binqilin
              youxi
              leixing
Test mode:    10-fold cross-validation

=== Classifier model (full training set) ===

IB1 instance-based classifier
using 5 nearest neighbour(s) for classification

Time taken to build model: 0 seconds

=== Stratified cross-validation ===
=== Summary ===

Correctly Classified Instances         951               95.1    %
Incorrectly Classified Instances        49                4.9    %
Kappa statistic                          0.9265
Mean absolute error                      0.0485
Root mean squared error                  0.1555
Relative absolute error                 10.9115 %
Root relative squared error             32.9795 %
Coverage of cases (0.95 level)          99.7    %
Mean rel. region size (0.95 level)      41.7667 %
Total Number of Instances             1000     

=== Detailed Accuracy By Class ===

                 TP Rate  FP Rate  Precision  Recall   F-Measure  MCC      ROC Area  PRC Area  Class
                 0.939    0.021    0.956      0.939    0.948      0.922    0.992     0.988     largeDoses
                 0.973    0.030    0.942      0.973    0.957      0.935    0.997     0.993     smallDoses
                 0.942    0.023    0.955      0.942    0.948      0.922    0.995     0.986     didntLike
Weighted Avg.    0.951    0.024    0.951      0.951    0.951      0.927    0.995     0.989     

=== Confusion Matrix ===

   a   b   c   <-- classified as
 307   9  11 |   a = largeDoses
   5 322   4 |   b = smallDoses
   9  11 322 |   c = didntLike


上面的结果的分析,笔者就不给出了,值得一提的是,经过交叉验证的方式,选取到的k值是5。

对未知的数据进行分类预测

对yuce.arff进行预测,yuce.arff数据如下。

[code]......
@data
10000,10,0.5,?


(1)在
Test Options
Supplied test set
设置为yuce.arff;

(2)在
Result list
出的结果右击,选择
Re-evaluate model on current model
,(此时发生Classifier output中多了点结果),再右击,选择
Visualize Classifier error
, 右击
save
, 得到一个arff文件,查看arff文件,即可得到预测结果。结果如下。




即预测结果为 smallDoses。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: