机器学习笔记1
机器学习训练就是一个求解权重项w以及偏置项b的过程,具体包括随机初始化w以及b,接着将x(输入)带入目标函数求解y(预测),随后将y与y1(真值)进行比较计算得到损失dis,进而利用dis转向对w和b进行更新,更新过程如下:
w1 = w0 - lr(学习率)* dis * x,b1 = b0 - lr * dis;
接着重复上述步骤(指定次数或者指定dis小于一定的阈值结束训练)。
import numpy as np
import random
def generateData(Ws, b=0, n=1):
'''
:param Ws: [1,2] 给定包含所有权重w的列表
:param b: 0.5 偏置项
:param n: 数据组数量
:return: 生成的数据组,最后一列是标注。
'''
x = np.random.rand(n, len(Ws)) # 随机初始化(x, y)矩阵
y = (x*Ws).sum(axis=1)+b # 计算y
datas = np.column_stack((x, y)) # 将x, y转置合并为一个矩阵
datas = datas.astype(np.float32) # 数据变为float32类型
return datas
# 随机初始输入与输出 即输入与标签
def getDatas():
Ws = [2, 3]; b = 2; n = 1
datas = generateData(Ws, b, n)
return datas
def train(datas, learning_rate=0.01, epochs=100):
w_number = len(datas[0])-1
Ws = [random.random() for _ in range(w_number)] # 随机初始化权重w
b = random.random() # 随机初始化偏置b
for e in range(epochs): # 定义训练次数
for d in datas:
x = d[:-1]
y_pred = sum(x * Ws) + b # 利用初始化的权重项与偏置项进行预测
dis = y_pred-d[-1] # 计算损失值
Ws -= dis*learning_rate*x # 更新权重项Ws = Ws - dis*learning_rate*x
b -= dis*learning_rate # 更新偏置项 b = b - dis*learning_rate
print(Ws)
print(b)
print(dis)
print()
if __name__ == '__main__':
datas = getDatas()
print(datas)
train(datas)