一、Anacoda,pycharm,pytorch安装与配置
Anaconda、PyTorch和PyCharm整套安装流程
[Anaconda、PyTorch和PyCharm整套安装流程] https://blog.csdn.net/Bluebro/article/details/127161165
[Anacoda虚拟环境安装到D盘] https://blog.csdn.net/weixin_48373309/article/details/127830801
若运行时出错,可将
D:\application\Anaconda3\envs\pytorch3.7\Library\bin
(或类似的路径)在系统的PATH
环境变量中。
二、线性模型(Linear model)
2.1 基础知识
2.1.1 Machine Learning 步骤
-
准备数据集 Dataset
-
开发数据平台:kaggle
-
-
选择模型:线性模型,决策树,朴素贝叶斯等
-
模型训练(Training)
-
模型问题
-
过拟合
-
欠拟合
-
-
-
进行推理(inferring)
2.2 Linear Model
2.2.1 表达式
$$
\hat y = x*\omega + b
$$
2.2.1.1 权重 \omega的确定
-
随机选取(a random guess):\omega = random value
-
评价指标(Evaluate)
-
loss函数
$$
loss = (\hat y-y)^2
$$ -
Mean Square Error(MSE)
$$
cost = \frac{1}{N}\sum_{n=1}^{N}(\hat y_n - y_n)^2
$$loss 函数是针对一个样本,而MSE是针对整个训练集
-
-
常用方法
-
穷举法
-
2.2.2 可视化操作
常绘制图像
-
loss - \omega
-
loss - epoch (epot表示迭代次数)
Tips
数据集大时,结果的存储要定期存盘,避免发生错误而导致前功尽弃。
可使用实时可视化工具—— visdom
【Python】函数图像绘制:二维图像、三维图像、散点图、心形图_python利用三维数据画二维图像-CSDN博客
python可视化工具visdom使用教程 | w3cschool笔记
2.2.3 案例
2.2.3.1 案例说明
x为学生学习投入时间,y为最终课程分数,预测当投入时间x=4时,课程分数y的值
x(hours) | y(points) |
---|---|
1 | 2 |
2 | 4 |
3 | 6 |
4 | ? |
2.2.3.2 代码实现
-
导入必要的library
-
numpy
-
matplotlib.pyplot
-
导入数据集
-
定义模型
-
定义损失函数
-
设置list保存\omega和MSE的值
-
使用穷举法计算\omega和对应的MSE的值
-
画图
完整代码
import numpy as np import matplotlib.pyplot as plt x_data = [1.0, 2.0, 3.0] y_data = [2.0, 4.0, 6.0] n = len(x_data) # 定义线性模型 def linear_model(x): return x * w # 定义损失函数 def loss(y_hat,y): return(y_hat - y) ** 2 # 存储权重w,和mse w_list = [] mse_list = [] # 计算w,loss和MSE 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_hat = linear_model(x_val) loss_val = loss(y_hat, y_val) l_sum += loss_val print('\t', x_val, y_hat, y_val, loss_val) mse = l_sum/n print('MSE=', mse) w_list.append(w) mse_list.append(mse) # 可视化结果 plt.plot(w_list, mse_list) plt.xlabel('w') plt.ylabel('Loss') plt.show()
运行结果:
2.3 课后作业
2.3.1 作业说明
自定义线性模型y=x*w+b,画出loss和w,b的三维图像。
此处假设为y = 3x+4
实现代码
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 导入数据集 y=3x+4 x_data = [1.0, 2.0, 3.0] y_data = [7.0, 10.0, 13.0] n = len(x_data) # 设置模型 def linear_model(x, w, b): y_hat = w * x + b return y_hat # 定义损失函数 def loss_function(y_hat, y): loss = (y_hat - y) ** 2 return loss # 存储w, b, MSE w_list = [] b_list = [] mse_list = [] # 计算w,b,loss,MSE for w in np.arange(0.0, 6.1, 0.1): for b in np.arange(0.0, 8.1, 0.1): loss_sum = 0 for x_val, y_val in zip(x_data, y_data): y_hat = linear_model(x_val, w, b) loss = loss_function(y_hat, y_val) loss_sum += loss mse = loss_sum / n # 计算均方误差 w_list.append(w) b_list.append(b) mse_list.append(mse) # 画图 fig = plt.figure() ax = Axes3D(fig, auto_add_to_figure=False) # 添加关键字参数 auto_add_to_figure=False ax.scatter(w_list, b_list, mse_list) # 画出坐标轴 ax.set_xlabel('w ') ax.set_ylabel('b ') ax.set_zlabel('MSE ') plt.tight_layout() plt.show() print(linear_model(4))
运行结果: