原文地址:http://www.jianshu.com/p/4bc01760ac20

问题描述



程序实现

17-18

# coding: utf-8

import numpy as np
import matplotlib.pyplot as plt def sign(n):
if(n>0):
return 1
else:
return -1 def gen_data():
data_X=np.random.uniform(-1,1,(20,1))# [-1,1)
data_Y=np.zeros((20,1))
idArray=np.random.permutation([i for i in range(20)])
for i in range(20):
if(i<20*0.2):
data_Y[idArray[i]][0]=-sign(data_X[idArray[i]][0])
else:
data_Y[idArray[i]][0] = sign(data_X[idArray[i]][0])
data=np.concatenate((data_X,data_Y),axis=1)
return data def decision_stump(dataArray):
minErrors=20
min_s_theta_list=[]
num_data=dataArray.shape[0]
data=dataArray.tolist()
data.sort(key=lambda x:x[0])
for s in [-1.0,1.0]:
for i in range(num_data):
if(i==num_data-1):
theta=(data[i][0]+1.0)/2
else:
theta=(data[i][0]+data[i+1][0])/2
errors=0
for i in range(20):
pred=s*sign(data[i][0]-theta)
if(pred!=data[i][1]):
errors+=1
if(minErrors>errors):
minErrors=errors
min_s_theta_list=[]
elif(minErrors<errors):
continue
min_s_theta_list.append((s, theta))
i=np.random.randint(low=0,high=len(min_s_theta_list))
min_s,min_theta=min_s_theta_list[i]
return minErrors,min_s,min_theta def computeEinEout(minErrors,min_s,min_theta):
Ein=minErrors/20
Eout=0.5+0.3*min_s*(abs(min_theta)-1)
return Ein,Eout if __name__=="__main__":
Ein_list=[]
Eout_list=[]
for i in range(5000):
dataArray=gen_data()
minErrors,min_s,min_theta=decision_stump(dataArray)
Ein,Eout=computeEinEout(minErrors,min_s,min_theta)
Ein_list.append(Ein)
Eout_list.append(Eout) # show results
# 17 & 18
print("the average Ein: ",sum(Ein_list)/5000)
print("the average Eout: ",sum(Eout_list)/5000) plt.figure(figsize=(16,6))
plt.subplot(121)
plt.hist(Ein_list)
plt.xlabel("Ein")
plt.ylabel("frequency")
plt.subplot(122)
plt.hist(Eout_list)
plt.xlabel("Eout")
plt.ylabel("frequency")
plt.savefig("EinEout.png")

19-20

# coding: utf-8

import numpy as np

def read_data(dataFile):
with open(dataFile, 'r') as file:
data_list = []
for line in file.readlines():
line = line.strip().split()
data_list.append([float(l) for l in line])
data_array = np.array(data_list)
return data_array def predict(s,theta,dataX):
num_data=dataX.shape[0]
res=s*np.sign(dataX-theta)
return res def decision_stump(dataArray):
min_s_theta_list=[]
num_data=dataArray.shape[0]
minErrors=num_data
data=dataArray.tolist()
data.sort(key=lambda x:x[0])
dataArray=np.array(data)
dataX=dataArray[:,0].reshape(num_data,1)
dataY=dataArray[:,1].reshape(num_data,1)
for s in [-1.0,1.0]:
for i in range(num_data):
if(i==num_data-1):
theta=(dataX[i][0]*2+1)/2
else:
theta=(dataX[i][0]+dataX[i+1][0])/2
pred=predict(s,theta,dataX)
errors=np.sum(pred!=dataY)
if(minErrors>errors):
minErrors=errors
min_s_theta_list=[]
elif(minErrors<errors):
continue
min_s_theta_list.append((s, theta))
i=np.random.randint(low=0,high=len(min_s_theta_list))
min_s,min_theta=min_s_theta_list[i]
return minErrors,min_s,min_theta def best_of_best(candidate):
candidate.sort(key=lambda x:x[1])
counts=0
for i in range(len(candidate)):
if(candidate[i][1]!=candidate[0][1]):
break
counts+=1
i=np.random.randint(low=0,high=counts)
return candidate[i][0],candidate[i][1],candidate[i][2],candidate[i][3] if __name__=="__main__":
data_array=read_data("hw2_train.dat")
num_data=data_array.shape[0]
num_dim=data_array.shape[1]-1
candidate=[]
dataY=data_array[:,-1].reshape(num_data,1)
for i in range(num_dim):
dataX=data_array[:,i].reshape(num_data,1)
min_errors,min_s,min_theta=decision_stump(np.concatenate((dataX,dataY),axis=1))
candidate.append([i,min_errors,min_s,min_theta])
min_id,min_errors,min_s,min_theta=best_of_best(candidate)
print("the optimal decision stump:\n","s: ",min_s,"\ntheta: ",min_theta)
print("the Ein of the optimal decision stump:\n",min_errors/num_data) test_array=read_data("hw2_test.dat")
num_test=test_array.shape[0]
testY=test_array[:,-1].reshape(num_test,1)
num_dim=test_array.shape[1]-1
testX=test_array[:,min_id].reshape(num_test,1)
pred=predict(min_s,min_theta,testX)
print("the Eout of the optimal decision stump by Etest:\n",np.sum(pred!=testY)/num_test)

