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

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

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

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

机器学习(周志华) 参考答案 第一章 绪论 1.2

机器学习(周志华) 第一章 绪论 1.2 是否考虑沉余的情况,结果会很大不同
  • icefire_tyh
  • icefire_tyh
  • 2016年07月29日 15:43
  • 13934

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

机器学习(周志华) 参考答案 第四章 决策树 3.5机器学习(周志华西瓜书) 参考答案 总目录 http://blog.csdn.net/icefire_tyh/article/details/5...
  • icefire_tyh
  • icefire_tyh
  • 2016年07月31日 23:33
  • 1893

周志华《机器学习》课后习题解答系列(六):Ch5 - 神经网络

本章学习了神经网络。基础知识部分包括感知机、BP算法、RNN、SOM、深度学习等内容,实践部分涉及了多种神经网络模型的应用实验。...
  • Snoopy_Yuan
  • Snoopy_Yuan
  • 2017年05月12日 09:18
  • 1620

《机器学习》周志华习题4.3答案

《机器学习》周志华著,第四章课后习题4.3答案
  • sysu_cis
  • sysu_cis
  • 2016年07月06日 23:57
  • 2602

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

LR实现,训练集和测试集都是书上给的西瓜数据集3.0α,用keras实现代码如下:# coding: utf-8""" 使用keras实现logistic分类器 """ import os impor...
  • sysu_cis
  • sysu_cis
  • 2016年06月10日 19:52
  • 3660

周志华《机器学习》课后习题解答系列(六):Ch5.10 - 卷积神经网络实验

本文基于python-theano实现了一个CNN模型,并用以解决MNIST手写字符识别实验(多分类)。...
  • Snoopy_Yuan
  • Snoopy_Yuan
  • 2017年05月12日 08:41
  • 1409

机器学习(周志华)习题解答2.1-2.9

这篇文章转自http://blog.csdn.net/wzmsltw/article/details/50771377 是对周志华的《机器学习》的习题解答,文章整理的很好,为方便之后查看,记录如下~...
  • Iohboel
  • Iohboel
  • 2017年02月15日 15:02
  • 1894

机器学习(周志华) 参考答案 第五章 神经网络 5.5

机器学习(周志华) 参考答案 第五章 神经网络 5.5 机器学习(周志华西瓜书) 参考答案 总目录...
  • icefire_tyh
  • icefire_tyh
  • 2016年08月03日 19:06
  • 3771

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

机器学习(周志华西瓜书)参考答案总目录 从刚开始学习机器学习到现在也有几个月了,期间看过PDF,上过MOOC,总感觉知道一点了又不是特别明白,最后趁某东买书大减价弄了几本相关的书来看看,其中一本就是...
  • icefire_tyh
  • icefire_tyh
  • 2016年07月29日 14:48
  • 49350
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《机器学习(周志华)》习题11.1 参考答案
举报原因:
原因补充:

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