本文共 3104 字,大约阅读时间需要 10 分钟。
y为预测标签值,x为样本特征变量,b为截距项(调整预测值与实际值的误差)Y=ax+b
确定一条直线,最大程度来拟合样本特征和样本标签值之间的关系。在二维平面,这条线就是y=ax+b
最佳拟合直线方程:y=ax+b。对于每个样本点,预测方程
误差统计,计算所有样本点的真实值和y(i)和预测值y^(i)的差值作为预测误差,误差都小,证明我们找出的线程方程拟合性好
使用训练数据样本x,y,找到斜率和截距,是样本总误差尽可能小,得出最佳拟合方程
1.分析问题,确定问题的损失函数2.通过最优化损失函数,获得机器学习模型3.对于简单线性回归问题,目标就是降低样本实际值和预测值得误差
所谓二乘,就是平方的意思。高斯证明过:如果误差分布是正太分布,那么最小二乘法得到就是最有可能的值
最小二乘法来自数学家阿德里安的猜想: 对于测量值来说,让总的误差平方最小就是真实值。这是基于,如果误差是随机的,应该围绕真值上下波动。因为误差为确定值,还要去绝对值,计算麻烦,故用平方代表误差。
数学猜想符合直觉,其为一个二次函数,对其求导,导数为0时取得最小(高数中范围内判断极最值的定理)
继而有,正好是算术平均数,可以让误差最小
算术平均数只是最小二乘法的特例,使用范围较窄,而最小二乘法应用广泛,如温度与冰激凌的销量之间的关系- 冰激凌与温度的关系
如用线性关系去刻画,会有如下结果,可以假设该线性关系为:f(x)=ax+b
如用最小二乘法来表示
上图i,x,y分别为
import numpy as npclass SimpleLogisticRegression: def __init__(self): pass @staticmethod def get_input_data(): x = np.array([1., 2., 3., 4., 5.]) y = np.array([1., 3., 2., 3., 5]) return x,y def get_a_b(self, x, y): """ 根据训练集,和标签值计算线性关系的斜率和截距 使用直线关系去拟合,根据最小二乘法推到求出a,b表达式 a = all( Xi- avg(x)) /all(Xi-avg(x))^2 b = avg(y) - a*avg(x) :param x: :param y: :return: """ x_mean = np.mean(x) y_mean = np.mean(y) # a的分子num,分母d num = 0.0 d = 0.0 # zip将集合x,y按原始排列顺序合并在一起 # 打包成[(x_1,y_1),(x_2,y_2),...,(x_n,y_n)] for x_i, y_i in zip(x, y): num = num + (x_i - x_mean)*(y_i - y_mean) d = d + (x_i - x_mean) ** 2 a = num / d b = y_mean - a * x_mean return a, b @staticmethod def get_linear_function(a,b,x): y_hat = a * x + b return y_hat if __name__ == '__main__': demo = SimpleLogisticRegression() x,y = SimpleLogisticRegression.get_input_data() a,b = demo.get_a_b(x,y) # 预测标签值 predict_value = demo.get_linear_function(a,b,3.0) "{}的值为{}".format(3.0,predict_value) ````
转载地址:http://fhjzb.baihongyu.com/