运行结果

17-18



19-20

机器学习基石笔记:Homework #2 decision stump相关习题的更多相关文章

  1. 机器学习基石笔记:Homework #1 PLA&PA相关习题

    原文地址:http://www.jianshu.com/p/5b4a64874650 问题描述 程序实现 # coding: utf-8 import numpy as np import matpl ...

  2. 机器学习基石笔记:Homework #4 Regularization&Validation相关习题

    原文地址:https://www.jianshu.com/p/3f7d4aa6a7cf 问题描述 程序实现 # coding: utf-8 import numpy as np import math ...

  3. 机器学习基石笔记:Homework #3 LinReg&LogReg相关习题

    原文地址:http://www.jianshu.com/p/311141f2047d 问题描述 程序实现 13-15 # coding: utf-8 import numpy as np import ...

  4. 机器学习基石:Homework #0 SVD相关&常用矩阵求导公式

  5. 林轩田机器学习基石笔记1—The Learning Problem

    机器学习分为四步: When Can Machine Learn? Why Can Machine Learn? How Can Machine Learn? How Can Machine Lear ...

  6. 机器学习基石笔记:01 The Learning Problem

    原文地址:https://www.jianshu.com/p/bd7cb6c78e5e 什么时候适合用机器学习算法? 存在某种规则/模式,能够使性能提升,比如准确率: 这种规则难以程序化定义,人难以给 ...

  7. 机器学习基石笔记:04 Feasibility of Learning

    原文地址:https://www.jianshu.com/p/f2f4d509060e 机器学习是设计算法\(A\),在假设集合\(H\)里,根据给定数据集\(D\),选出与实际模式\(f\)最为相近 ...

  8. 机器学习基石笔记:03 Types of Learning

    原文地址:https://www.jianshu.com/p/86b2a9cef742 一.学习的分类 根据输出空间\(Y\):分类(二分类.多分类).回归.结构化(监督学习+输出空间有结构): 根据 ...

  9. 机器学习技法笔记:09 Decision Tree

    Roadmap Decision Tree Hypothesis Decision Tree Algorithm Decision Tree Heuristics in C&RT Decisi ...

随机推荐

  1. 七、curator recipes之阻塞队列SimpleDistributedQueue

    简介 Java在单机环境实现了BlockQueue阻塞队列,与之类似的curator实现了分布式场景下的阻塞队列,SimpleDistributedQueue 官方文档:http://curator. ...

  2. 撩课-Java每天10道面试题第7天

    撩课Java+系统架构 视频 点击开始学习 61.什么是并发修改异常? 什么是并发修改异常: 当我们在遍历实现了collection接口 与iterator接口的集合时(List.Set.Map), ...

  3. hadoop classpath 的作用

    HADOOP_CLASSPATH 是设置要运行的类的路径.否则当你用hadoop classname [args]方式运行程序时会报错,说找不到要运行的类.用hadoop jar jar_name.j ...

  4. maven 程序包com.sun.image.codec.jpeg

    在 Pom.xml 增加 <build> <plugins> <plugin> <artifactId>maven-compiler-plugin< ...

  5. springcloud 集成kafka问题记录,发消息报错:ERROR o.s.kafka.support.LoggingProducerListener - Exception thrown when sending a message with key='null' and payload='{-1,

    在springcloud集成kafka,发送消息时报错: 2018-08-15 16:01:34.159 [http-nio-8081-exec-1] INFO  org.apache.kafka.c ...

  6. frameset 在 Google Chrome 中无法隐藏左边栏解决方法!

    使用Frameset 框架,发现在IE下, <frameset name="mainDefine" cols="200,10,*" frameborder ...

  7. Bootstrap网格

    首先了解一下,什么是网格? 在平面设计中,网格是一种由一系列用于组织内容的相交的直线(垂直的.水平的)组成的结构(通常是二维的).它广泛应用于打印设计中的设计布局和内容结构.在网页设计中,它是一种用于 ...

  8. Angular进阶教程三

    7 总结 angular上手比较难,初学者(特别是习惯了使用JQuery的人)可能不太适应其语法以及思想.随着对ng探索的一步步深入,也确实感觉到了这一点,尤其是框架内部的某些执行机制. 7.1页面效 ...

  9. xshell连接虚拟机Connection failed

    一.问题描述:xshell连接不了虚拟机,出现错误提示:Could not connect to '192.168.1.100' (port 22): Connection failed. 二.查找错 ...

  10. gulp 在 angular 项目中的使用

    gulp 在 angular 项目中的使用 keyword:gulp,angularjs,ng,ngAnnotate,jshint,gulpfile 最后附完整简洁的ng项目gulpfile.js 准 ...