【成长笔记】Linear Regression(线性回归)

在学习的过程中,越来越发觉,系统性地学习与整理很重要。网络上的资源非常丰富,之前一直是以博客,百度谷歌,书籍等方式来自学,可能是因为个人觉得如视频学习的方式太过于耗时以及潜意识中对于授课者的讲课的不信任,所以一直没有尝试过视频类学习。近期再重新回顾之前所学,发现所学终究太过于分散,知识碎片化严重,在尝试系统性地整理过程中,个人能力不及难以串联。想着牛顿说过:我是站在巨人的肩膀上。突然醒悟,或许我也可以站在巨人的肩膀上学习。安利下Coursera这个学习平台,学习的这一两个星期,感觉收获非常大。

Andrew ng的机器学习相关课程是ML的经典课程,我的首站选择的就是他,嗯,或许我没机会去斯坦福学习,但我和斯坦福的人们可以上一样的课,哈哈。想想小时候舍不得买一本参考书,现在真的是最好的时代啊。感谢Coursera,感谢如Andrew ng这般行业大牛无私为广大人们的知识的传授。

话不多说,个人觉得最好的学习理解在于输出,加油!

----------------我是萌萌的分割线-------------------

给定一个数据集,譬如杭州当地的房子的大小(平方米)以及相对应的价格(万元),放在二维的平面上,如图所示(数据纯属虚构,别当真哈)。

房子大小和房价的关系

以上,只是个别几个数据。假设我们拥有全城所有房子大小与价格的数据,假设房价只受房子大小影响。给定一个房子大小,我们能否估算出此房子的价格呢?

这看上去似乎是个很简单的甚至小学生也能解出来的题目。没错,按照我们小时候所学的知识,我们会这么做,设房子价格为y,设房子大小为x,找到一条尽量拟合所有y与x间关系的线,数学表达上类似于一个y = ax + b的形式,解出系数a和b获得此函数,再将题设中提供给我们的房子大小x的数据带入此函数,获得此房子的价格y。如何找到这条线呢?小学还是初中的我们,学过最小二乘法。咳咳,这个可能超前了,目前ng在第一周还未讲到最小二乘法这个算法。ng在此节课上使用的是梯度下降法

是的,这就是一个最简单的线性回归的例子,通过一定的统计样本,样本包括其特征(大小x)和其标签(价格y),根据其特征值与标签之间的关系(函数),我们可以对未知标签的样本的特征预测此样本的标签值。额,说得有些绕口哈。以上是个超级简单的例子,只有一个特征,理论上,我们也可以推广到更多特征,即多维的情况。房子的价格还受什么影响呢?地段,楼层高低,交通……

如果我们拥有足够的已经获得标记的样本(有标签的样本),我们是否可以找到一个根据其特征对应其标签的函数呢?如果找到了这个函数,我们是不是就可以对未知标签的样本进行预测呢?

额,收回来,这些应该ng以后会给我们讲的,脑洞大开也够大了。

以上,其实也就是一个监督学习的过程,那么,无监督学习,我们可以推理下,就是样本只有特征,没有标签。即有这么一堆数据,可我们也不知道这堆数据谁是谁。监督学习多用于回归(目标值是连续值,比如汽车的时速)和分类(目标值是离散值,比如抛硬币不是正面就是反面),无监督学习多用于聚类。

机器学习是什么呢?感觉一个通俗的理解,对于监督学习而言,似乎就是有自变量x和因变量y,我们去求解这个函数h(x),而这个h(x)怎样才能是最佳的呢?

问:已知一组数据,房屋的大小x以及对应的价格y,小明有一套大小为a的房子,那么,你可以估算出这套房子的价格吗?

思路:已知x,y,获得x与y的关系h(x),即h(x) = y,求解。

过程:h(x) = \theta_{0}*x^{0} + \theta_{1}*x^{1} + \theta_{2}*x^{2} + \cdot \cdot \cdot + \theta_{n}*x^{n}, 这里我们假设只有 \theta_{0}\theta_{1} 以简化计算(相当于设置其余的系数都为0),则原式就转化为我们比较熟悉的一元一次方程了。此时, h(x) = \theta_{0}*x^{0} + \theta_{1}*x^{1} ,即, h(x) = \theta_{0}+ \theta_{1}*x^{1}

那么,h(x)什么时候最接近y呢?当然就是h(x) - y最接近0的时候了。为了更加准确地度量其接近程度,我们对之进行平方(保证为正)。即(h(x) - y)^{2} 越小,则h(x)越接近我们所求。所以,目前我们可以将上述问题整理为(m为样本的个数):

min(\theta_{0},\theta_{1}): \sum_{i=1}^{m}{(h(x_{i}) - y_{i})^{2}}

h(x) = \theta_{0}+ \theta_{1}*x^{1}

我们的目标很简单,找到合适的 \theta_{0}\theta_{1} 使得 \sum_{i=1}^{m}{(h(x_{i}) - y_{i})^{2}} 最小,那么此时的h(x) = \theta_{0}+ \theta_{1}*x^{1} 将是我们所寻求的h(x)。

