《机器学习(周志华)》习题11.1 参考答案

原创 2016年05月30日 18:36:38

试编程实现Relief算法,并考察其在西瓜3.0上的结果。

# coding: utf-8
import numpy as np 

input_path = "西瓜数据集3.csv"
file = open(input_path.decode('utf-8'))
filedata = [line.strip('\n').split(',') for line in file]
filedata = [[float(i) if '.' in i.decode('utf-8') else i for i in row ] for row in filedata] # change decimal from string to float 
filedata = filedata[1:]
X = [row[1:-1] for row in filedata] # attributes
Y = [row[-1] for row in filedata] # class label 
weight = np.zeros(len(X[0]))

# Normalise
for row in X:
	row[-2] = (row[-2]-0.243) / (0.774-0.243)
	row[-1] = (row[-1]-0.042) / (0.46-0.042)

def cal_dis(a, b):
	ret = 0
	for i in range(len(a)):
		ai = a[i]
		bi = b[i]
		if type(a[i]) == float:
			ret += np.abs(ai-bi)
		else:
			ret += 0 if ai==bi else 1
	return ret 


def find_near(sample_id):
	global X, Y
	near_hit_id = -1
	near_miss_id = -1
	near_hit_dis = np.inf
	near_miss_dis = np.inf  
	sample_feat = X[sample_id]
	sample_label = Y[sample_id]
	for i in range(len(Y)):
		if i == sample_id:
			continue
		pair_feat = X[i]
		pair_label = Y[i]
		dis = cal_dis(sample_feat, pair_feat)
		if pair_label == sample_label and dis < near_hit_dis:	
			near_hit_dis = dis
			near_hit_id = i 
		if pair_label != sample_label and dis < near_miss_dis:
			near_miss_dis = dis
			near_miss_id = i 
	return near_hit_id, near_miss_id


for i in range(len(Y)):
	near_hit_id, near_miss_id = find_near(i)
	print i, near_hit_id, near_miss_id
	for j in range(len(X[0])):
		weight[j] += cal_dis([X[i][j]], [X[near_miss_id][j]]) - cal_dis([X[i][j]], [X[near_hit_id][j]])

print weight



输出结果:

色泽,根蒂,敲声,纹理,脐部,触感,密度,含糖率
[-7.          4.         -1.          9.          7.         -4.         -0.3747646		3.57416268]


relief算法得到的特征重要性排序可得,[纹理,脐部,根蒂,含糖率...]

还是比较make sense 的。

不过注意,该算法实际蕴含假设,同类数据属性值差别小,不同类数据属性值差别大,但这个假设经常并不对所有属性成立!

而且它还依赖于计算最近邻,首先,为什么要用最近邻,有道理么,个人感觉还不如用类重心。

其次,这个算法本身是用来降维的,也就是说是用来解决维度灾难的,而维度灾难下算距离是有问题的,那这个算法不是本末倒置?

anyway,做个编程练习加深对算法理解还是可以的,但实际中我是不会倾向使用它的。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

[转]朴素贝叶斯分类器的应用

生活中很多场合需要用到分类,比如新闻分类、病人分类等等。本文介绍朴素贝叶斯分类器(Naive Bayes classifier),它是一种简单有效的常用分类算法。...

【机器学习-西瓜书】七、朴素贝叶斯分类器

推荐前期阅读:http://blog.csdn.net/u011995719/article/details/76732663 推荐阅读:拉普拉斯修正7.3朴素贝叶斯分类器关键词: 朴素贝叶斯;拉普拉...

机器学习(周志华) 参考答案 第十一章 特征选择与稀疏学习 11.1

机器学习(周志华) 参考答案 第十一章 特征选择与稀疏学习 11.1 机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article...

机器学习(周志华西瓜书) 参考答案 总目录

机器学习(周志华西瓜书)参考答案总目录 从刚开始学习机器学习到现在也有几个月了,期间看过PDF,上过MOOC,总感觉知道一点了又不是特别明白,最后趁某东买书大减价弄了几本相关的书来看看,其中一本就是...

机器学习(周志华) 参考答案 第四章 决策树 4.10

机器学习(周志华) 参考答案 第四章 决策树 4.4机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/5...

机器学习(周志华) 参考答案 第二章 模型评估与选择

机器学习(周志华) 参考答案 第二章 模型评估与选择机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/52...

机器学习(周志华) 参考答案 第九章 聚类 9.4

机器学习(周志华) 参考答案 第九章 聚类 9.4机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/5206...

机器学习(周志华) 参考答案 第十五章 规则学习 15.1

机器学习(周志华) 参考答案 第十五章 规则学习 15.1机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/detai...

机器学习(周志华) 参考答案 第十一章 特征选择与稀疏学习

机器学习(周志华) 参考答案 第十一章 特征选择与稀疏学习 机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/deta...

机器学习(周志华) 参考答案 第八章 集成学习 8.3

机器学习(周志华) 参考答案 第八章 集成学习 8.3机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/52...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《机器学习(周志华)》习题11.1 参考答案
举报原因:
原因补充:

(最多只允许输入30个字)