機器學習基石 机器学习基石(Machine Learning Foundations) 作业1 习题解答

最近在cousera上面学习台湾大学的机器学习基石的课程,不过上面的课程都是用英文来进行测试的,做起来总是通过不了,于是在网上搜寻解答方法,最后找到了下面的一个博客,里面记录了  机器学习基石  这门课所有测试的答案,作为参考之用还是十分有用的,下面给出其汇总的网址:

https://blog.csdn.net/a1015553840/article/details/51085129

 

具体链接如下:

1.作业一

(1)作业一课后习题解答:http://blog.csdn.net/a1015553840/article/details/50986313

(2)作业一Q15-17 C++实现(PLA) http://blog.csdn.net/a1015553840/article/details/50979434

(2)作业一Q18-20 C++实现(Pocket PLA)http://blog.csdn.net/a1015553840/article/details/50979640

 

2.作业二

(1)作业二课后习题解答:http://blog.csdn.net/a1015553840/article/details/51043019

(2)作业二Q16-18 C++实现:http://blog.csdn.net/a1015553840/article/details/51023193

(3)作业二Q19-20 C++实现:http://blog.csdn.net/a1015553840/article/details/51029765

 

 

 

3.作业三

(1)作业三课后习题解答:http://blog.csdn.net/a1015553840/article/details/51103645

(2)作业三Q13-15 C++实现(Linear Regression):http://blog.csdn.net/a1015553840/article/details/51085094

(3)作业三Q18-20 C++实现(Logistic Regression):http://blog.csdn.net/a1015553840/article/details/51085835

 

4.作业四

(1)作业四课后习题解答:http://blog.csdn.net/a1015553840/article/details/51173679

(2)作业四Q13-15 MATLAB实现(Regularization+Validation):http://blog.csdn.net/a1015553840/article/details/51173020

 

机器学习基石手写笔记:http://download.csdn.net/detail/a1015553840/9569739 免下载券

 

关于adaboost的一些个人理解:http://blog.csdn.net/a1015553840/article/details/54882398

 

 

 

 

====================================================================

 

作业1 中  15题  Python 代码:

#!/usr/bin/env python3
#encoding:UTF-8

import urllib.request

L=4
train_time=0
w=[0]*(L+1)
dataList=[]


"数据读入"
def dataLoad():
    global dataList

    url="https://www.csie.ntu.edu.tw/~htlin/mooc/datasets/mlfound_math/hw1_15_train.dat"
    repones=urllib.request.urlopen(url)
    dataList=repones.readlines()
    dataList=[(float(v) for v in  k.strip().split()) for k in dataList]
    dataList=[(1.0,)+tuple(k) for k in dataList]


#训练过程
def train():
    global train_time 

    def sign(item):
       s=0
       for k in range(L+1):
           s+=w[k]*item[k]
       if(s>0):return 1 
       else:return -1

    def w_change(item):
        global w
        for k in range(L+1):
            w[k]+=item[k]*item[-1]
  
    while(True): 
        state=0

        for item in dataList: 
            value=sign(item)
            if(value!=item[-1]):
                w_change(item)
                train_time+=1
                state=1

        if(state==0):
            break

if __name__=="__main__":
    dataLoad()
    train() 
    print(train_time)

 结果如下:

 

 

给出  权重每次更新时候的  训练数据集误差:

error_1 0.71
error_2 0.29
error_2 0.2375
error_2 0.71
error_2 0.2225
error_2 0.29
error_2 0.2475
error_2 0.685
error_2 0.2575
error_2 0.525
error_2 0.28
error_2 0.1825
error_2 0.2875
error_2 0.1425
error_2 0.68
error_2 0.105
error_2 0.2875
error_2 0.05
error_2 0.5275
error_2 0.0625
error_2 0.4375
error_2 0.1475
error_2 0.25
error_2 0.24
error_2 0.0175
error_2 0.2575
error_2 0.0075
error_2 0.365
error_2 0.1025
error_2 0.3225
error_2 0.0975
error_2 0.1625
error_2 0.1925
error_2 0.065
error_2 0.2275
error_2 0.0125
error_2 0.2175
error_2 0.0025
error_2 0.515
error_2 0.03
error_2 0.1875
error_2 0.025
error_2 0.19
error_2 0.015
error_2 0.2
error_2 0.0

可以,发现每次权重更新后 在数据集的误差不是一直减小的,而是存在着起伏的。但是,由于是线性可分,最终都是会收敛,将所有数据正确分割。

 

 

 

 

第16题:

#!/usr/bin/env python3
#encoding:UTF-8

import random
import urllib.request

L=4
train_time=0
w=[0]*(L+1)
dataList=[]


"数据读入"
def dataLoad():
    global dataList

    url="https://www.csie.ntu.edu.tw/~htlin/mooc/datasets/mlfound_math/hw1_15_train.dat"
    repones=urllib.request.urlopen(url)
    dataList=repones.readlines()
    dataList=[(float(v) for v in  k.strip().split()) for k in dataList]
    dataList=[(1.0,)+tuple(k) for k in dataList]


#训练过程
def train():
    global train_time 
    global dataList
    global w
    w=[0]*(L+1)

    def sign(item):
       s=0
       for k in range(L+1):
           s+=w[k]*item[k]
       if(s>0):return 1 
       else:return -1

    def w_change(item):
        global w
        for k in range(L+1):
            w[k]+=item[k]*item[-1]
  
    while(True): 
        state=0

        "打乱顺序"
        random.shuffle(dataList)
        for item in dataList: 
            value=sign(item)
            if(value!=item[-1]):
                w_change(item)
                train_time+=1
                state=1

        if(state==0):
            break

if __name__=="__main__":
    dataLoad()

    for _ in range(2000):
        train() 

    print(train_time/2000)

结果:

 

 

 

约等于  40 。

 

第17题:

#!/usr/bin/env python3
#encoding:UTF-8

import random
import urllib.request

L=4
train_time=0
w=[0]*(L+1)
dataList=[]


"数据读入"
def dataLoad():
    global dataList

    url="https://www.csie.ntu.edu.tw/~htlin/mooc/datasets/mlfound_math/hw1_15_train.dat"
    repones=urllib.request.urlopen(url)
    dataList=repones.readlines()
    dataList=[(float(v) for v in  k.strip().split()) for k in dataList]
    dataList=[(1.0,)+tuple(k) for k in dataList]


#训练过程
def train():
    global train_time 
    global dataList
    global w
    w=[0]*(L+1)

    def sign(item):
       s=0
       for k in range(L+1):
           s+=w[k]*item[k]
       if(s>0):return 1 
       else:return -1

    def w_change(item):
        global w
        for k in range(L+1):
            w[k]+=0.5*item[k]*item[-1]
  
    while(True): 
        state=0

        "打乱顺序"
        random.shuffle(dataList)
        for item in dataList: 
            value=sign(item)
            if(value!=item[-1]):
                w_change(item)
                train_time+=1
                state=1

        if(state==0):
            break

if __name__=="__main__":
    dataLoad()

    for _ in range(2000):
        train() 

    print(train_time/2000)

答案 仍为  40  。

 

posted on 2018-05-10 11:04  Angry_Panda  阅读(2142)  评论(0编辑  收藏  举报

导航