原文地址: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. CenOs7安装oracle图文详细过程(01)

    原创作品,转载请在文章头部(显眼位置)注明出处:https://www.cnblogs.com/sunshine5683/p/10011441.html 1.检查必要的安装包是否安装 命令脚本: rp ...

  2. CSS实现太极图(3个div实现)

    使用三个div实现太极图的步骤如下: HTML部分 <div class="box"> <div class="yin"></di ...

  3. 如何使DIV居中

    小编我抛出一个问题: 有一个 div#wrapper 元素,高.宽度都未知.它其中有一个宽高都为 100px 的 div#box 元素,请你完成 CSS,使得 div#box 在 div#wrappe ...

  4. 关系型数据库——主键&外键的

    一.什么是主键.外键: 关系型数据库中的一条记录中有若干个属性,若其中某一个属性组(注意是组)能唯一标识一条记录,该属性组就可以成为一个主键  比如   学生表(学号,姓名,性别,班级)  其中每个学 ...

  5. vue-cli构建项目 npm run build后应该怎么运行在本地查看效果

    问题: 就是 bulid 打包后,想本地看看效果,本地看不了.... 网上看到一个....   具体更多在: http://www.dabaipm.cn/static/frontend/346.htm ...

  6. ButterKnife 初体验

    ButterKnife 环境搭建 在project的build.gradle文件中添加依赖的插件 //ButterKnife 的插件 // classpath 'com.jakewharton:but ...

  7. Datatables跳转到指定页

    因为项目用到Datatables发现在分页特别多时无法跳转到指定页,自己动手增加了#Datatables 跳转到指定页#功能,实现代码如下: table = $('#user-table').data ...

  8. java 反射和泛型

    反射 在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问.检测和修改它本身状态或行为的一种能力.[1]用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为. 要注意术 ...

  9. maven(15),快照与发布,RELEASE与SNAPSHOT

     发布RELEASE 用户A将代码打包发布到RELEASE仓库,具体操作参考上篇文章.用户B使用时,需要在pom.xml添加JAR包的依赖坐标.如果用户A将版本从1.0升级为2.0,用户B使用时也 ...

  10. asp.net mvc4 小问题

    最近在学习mvc4中间出现一些问题.留作记录.. 1.新建立的项目在vs2013中运行后会出现一个长轮询..这个叫browserLink 是vs2013中新加入的东西.至于更多解释.直接百度.. 关闭 ...