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

  • K近邻算法理论基础
    • k近邻模型
      • 距离度量
      • k值的选择
      • 分类决策规则
  • WEKA实战
    • 问题背景
    • 数据预处理
    • 得到分类器
    • 对未知的数据进行分类预测

K近邻算法理论基础

(本节内容参考了:李航《统计学习方法》,清华大学出版社)
k近邻法是一种基本分类与回归方法。下面给出算法描述。

输入:训练数据集
        T={(x1,y1),(x2,y2),...,(xN,yN)}
 其中, xi 为实例的向量, yi 是实例的类型;
 另外输入实例 x
 输出:实例 x 所属的类 y

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格式的文件。文件下载地址。数据截图如下:
[机器学习]K近邻算法及其应用--WEKA工具_第1张图片
这是训练数据,将利用训练数据对yuce.rtff进行预测。

数据预处理

首先应当进行归一化处理,这样三个特征的权重就是一样的了。如下图所示。
[机器学习]K近邻算法及其应用--WEKA工具_第2张图片

得到分类器

[机器学习]K近邻算法及其应用--WEKA工具_第3张图片
选Bk,这就是K近邻算法。
上面我们提到了三个基本要数。
(1)距离度量的设置
点击下图红色部分。
[机器学习]K近邻算法及其应用--WEKA工具_第4张图片
得到[机器学习]K近邻算法及其应用--WEKA工具_第5张图片
我们可以根据需要选择距离度量。默认的都是欧式距离。

(2)k值的选择
通过上面的叙述,明显是用交叉验证的方式来选取k值更加合理。
那么在WEKA中如何设置呢?
[机器学习]K近邻算法及其应用--WEKA工具_第6张图片
KNN设置到你想考虑最大的k值,这里假设为100,当然大可不必这么大。cross-Validate设置为true。

(3)分类决策规则
kNN使用0-1损失函数即可,这里不用设置。

运行得到模型结果。

=== 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数据如下。

......
@data
10000,10,0.5,?

(1)在Test OptionsSupplied test set设置为yuce.arff;
(2)在Result list 出的结果右击,选择Re-evaluate model on current model ,(此时发生Classifier output中多了点结果),再右击,选择Visualize Classifier error, 右击 save, 得到一个arff文件,查看arff文件,即可得到预测结果。结果如下。
[机器学习]K近邻算法及其应用--WEKA工具_第7张图片
即预测结果为 smallDoses。

你可能感兴趣的:(算法,机器学习)