J(\theta_{0},\theta_{1}) = \frac{1}{2m}\sum_{i=1}^{m}{(h(x_{i}) - y_{i})^{2}} ,我们将 J(\theta_{0},\theta_{1}) 理解为Cost Function(代价函数,损失函数)。上面的问题可以转化为代价函数最小,即 min(\theta_{0},\theta_{1}):J(\theta_{0},\theta_{1})

J(\theta_{0},\theta_{1}) = \frac{1}{2m}\sum_{i=1}^{m}{(h(x_{i}) - y_{i})^{2}} = \frac{1}{2m}\sum_{i=1}^{m}{(\theta_{0} + \theta_{1}x_{i} -y_{i})^{2}}

如何对它进行求解呢? 使用的是梯度下降法。首先:我们给定一个初始值给 \theta_{0},\theta_{1} ,如(\theta_{0} = 0\theta_{1} = 0 ),然后不断地同时更新 \theta_{0},\theta_{1} 降低 J(\theta_{0},\theta_{1}) 的值最终使得 J(\theta_{0},\theta_{1}) 最小。具体如何做呢?如何更新 \theta_{0},\theta_{1} 呢?

不断地重复以下过程:

\theta(j) = \theta(j) - \alpha\frac{\partial}{\partial\theta(j)}J(\theta_{0},\theta_{1})(for j = 0andj = 1)

其中 \alpha 为学习速率。嗯,这么理解吧,当我们在山上的时候,如何才能走出一条最快的下山的路径呢?我们下一步行走的方向取决于当前我们所处的位置,当前哪个方向上最陡则最快,我们可以小碎步行走,也可以大步流星地行走,这个步子迈的大小就类似于 \alpha 学习速率。小碎步的话( \alpha 小时),我们可能要调整非常久,即重复更新方向(系数)次数多,大步流星( \alpha 大时),我们调整的次数就会少。ng用了一张很直观的图来展示,如图:

可以看出,不同的 \theta_{0},\theta_{1} ,其 J(\theta_{0},\theta_{1}) 是不一样的,随机选择了一个起点,如上图的一开始的点,一步一步地调整,最后到达最低点。看上去很像下山吧哈哈。但从图中,我们也可以看到,还有其余的局部低点,如果初始点换个地方,也许最后梯度下降会到达局部低点而不是全局最低点,如下图:

嗯,不过我们现在不去解决这个问题,留待接下来的学习去解决吧,留个问题思考,带着问题思考,继续。

\theta_{0}= \theta_{0}- \alpha\frac{d}{d\theta(0)}J(\theta_{0},\theta_{1}) \rightarrow\theta_{0} - \alpha\frac{1}{m}\sum_{i=1}^{m}{(\theta_{0} + \theta_{1}x_{i} -y_{i})}

\theta_{1}= \theta_{1}- \alpha\frac{d}{d\theta(0)}J(\theta_{0},\theta_{1}) \rightarrow\theta_{1} - \alpha\frac{1}{m}\sum_{i=1}^{m}{(\theta_{1} + \theta_{1}x_{i} -y_{i})x_{i}}

如此不断循环,最后得到最佳的 \theta_{0},\theta_{1} ,至此,h(x)获得,小明的那套a大小的房子的价格我们就可以估算了,将a带入到h(x)中,获得的值即为我们所估算的。

嗯,是不是感觉还是挺简单呢?

--------------------我是萌萌的分割线-------------------------

ng的课程还是讲得很清晰的,尤其带上ng那暖暖的笑脸,配上简单的几个例子,而且每节课只有短短的不到10分钟,获得知识,巩固知识,应用知识。感觉课程设计还是相当合理的,不会令人打瞌睡哈哈。

以上写的不是很满意,感觉自身逻辑的组织还不到位,很多想写的,在脑子里闪过后又不知道怎么写下去,可能你看就比较迷糊了,抱歉功力目前受限,以后慢慢进步。

加油!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
sklearn中的线性回归模型是通过最小二乘法来进行参数估计的,它可以用来建立一个线性关系模型,预测因变量与自变量之间的关系。在sklearn中,可以使用LinearRegression类来构建线性回归模型。\[1\] 在构建线性回归模型之前,需要导入必要的模块和库,例如从sklearn.linear_model中导入LinearRegression类,从sklearn.model_selection中导入train_test_split和cross_val_score函数,以及从sklearn.datasets中导入fetch_california_housing函数。然后,可以使用这些函数和数据集来进行模型的训练和评估。\[3\] 在使用线性回归模型之前,还需要注意一些问题。首先,线性回归模型要求因变量的分布服从正态分布,因此可能需要对因变量进行正态化处理,例如取对数或使用QuantileTransformer或PowerTransformer进行处理。其次,线性回归模型的性能往往取决于数据本身,而不是调参能力,因此对数据的质量有着很高的要求。\[2\] 总结来说,sklearn中的线性回归模型可以用来建立一个线性关系模型,预测因变量与自变量之间的关系。在使用之前,需要导入必要的模块和库,并注意因变量的分布和数据的质量。 #### 引用[.reference_title] - *1* [sklearn之线性回归](https://blog.csdn.net/luguojiu/article/details/103252707)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [使用sklearn库学习线性回归(一)](https://blog.csdn.net/qq_38163244/article/details/109442545)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [sklearn 线性回归](https://blog.csdn.net/kingsure001/article/details/113841439)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值