当前位置: 首页 > news >正文

✨机器学习笔记(三)—— 多元线性回归、特征缩放、Scikit-Learn(未完待续)

Course1-Week2:
https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Supervised%20Machine%20Learning%20Regression%20and%20Classification/week2

机器学习笔记(三)

  • 1️⃣多元线性回归及矢量化
  • 2️⃣特征缩放(Feature Scaling)
  • 3️⃣学习率(Learning Rate)
  • 4️⃣特征工程(Feature Engineering)
  • 5️⃣多项式回归
  • 6️⃣Scikit-Learn

1️⃣多元线性回归及矢量化

多元线性回归(multiple linear regression)

🎈对于一元线性回归问题,我们只是考虑将 Size 作为 input 的情况来得出房屋的价格。

在这里插入图片描述

🎈而在现实中考虑房屋价格的因素绝不止有一个,所以我们引入了多维特征(房屋大小,卧室的数量,楼层数量,房屋的年龄)四个维度的特征来得出房价,数据集及说明如下图:

在这里插入图片描述

对于这四个维度分别表示为 x 1 , x 2 , x 3 , x 4 x_1,x_2,x_3,x_4 x1,x2,x3,x4 ,为了方便使用向量 x ⃗ \vec x x 来表示,即对于第 i i i 组案例有 x ⃗ ( i ) = ( x 1 ( i ) , x 2 ( i ) , x 3 ( i ) , x 4 ( i ) ) \vec x^{(i)}=({x_1}^{(i)},{x_2}^{(i)},{x_3}^{(i)},{x_4}^{(i)}) x (i)=(x1(i),x2(i),x3(i),x4(i)),所以可以写出这样的线性回归方程:
f w , b ( x ) = w 1 x 1 + w 2 x 2 + w 3 x 3 + w 4 x 4 + b f_{w,b}(x)=w_1x_1+w_2x_2+w_3x_3+w_4x_4+b fw,b(x)=w1x1+w2x2+w3x3+w4x4+b,而对于 w w w也可用向量来表示 w ⃗ = ( w 1 , w 2 , w 3 , w 4 ) \vec w=({w_1},{w_2},{w_3},{w_4}) w =(w1,w2,w3,w4)

✨ 扩展到 n n n 维,可以得出多元线性回归模型
f w ⃗ , b ( x ⃗ ) = w ⃗ ⋅ x ⃗ + b = w 1 x 1 + w 2 x 2 + . . . + w n x n + b \begin{align} f_{\vec w,b}({\vec x}) &= \vec w \cdot \vec x + b \\ &= w_1x_1+w_2x_2+...+w_nx_n+b \end{align} fw ,b(x )=w x +b=w1x1+w2x2+...+wnxn+b


多元线性回归模型的梯度下降法
在这里插入图片描述


矢量化(Vectorization)

🎈指在数值计算或机器学习中,将循环操作转换为向量或矩阵运算的过程。通过矢量化,可以利用现代处理器的并行计算能力,极大地提升代码的执行效率,尤其是在处理大量数据时。矢量化通常应用于使用 NumPy 或类似库来替代原本的显式循环(for-loop)操作。

在这里插入图片描述

🎈使用 NumPy 的 dot 函数去计算,很好地利用了处理器并行计算的能力,下面通过代码来演示显式循环和矢量化的性能差距。

在这里插入图片描述

# 引入库
import numpy as np    
import time

自定义一个函数用来显式循环计算

def my_dot(a, b): """Compute the dot product of two vectorsArgs:a (ndarray (n,)):  input vector b (ndarray (n,)):  input vector with same dimension as aReturns:x (scalar): """x=0for i in range(a.shape[0]):x = x + a[i] * b[i]return xprint(a.shape[0])

用两个数组 a , b a,b a,b 来模拟一下计算过程

np.random.seed(1)
a = np.random.rand(10000000)  # very large arrays
b = np.random.rand(10000000)tic = time.time()  # capture start time
c = np.dot(a, b)
toc = time.time()  # capture end timeprint(f"np.dot(a, b) =  {c:.4f}")
print(f"Vectorized version duration: {1000*(toc-tic):.4f} ms ")tic = time.time()  # capture start time
c = my_dot(a,b)
toc = time.time()  # capture end timeprint(f"my_dot(a, b) =  {c:.4f}")
print(f"loop version duration: {1000*(toc-tic):.4f} ms ")del(a);del(b)  #remove these big arrays from memory

在这里插入图片描述
通过演示,可以明显看到两种计算方式之间的性能差距。

2️⃣特征缩放(Feature Scaling)

🎈对于不同的特征,例如房屋的大小和卧室数量两种参数,由于房屋的大小这个值是远远大于卧室数量的,如果当选择差不多大的 w w w 时,bedrooms 这个参数对于代价的影响将微乎其微。如果想让两者的影响相当的话可能要让一方选择较大的 w w w,而另一方选择较小的 w w w 去平衡对代价 J J J 的影响。
在这里插入图片描述

🎈我们最好还是想让两个参数一视同仁,对代价有着同等的影响。

✨特征缩放起到了这个作用,本质上是将每个特征除以用户选定的一个值,让参数得到 -1 到 1 的范围。
在这里插入图片描述

