Task-1:
线性回归、多层感知机、softmax函数
(1)线性回归作为基本的机器学习算法,实现较简单,应用广泛。
以下为用pytorch编写的线性回归类
import torch.nn as nn
import torch
from torch.autograd import Variable
from torch import optim
from torch.utils import data
import random
class linear_regression(nn.Module):
def __init__(self,x,y,batch_size=10,batch=False,iter_number=1000,lr=0.001,bias=True):
super(linear_regression, self).__init__()
self.x=x
self.y=y
self.iter_number=iter_number
self.lr=lr
self.bias=bias
self.batch_size=batch_size#进行批量梯度下降
self.batch=batch
def compute(self,w,x):#进行预测
predict=w*x
return predict
def loss(self,y,y_p):
loss=((y-y_p)**2).sum()
return loss
def SGD(self,w,x,y,lr):
index=random.randint(0,x.size(0)-1)
rand_x=x[index]
rand_y=y[index]
w.data=w.data+lr*(rand_y-w*rand_x)*rand_x
return w
def Linear(x,y,batch_size=10,batch=False,iter_number=10000,lr=0.001,bias=True):
if bias: # 生成权重(可设置是否添加偏差)
weight=Variable(torch.rand(size=(1,x.size(1))),requires_grad=True)
else:
weight=Variable(torch.rand(size=(1,x.size(1))),requires_grad=True)
model=linear_regression(x=x,y=y,batch_size=batch_size,batch=batch,lr=lr,bias=bias)
dataset = data.TensorDataset(x, y)
dataset = data.DataLoader(dataset, batch_size=batch_size, shuffle=True)
for i in range(iter_number):# 迭代多少次
y_predict = model.compute(weight, x) # 计算预测值
loss = model.loss(y, y_predict) # 计算损失函数
loss.backward()
weight=model.SGD(weight,x,y,lr)
print('第{}次迭代已完成,损失误差为{}'.format(i+1,loss))
运行输出结果为:
第9117次迭代已完成,损失误差为697.6427001953125
第9118次迭代已完成,损失误差为697.6484375
第9119次迭代已完成,损失误差为697.6598510742188
第9120次迭代已完成,损失误差为697.6563720703125
(2)多层感知机
感知机的原理只是以设定一个超平面来进行划分,使误分类的样本个数最小,但其损失函数并不是以最小误分类数来设定的,而是求解样本的误分类点离超平面的距离,令其距离最小,从而实现样本的划分。感知机的原理在支持向量机的部分会得到进一步的优化。