• Hw1机器学习的作业


    五月又是学习的好季节,准备重拾起算法搞本砖业的东西,数据挖掘----》机器学习

    这次有很有幸的看到了一位讲得很好的老师李宏毅老师的ml,真的适合入门。当然也会涉及到一些求导或者现代以及其他数学类的东西。

    这里有梯度下降法不懂的可以看看https://www.youtube.com/watch?v=yKKNr-QKz2Q 这个是youtube的也有b站的https://www.bilibili.com/video/av9770190/?p=3感兴趣却又不是很懂的可以去看看。

    最后附上自己做的作业的代码,这个是自己写的,没有配图和解释,将就着看吧,只有注释,顺便给出作业的地址https://ntumlta.github.io/2017fall-ml-hw1/。

    # -*- coding: utf-8 -*-
    """
    Created on Sun May 13 20:59:45 2018


    @author: 被遗弃的庸才
    """
    import numpy as np
    import matplotlib.pyplot as plt
    xandy=[]
    i=1
    with open('train.txt') as files:
        while True:
            line=files.readline()
            if line.strip():
                if i%18 == 10:
                    for j in range(2,12):
                        xandy.append(float(line.split(',')[j]))
                        #print(line.split(',')[j],end=' ')#这里只输出pm2.5的值
                    #pass
                    #print()#换行
            else:
                break
            i+=1
    xandy=np.array(xandy)
    xandy=xandy.reshape(240,10)#改变一下形状
    #print(xandy.shape)
    #定义方程y=wx-------------+b
    w=np.random.randn(9,1)#随机给出w
    b=1#直接给出b
    #print(w)
    cost=[]
    x=[]
    lr=0.000001#手动调学习率,我也不知道多少合适,看着来嘛,
    literator=1000000#迭代次数为10000次
    sum_gradient_w=[0,0,0,0,0,0,0,0,0]
    sum_gradient_b=0


    for j in range(literator):
        y_=np.dot(xandy[:,0:9],w)+b
        cost.append(sum((y_-xandy[:,9].reshape(240,1))**2)/y_.size)#损失函数
        gradient_w=np.dot((y_-xandy[:,9].reshape(240,1)).transpose(),xandy[:,:9])*(2)/y_.size#当前的导数
        gradient_b=sum((y_-xandy[:,9].reshape(240,1))*(2))/y_.size#这些都是向量,也看一看成240行1列的矩阵
        
        '''
        #这个是adagrad的实现
        sum_gradient_w+=gradient_w**2
        ada_w=np.sqrt(sum_gradient_w.transpose())
        w=w-lr*gradient_w.transpose()/ada_w
        sum_gradient_b+=gradient_b**2
        ada_b=np.sqrt(sum_gradient_b)
        b=b-lr*gradient_b/ada_b
        '''
        #这个是最简单的
        w=w-gradient_w.transpose()*lr
        b=b-gradient_b*lr
        x.append(j)


    #print(cost,x)
    plt.figure()  
    plt.plot(x,cost)  






    #对比,最后测试一下与测试值的差距


    xandy2=[]
    i2=1
    with open('train.txt') as files:
        while True:
            line=files.readline()
            if line.strip():
                if i%18 == 10:
                    for j in range(2,12):
                        xandy2.append(float(line.split(',')[j]))
                        #print(line.split(',')[j],end=' ')#这里只输出pm2.5的值
                    #pass
                    #print()#换行
            else:
                break
            i2+=1
    xandy2=np.array(xandy)
    xandy2=xandy2.reshape(240,10)#改变一下形状
    y_=np.dot(xandy2[:,0:9],w)+b

    print(sum((y_-xandy2[:,9].reshape(240,1))**2)/y_.size)


    (加油,不只是你一个人在学习,)

  • 相关阅读:
    由剑指offer引发的思考——对象中虚函数指针的大小
    lambda表达式在python和c++中的异同
    并发编程(9)线程池---高级线程管理
    并发编程(8)并发算法代码设计
    并发编程(6)基于锁的并发数据结构设计
    并发编程(4)同步并发操作
    并发编程(3)线程间共享数据
    并发编程(2)线程管理
    并发编程(1)简介
    C#中string 和String
  • 原文地址:https://www.cnblogs.com/csnd/p/16675645.html
Copyright © 2020-2023  润新知