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)


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

猜你喜欢

转载自blog.csdn.net/qq_37353105/article/details/80308060