B站刘二大人视频链接:2.线性模型_哔哩哔哩_bilibili
深度学习步骤
2确定模型(用算法A还是算法B。。。。)
4最后做推理的工作
![](https://i-blog.csdnimg.cn/blog_migrate/ebbe6524dec30ed1b3a38c4c0ac8961c.png)
任务描述
预测机器学习时间x=4时,能拿到几分?
有标签的:监督学习
![](https://i-blog.csdnimg.cn/blog_migrate/0f8a1cc27a56cc33faaa5f7b3d7508b5.png)
数据集的要求
自己划分时知道测试集结果,但不会输入模型中;在正式竞赛中是看不到测试集的标签的。
训练集中的数据应该更全面:
随机变量(X,Y)符合一个联合分布D(X,Y),训练集中的样本是否能正确表示这个分布?
例如猫狗识别中,训练集中的图片不能只是艺术美颜照片,更应该有用户真实拍摄的图像(可能在边缘角落)
![](https://i-blog.csdnimg.cn/blog_migrate/34c4c2724205261adc87214ce74de527.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8da10f09eeb4c9a65e95969aa46077d9.png)
如果在训练集中训练效果非常好,可能会导致过拟合。(参考:什么是过拟合 (深度学习)? What is overfitting (deep learning)?_哔哩哔哩_bilibili)
我们希望模型具有很好的泛化能力(对于没见过的图像也能正确识别)
因此把训练集切割成两部分,引入开发集。
开发集(development set)——用来对学习算法调整参数,选择特征或者做其他的决策的数据集。 也叫做交叉验证集(hold-out cross validation set)
![](https://i-blog.csdnimg.cn/blog_migrate/3c151c378eaed0e335bb64ec674d25b6.png)
模型设计
![](https://i-blog.csdnimg.cn/blog_migrate/1625b3424927781142f137ad1c0bd2a4.png)
![](https://i-blog.csdnimg.cn/blog_migrate/dcbb7dfb4edbe3bf589338ac750dcbb0.png)
预测的值是y_hat
在机器学习中首先做一个随机猜测
![](https://i-blog.csdnimg.cn/blog_migrate/bcce8e6fc67bf19ee8a15daaba51180a.png)
损失函数和平均平方误差
evaluate model error评估找到的模型和真实数据集之间的误差:loss损失
![](https://i-blog.csdnimg.cn/blog_migrate/c949a7617c7d01cef5e91cfc145da8b5.png)
针对一个样本,叫做loss;针对整个训练集,叫做cost,这里选择MSE作为cost function
![](https://i-blog.csdnimg.cn/blog_migrate/163959cbf1b189588a5b6e876dd13a61.png)
代码及作业
上课的例子
import numpy as np
import matplotlib.pyplot as plt
def forward(x): #前馈,Define the model
return x*w
def loss(x, y): #损失,Define the loss function
y_pred = forward(x)
return (y_pred - y)**2
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 穷举法
w_list = [] #List w_list save the weights 𝝎
mse_list = [] #List mse_list save the cost values of each 𝝎
for w in np.arange(0.0, 4.1, 0.1):
print("w=", w)
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
y_pred_val = forward(x_val)
loss_val = loss(x_val, y_val)
l_sum += loss_val #Value of cost function is the sum of loss function
print('\t', x_val, y_val, y_pred_val, loss_val)
print('MSE=', l_sum/3)
w_list.append(w)
mse_list.append(l_sum/3)
plt.plot(w_list,mse_list)
plt.ylabel('Loss')
plt.xlabel('w')
plt.show()
exercise
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
def forward(x): # 前馈
return x * w + b
def loss(x, y): #损失
y_pred = forward(x)
return (y_pred - y)**2
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 穷举法
B = np.arange(-2.0, 2.1, 0.1)
W = np.arange(0.0, 4.1, 0.1)
w,b = np.meshgrid(W, B)#用于三维曲面的分格线座标;产生“格点”矩阵
#此处直接使用矩阵进行计算
l_sum = 0
for x_val, y_val in zip(x_data, y_data):
y_pred_val = forward(x_val)
loss_val = loss(x_val, y_val)
l_sum += loss_val
print(y_pred_val)
print(loss_val)
print('MSE=', l_sum/3)
# print("网格化后的w=",w)
# print("X维度信息",w.shape)
# print("网格化后的b=",b)
# print("Y维度信息", b.shape)
fig = plt.figure()
ax = Axes3D(fig)
plt.xlabel('w')
plt.ylabel('b')
surf = ax.plot_surface(w, b, l_sum/3, cmap=plt.get_cmap('rainbow')) # 设置颜色映射
# 设置Z轴范围
ax.set_zlim(0, 40)
# 设置标题
plt.title("Cost Value")
plt.show()
![](https://i-blog.csdnimg.cn/blog_migrate/87ce25470277e6eefa979ffa9a32abfe.png)