[机器学习]K邻近算法及其应用--WEKA工具
2015-12-16 14:27
134 查看
K邻近算法理论基础
k邻近模型
距离度量
k值的选择
分类决策规则
WEKA实战
问题背景
数据预处理
得到分类器
对未知的数据进行分类预测
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邻近算法的可以参考李航《统计学习方法》。
问题描述:
约会对象的分类
简单的说,利用下面三个指标来判断对象的类型。
三个指标: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损失函数即可,这里不用设置。
运行得到模型结果。
上面的结果的分析,笔者就不给出了,值得一提的是,经过交叉验证的方式,选取到的k值是5。
(1)在
(2)在
即预测结果为 smallDoses。
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。
相关文章推荐
- 超简单制作.9png图片
- 客户端服务器通讯常用的一种方法——Marshal类
- SQL 非等价连接
- 关于java空指针一些心得体会
- useful kaldi posts
- Linux配置本地yum源
- 渗透测试工具sqlmap基础教程
- java与.net des加解密 方法解析
- SSH登陆远程主机后进入指定目录或执行命令
- 关于mysql异常: Access denied for user 'root'@'localhost' (using password: YES)的解决方法
- linux操作高逼格--利用PATH路径让你一秒五刀 推荐
- 寻找峰值 查看运行结果 ——LintCode
- shell的foreach 函数
- 机器视觉学习笔记(5)——基于OpenCV的单目摄像机标定
- 成人高考专升本《生态学基础》章节复习题
- 短信加密机制的设计模式
- GitHub 优秀的 Android 开源项目
- Ubuntu:Android编译环境设置和编译
- Raphael的text及对齐方式
- java hashcode