1. 什么是回归
回归分析是研究自变量与因变量之间数量变化关系的一种分析方法,它主要是通过因变量Y与影响它的自变量Xi(i1,2,3…)之间的回归模型,衡量自变量Xi对因变量Y的影响能力的,进而可以用来预测因变量Y的发展趋势。就是 通过数学分析运算 得出是什么规律让x变成了y,找到这个规律用来预测
2.一元线性回归
回归模型中只含有一个自变量x,主要用来处理一个自变量x与一个因变量y之间的线性关系。
3. 损失函数
损失函数是来度量模型预测值与真实值不一样的程度的,或者说度量预测错误的程度,损失函数值越小,模型就越好。在回归问题中,误差平方和是回归任务中最常用的性能度量。这里就可以令损失函数L(a,b)等于误差平方和。
列:
身高 | 体重 |
---|---|
160 | 58 |
165 | 63 |
158 | 57 |
172 | 65 |
159 | 62 |
176 | 66 |
160 | 58 |
162 | 59 |
171 | 62 |
根据下列数据,设计一个预测体重的函数,输入身高,输出体重 其中 a 是权重
b 是偏置,那么怎么知道预测的值和真实的值差距大小,使用误差平方公式, 也叫损失函数。
其值越小,误差越小 那么怎么才能知道设置合适的 误差a和偏置b 通过对损失函数求导得出公式
求导过程 链式法则
求导过程 如上 得出结果
得到一个二元方程 解出该方程就得出了 a 和 b的解
python 实现代码
"""
一元线性回归计算
"""
import numpy as np
import sympy
class Line:
dtype = np.dtype([('x', int), ('y', int)])
data = np.array([
(160, 58), (165, 63), (158, 57), (172, 65), (159, 62), (176, 66), (160, 58), (162, 59), (171, 62)
], dtype=dtype)
def __init__(self):
var_1 = var_2 = var_3 = 0
var_4 = var_5 = var_6 = 0
for i in self.data:
var_1 = var_1 + (i['x'] * i['x'])
var_2 = var_2 + (1 * i['x'])
var_3 = var_3 + (i['y'] * i['x'])
var_4 = var_4 + i['x']
var_5 = var_5 + 1
var_6 = var_6 + i['y']
a, b = sympy.symbols('a b')
fx1 = 2 * (a * var_1 + b * var_2 - var_3)
fx2 = 2 * (a * var_4 + b * var_5 - var_6)
ret = sympy.solve([fx1, fx2], a, b)
self.a = ret[a].p / ret[a].q
self.b = ret[b].p / ret[a].q
def predict(self, height):
return height * self.a + self.b
line = Line()
print(line.predict(180))
运行结果
C:\Users\admin\PycharmProjects\机器学习01\venv\Scripts\python.exe C:/Users/admin/PycharmProjects/机器学习01/线性回归/最小二乘法_1.py
67.52225047679593
进程已结束,退出代码0