目录
一、机器学习基础
二、实战例子
1.数据集分析
2.实战训练
3.总结
三、参考资料
一、机器学习基础
为了解决这个问题,人们想到数据驱动方法,也就是让计算机从现有的大量的带标签图片电学习规律,一旦计算机学习到了其中的规律,当我们输入一张新的图片给计算机时,它就可以准确的预测出这张图片到底是猫还是狗。
数据驱动方法是一种基于大量数据进行决策、预测和模式识别的方法。
这里有两个关键的因素:
一是大量的可学习数据,比如带标签的猫狗图片,二是学习的主体,我们一般称之为模型。
如何理解模型呢?
你可以把模型认为是一个映射函数,它包含一些参数,这些参数可以与输入进行计算得到一个输出,我们一般称之为预测结果。
所谓模型学习的过程,就是模型修正其参数、改进映射关系的过程,可以简单的把模型的学习过程总结如下,以预测图片是猫还是狗为例:
1.创建模型;
2.输入一张带标签的图片;
3.使用模型对此图片做出预测
4.将预测结果与实际标签比较,产生的差距为损失
5.以减小损失为优化目标,根据损失优化模型参数,
6.循环重复上述第2-5步
二、实战例子
学习的例子使用的是“受教育程度与收入数据集”
1.数据集分析
单变量线性回归算法(比如,x代表学历,f(x)代表收入)
f(x)= w*+ b ---> 我们使用f(x)这个函数来映射输入特征和输出值
目标:预测函数f(x)与真实值之间的整体误差最小。
如何定义误差最小呢?
减小误差(直线距离两边的点越近越好【绝对值小,难以计算,使用均方误差代替】)
损失函数:使用均方差作为作为成本函数也就是 预测值和真实值之间差的平方取均值
优化的目标(y代表实际的收入)
找到合适的 w 和 b ,使得(f(x)- y)2越小越好
注意:现在求解的是参数 w和 b
如何优化?
使用梯度下降算法。
2.实战训练
①首先是用到的库
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
import torch
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt #Matplotlib是一个用于数据可视化的Python绘图库。
查看torch版本
torch.__version__
②读取数据集,并查看数据集的部分信息。
data = pd.read_csv('datasets/Income1.csv')
data.head()
将 data.Education 的值转换为一个二维数组,其中每个元素都是一个单独的列。
data.Education.values.reshape(-1,1)
将一个NumPy数组转换为PyTorch张量,并将其类型设置为FloatTensor。
③得到模型输入与结果。
X = torch.from_numpy(data.Education.values.reshape(-1,1)).type(torch.FloatTensor)
Y = torch.from_numpy(data.Income.values.reshape(-1,1)).type(torch.FloatTensor)
查看X、Y的形状:
X.shape,Y.shape
④创建模型
from torch import nn #torch中的高阶模块,包含各种层&损失函数class EIModel(nn.Module):def __init__(self): #初始化方法super(EIModel, self).__init__()self.linear = nn.Linear(1, 1) #输入的特征长度为1,输出的特征长度为1def forward(self, inputs): #如何应用这些层(前向传播)logits = self.linear(inputs)return logits
#实例化模型model = EIModel()
查看模型结构:一个线性层
⑤损失函数&优化器
loss_fn = nn.MSELoss() #均方误差损失opt = torch.optim.SGD(model.parameters(), lr=0.0001) #随机梯度下降
model.parameters()返回模型的可训练参数【优化的目标】,lr超参数
⑥训练
for epoch in range(1000):for x, y in zip(X, Y):y_pred = model(x) #x输入得到y_pred输出,在model上调用,输入x,被forward方法的inputs接受。【模型预测】loss = loss_fn(y_pred, y) #计算损失(input,target)【计算损失】opt.zero_grad() #设置每次梯度清零【梯度清零】loss.backward() #计算梯度(下降最快的方向)【损失反向传播】opt.step() #改变参数,使参数沿着下降最快的方向移动【损失优化参数】
查看模型训练后的参数
model.linear.weight,model.linear.bias #返回linear层的weight和bias
⑦绘制图像
plt.scatter(data.Education, data.Income)
plt.xlabel('Education')
plt.ylabel('Income')plt.plot(X, model(X).detach().numpy(), 'r')
3.总结
输入数据处理
创建一个合适模型
训练
预测、评价
--->
机器学习:抽象出一条直线,来拟合现有的数据。【映射函数,输入映射输出】
三、参考资料
Pytorch深度学习入门与实战 - 网易云课堂 (163.com)