第五章 线性回归 学习笔记上
2023-09-27 14:25:50 时间
目录
之前的分类问题横纵轴都是特征,这节的回归问题则一个轴是特征,另一个轴已经是标签了,注意区分
y = ax+b
不加绝对值可能正负相加为零---》| |绝对值不是处处可导的函数,后续的计算时需要函数可导----》(---)^2
找到模型,使其最大拟合数据
近乎所有参数学习算法都是这样的套路,很多算法都是这样
最小二乘法
a,b是未知数, x,y是监督学习提供的已知的数据
对a变形,便于计算
5-3 简单线性回归的实现
实现简单线性回归法
封装我们自己的SimpleLinearRegression
SimpleLinearRegression.py
import numpy as np
class SimpleLinearRegression1:
def __init__(self):
"""初始化Simple Linear Regression 模型"""
self.a_ = None
self.b_ = None
def fit(self, x_train, y_train):
"""根据训练数据集x_train,y_train训练Simple Linear Regression模型"""
assert x_train.ndim == 1, \
"Simple Linear Regressor can only solve single feature training data."
assert len(x_train) == len(y_train), \
"the size of x_train must be equal to the size of y_train"
x_mean = np.mean(x_train)
y_mean = np.mean(y_train)
num = 0.0
d = 0.0
for x, y in zip(x_train, y_train):
num += (x - x_mean) * (y - y_mean)
d += (x - x_mean) ** 2
self.a_ = num / d
self.b_ = y_mean - self.a_ * x_mean
return self
def predict(self, x_predict):
"""给定待预测数据集x_predict,返回表示x_predict的结果向量"""
assert x_predict.ndim == 1, \
"Simple Linear Regressor can only solve single feature training data."
assert self.a_ is not None and self.b_ is not None, \
"must fit before predict!"
return np.array([self._predict(x) for x in x_predict])
def _predict(self, x_single):
"""给定单个待预测数据x,返回x的预测结果值"""
return self.a_ * x_single + self.b_
def __repr__(self):
return "SimpleLinearRegression1()"
模块化需要__init__.py脚本其是空的
5-4 向量化
向量运算的效率会很高
向量化实现SimpleLinearRegression
SimpleLinearRegression.py
import numpy as np
class SimpleLinearRegression1:
def __init__(self):
"""初始化Simple Linear Regression 模型"""
self.a_ = None
self.b_ = None
def fit(self, x_train, y_train):
"""根据训练数据集x_train,y_train训练Simple Linear Regression模型"""
assert x_train.ndim == 1, \
"Simple Linear Regressor can only solve single feature training data."
assert len(x_train) == len(y_train), \
"the size of x_train must be equal to the size of y_train"
x_mean = np.mean(x_train)
y_mean = np.mean(y_train)
num = 0.0
d = 0.0
for x, y in zip(x_train, y_train):
num += (x - x_mean) * (y - y_mean)
d += (x - x_mean) ** 2
self.a_ = num / d
self.b_ = y_mean - self.a_ * x_mean
return self
def predict(self, x_predict):
"""给定待预测数据集x_predict,返回表示x_predict的结果向量"""
assert x_predict.ndim == 1, \
"Simple Linear Regressor can only solve single feature training data."
assert self.a_ is not None and self.b_ is not None, \
"must fit before predict!"
return np.array([self._predict(x) for x in x_predict])
def _predict(self, x_single):
"""给定单个待预测数据x,返回x的预测结果值"""
return self.a_ * x_single + self.b_
def __repr__(self):
return "SimpleLinearRegression1()"
class SimpleLinearRegression2:
def __init__(self):
"""初始化Simple Linear Regression模型"""
self.a_ = None
self.b_ = None
def fit(self, x_train, y_train):
"""根据训练数据集x_train,y_train训练Simple Linear Regression模型"""
assert x_train.ndim == 1, \
"Simple Linear Regressor can only solve single feature training data."
assert len(x_train) == len(y_train), \
"the size of x_train must be equal to the size of y_train"
x_mean = np.mean(x_train)
y_mean = np.mean(y_train)
self.a_ = (x_train - x_mean).dot(y_train - y_mean) / (x_train - x_mean).dot(x_train - x_mean)
self.b_ = y_mean - self.a_ * x_mean
return self
def predict(self, x_predict):
"""给定待预测数据集x_predict,返回表示x_predict的结果向量"""
assert x_predict.ndim == 1, \
"Simple Linear Regressor can only solve single feature training data."
assert self.a_ is not None and self.b_ is not None, \
"must fit before predict!"
return np.array([self._predict(x) for x in x_predict])
def _predict(self, x_single):
"""给定单个待预测数据x_single,返回x_single的预测结果值"""
return self.a_ * x_single + self.b_
def __repr__(self):
return "SimpleLinearRegression2()"
向量化实现的性能测试
小测试 y = 2*x +1
相关文章
- MySQL学习笔记_6_SQL语言的设计与编写(下)
- 【第二章】JAVA之牛客网题笔记【点进刷来花两把游戏的时间学习晚上睡觉都踏实了】
- 【Pytorch学习笔记】5.总结一下一个深度学习模型的实现过程(以Softmax回归从零实现为例)
- 04 自动调整学习率(Learning Rate)-学习笔记-李宏毅深度学习2021年度
- 【miscellaneous】 GStreamer应用开发手册学习笔记之基础概念介绍
- UCOS-信号量(学习笔记)
- SSM学习笔记之Spring, SpringIoC, 注解, SpringAOP, Spring整合MyBatis
- 机器学习笔记之线性回归数学推导
- 机器学习笔记之逻辑回归(Logistic Regression)
- 机器学习笔记之matplotlib绘图核心原理
- HCNP学习笔记之史上最全华为路由器交换机配置命令大合集
- Python Web学习笔记之进程与线程
- Python学习笔记(3):数据集操作-列的统一操作
- Asp.net core 学习笔记 ( User Secrets )
- linux下core file size设置笔记
- 神经网络学习笔记(六) 广义回归神经网络
- 06-多进程之间通过Queue来实现数据共享学习笔记
- 第六章 线性回归 学习笔记中
- 《maven实战》学习笔记2——maven安装(windows和eclipse插件)
- 图像编程学习笔记1——bmp文件结构处理与显示
- 【PMP】Head First PMP 学习笔记 第五章 范围管理