回归and线性
什么是回归:把所有结果(点)进行拟合,输出一个连续的值(分类是离散值)
什么是线性:线性(linar)量与量之间成比例,成直线的关系。在数学书可以理解为一阶导数为常数。
非线性:量与量之间不成直线的关系。在数学书可以理解为一阶导数不为常数。
(也可以理解为在某个空间内使用一条直线来拟合数据)
一个问题:什么样的数据分布适合使用线性回归?
实践建议:尝试寻找一个可以使用线性回归进行预测的案例?
尝试:进行线性回归
第一步,我们来导入一个数据集吧,我们已经为阁下筛选了一个完美的适合线性回归的数据集,您可以进行下载:
data (下载0)第二步,我们导入这个文件,参见以下代码:
import numpy as np
a = np.loadtxt(r"C:\Users\m1355\Downloads\ex1data1.txt",delimiter=",",dtype="float")
m = np.size(a,0)
print(m)
print(a.shape)
print(a.ndim)
随着这个代码的执行完毕,我们可以在下方看到所有读入的数据和他们的格式
第三步,绘制样本点,人口为横坐标,利润为纵坐标。参见以下代码
import matplotlib.pyplot as plt
X = a[:,0:1]#X[:,m:n] #即取所有数据的第m到n-1列数据,含左不含右
y = a[:,0:97] #请你模仿X的取值方式在问号处填写代码
plt.plot(X,y,"rx") #第三个参数表示红色 形状为x
plt.xlabel("人口")#横坐标名称
plt.ylabel("利润") #纵坐标名称
plt.show()
此代码执行完后,在输出框可见读入的数据,在弹出的窗口我们可以清晰的看到绘制的点位,如下:
第四步,我们可以在刚刚绘制的样本点上进行线性回归啦!
我们进行线性回归以预测利润的主要方式是,通过现有的样本点数据,找到最适合的参数k与b。
我们的最终目的是,当给定x,拟合出来的预测值y与样本点的真实值y的差距需要尽可能地小!
y=kx+b
所以我们遇到了一个问题:如何评估预测值与真实值之间的差异
于是,我们引入了MSE损失函数:
我们可以利用已知信息,通过数学手段最小化该损失函数,找到可以使得该损失函数最小的参数值(𝜃0 和 𝜃1)
我们已经成功引入了MSE损失函数的概念,现在假如我们完成了一次拟合,现在需要求MSE损失函数来预测预测值与真实值之间的差异。
假如给定一组参数后针对已知X拟合出来的y值分别是1.6, 2.5, 2.9, 3, 4.1,
而真实y值分别是1, 2, 3, 4, 5,求当前参数下的MSE.
a= np.array([1,4])
a.mean()#2.5 #计算均值
第一种方法是使用数学原理来计算MSE:
import math
import numpy as np
import pandas as pd
y_actual = np.array([1,2,3,4,5])
y_predicted = np.array([1.6,2.5,2.9,3,4.1])
d = {"y_actual":y_actual,
"y_predicted":y_predicted,
"error":y_actual - y_predicted,
"squared error": (y_actual - y_predicted)**2 }
df = pd.DataFrame(data = d)
print(df.head())
输出:
y_actual y_predicted error squared error
0 1 1.6 -0.6 0.36
1 2 2.5 -0.5 0.25
2 3 2.9 0.1 0.01
3 4 3.0 1.0 1.00
4 5 4.1 0.9 0.81
第二种方法是使用函数调用方式实现MSE计算:
随着人工智能模型应用的越来越大,例如损失函数使用等操作可以直接进行调用而不是现写
所以我们在此展示一种直接调用函数
import sklearn.metrics import mean_squared_error import numpy as np import math y_actual = np.array([1,2,3,4,5]) y_predicted = np.array([1.6,2.5,2.9,3,4.1]) MSE = mean_squared_error(y_actual,y_predicted) RMSE = math.sqrt(MSE) print(MSE) print("Root Mean Square Error:\n") print(RMSE)
输出:
y_actual y_predicted error squared error
0 1 1.6 -0.6 0.36
1 2 2.5 -0.5 0.25
2 3 2.9 0.1 0.01
3 4 3.0 1.0 1.00
4 5 4.1 0.9 0.81
如何最小化这个损失函数,让我们下节课再解决这个问题吧!
[…] 2. 绘制数据集样本点(详细内容可参见上一课的教程) […]