《机器学习(周志华)》习题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,做个编程练习加深对算法理解还是可以的,但实际中我是不会倾向使用它的。

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

相关文章推荐

《机器学习》周志华版参考答案

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

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

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

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

机器学习(周志华) 参考答案 第十六章 强化学习

机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/52064910

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

机器学习(周志华西瓜书) 参考答案 总目录http://blog.csdn.net/icefire_tyh/article/details/52064910 好忙啊好忙啊好忙啊,这章和我的研究方...

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

机器学习(周志华) 参考答案 第八章 集成学习 8.3机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/52...

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

机器学习(周志华) 参考答案 第八章 集成学习 8.5机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/52...

机器学习(周志华) 参考答案 第十三章 半监督学习

机器学习(周志华) 参考答案 第十三章 半监督学习

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

机器学习(周志华) 参考答案 第八章 集成学习机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/520649...

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

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

机器学习-周志华-课后习题答案5.5

5.5 试编程实现标准BP算法和累计BP算法,在西瓜数据集3.0上分别用这两个算法训练一个单隐层网络,并进行比较。 通过编程实践发现,在本例下要达到某一限定的均方误差时,标准BP算法比累积BP算法明显...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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