在这里插入图片描述


🎊还有两种方法也能达到目的:

✨均值归一化(Mean normalization):
x i = x i − μ i m a x − m i n , μ i 是所有特征 x 的平均值 x_i= \frac {x_i-\mu_i} {max-min}, \mu_i是所有特征 x 的平均值 xi=maxminxiμi,μi是所有特征x的平均值

在这里插入图片描述

✨Z-score标准化(Z-score normalization):

To implement z-score normalization, adjust your input values as shown in this formula:
x j ( i ) = x j ( i ) − μ j σ j {x_j}^{(i)}= \frac {{x_j}^{(i)}-\mu_j} {\sigma_j} xj(i)=σjxj(i)μj
where j j j selects a feature or a column in the X matrix. µ j µ_j µj is the mean of all the values for feature(j) and σ j \sigma_j σj is the standard deviation of feature(j).

μ j = 1 m ∑ i = 0 m − 1 x j ( i ) \mu_j=\frac 1 m \sum_{i=0}^{m-1}{x_j}^{(i)} μj=m1i=0m1xj(i)

σ j 2 = 1 m ∑ i = 0 m − 1 ( x j ( i ) − μ j ) 2 {\sigma_j}^2=\frac 1 m \sum_{i=0}^{m-1}({x_j}^{(i)}-\mu_j)^2 σj2=m1i=0m1(xj(i)μj)2

在这里插入图片描述

3️⃣学习率(Learning Rate)

🎈在梯度下降法中可以看到学习率 α \alpha α 的使用,它能控制参数更新的大小,而 α \alpha α 如果太小可能会导致梯度下降代价函数收敛的过程很缓慢;而 α \alpha α 如果过大,很可能会导致代价函数发散。因此选取一个合适的 α \alpha α 对模型来说是很重要的。

在这里插入图片描述

✨寻找 α \alpha α 的一种方法,找一个过小的学习率,逐渐倍数找到个过大的学习率,再从其中寻找合适的 α \alpha α
在这里插入图片描述

4️⃣特征工程(Feature Engineering)

🎈特征工程,是对原始数据进行一系列工程处理,将其提炼为特征,作为输入供算法和模型使用,而之前面对的特征都是线性,然而当面对的特征是非线性的或者是特征的组合又该怎么办?下面开始考虑数据非线性的场景。

在这里插入图片描述

如下是对房价预测的特征方程的考虑,显然都是多项式方程:
在这里插入图片描述
在这里插入图片描述

5️⃣多项式回归

6️⃣Scikit-Learn

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 大腾智能出席龙华云创中心启动与鸿蒙园揭牌仪式
  • 《花100块做个摸鱼小网站! 》第六篇—将小网站部署到云服务器上
  • 【前端面试】Webpack、Rollup 和 Gulp 构建工具了解
  • 收藏:B站相当精彩的关于向量数据库的2个视频
  • 《数据结构(C语言版)第二版》第八章-排序(8.3-交换排序、8.4-选择排序)
  • [数据集][图像分类]熊分类数据集309张5类别黑熊泰迪北极熊等
  • 动手学深度学习(pytorch)学习记录25-汇聚层(池化层)[学习记录]
  • AIGC与数据分析融合,引领商业智能新变革(TOP企业实践)
  • iOS——GCD再学习
  • rexroth拧紧系统
  • 使用EDM邮件群发营销管理平台发送推广邮件在什么时间段发信效果最好
  • 【C++ Primer Plus习题】14.1
  • pytest压力测试:不断发送数据,直到发现数据丢失
  • 【AcWing】861. 二分图的最大匹配(匈牙利算法)
  • python-网页自动化(二)
  • (十五)java多线程之并发集合ArrayBlockingQueue
  • [deviceone开发]-do_Webview的基本示例
  • 【翻译】babel对TC39装饰器草案的实现
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • CSS 三角实现
  • css布局,左右固定中间自适应实现
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • Eureka 2.0 开源流产,真的对你影响很大吗?
  • FineReport中如何实现自动滚屏效果
  • Linux CTF 逆向入门
  • Logstash 参考指南(目录)
  • markdown编辑器简评
  • Octave 入门
  • Spark VS Hadoop:两大大数据分析系统深度解读
  • tweak 支持第三方库
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 多线程 start 和 run 方法到底有什么区别?
  • 计算机在识别图像时“看到”了什么?
  • 简单基于spring的redis配置(单机和集群模式)
  • 马上搞懂 GeoJSON
  • 如何用vue打造一个移动端音乐播放器
  • 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!
  • 通过npm或yarn自动生成vue组件
  • 通信类
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一加3T解锁OEM、刷入TWRP、第三方ROM以及ROOT
  • 赢得Docker挑战最佳实践
  • 用Python写一份独特的元宵节祝福
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​​​【收录 Hello 算法】9.4 小结
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • ( 用例图)定义了系统的功能需求,它是从系统的外部看系统功能,并不描述系统内部对功能的具体实现
  • (javaweb)Http协议
  • (二) Windows 下 Sublime Text 3 安装离线插件 Anaconda
  • (附源码)spring boot车辆管理系统 毕业设计 031034
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos