五月又是学习的好季节,准备重拾起算法搞本砖业的东西,数据挖掘----》机器学习
这次有很有幸的看到了一位讲得很好的老师李宏毅老师的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)
(加油,不只是你一个人在学习,)