机器学习笔记(6) 线性回归

先从最简单的例子开始,假设我们有一组样本(如下图的一个个黑色的圆点),只有一个特征,如下图,横轴是特征值,纵轴是label。比如横轴是房屋面积,纵轴是房屋价格.

现在我们要做什么呢?我们试图找到一条直线y=ax+b,可以尽量好的拟合这些点.

你可能要问了,为啥是直线,不是曲线,不是折线?因为我们的前提就是我们假设数据是有线性关系的啊!一方面,这种假设方便我们用数学知识推导出a,b. 另一方面,假设成折线,曲线尽可能地贴合上图中的点是没有意义的,因为尽可能地贴合了训练数据,只能说明你的模型过拟合了,我们想要得到的是一个尽量通用的模型,能够在我们的测试数据上取得好的表现.即希望我们的模型泛化能力足够强.

这里要插一句,每一种机器学习算法都可以看做是一种看待数据的角度,线性回归就是从"数据可能存在线性关系"这个角度来观察数据.  你当然也可以从别的角度观察数据.这就涉及到了集成学习,可以看看这篇博文.  所以啊,没有尽量多的数据,尽量有意义的数据,尽量有效的特征提取,只有机器学习算法的话,其实没什么用.因为数据太少了,你再怎么从各种角度分析数据也不会取得很好的效果.这也是为啥大数据和机器学习总是被经常一起提到的原因.

ok,书归正传,到了这里,问题来了,我们怎么评价"尽量好"地拟合呢?

对某个样本点,其本来横坐标上是x,纵坐标是y。  我们把x带入我们的直线方程y=ax+b可以得到$\hat y=ax+b$,此即我们的预测值.我们以这二者之差的大小作为"尽量好"的评价标准.越小说明我们的预测值与真实值差别越小,拟合效果越好.

具体地说,有以下几种评价标准

  • 均方误差MSE
  • 均方根误差RMSE
  • 平均绝对误差MAE
  • R Squared

 

均方误差MSE $$\frac 1 m \sum_{i=1}^m(y^{(i)} - \hat y^{(i)})^2$$

表明了总误差平摊到每一个样本上是多少,即均方误差.

 

均方根误差RMSE  $$\sqrt {\sum_{i=1}^m(y^{i} - \hat y^{i})^2}$$

MSE的一个问题是,假如y是有量纲的,MSE的结果把量纲改变了.比如y的单位是dollar,MSE的结果变成了$dollar^2$。RSME就避免了这个问题.

 

平均绝对误差MAE$$\frac 1 m \sum _{i=1}^m |y^{(i)} - \hat y^{(i)}|$$

我们为啥不用这个作为我们评判“尽可能好”的标准呢,因为不好求导.

 

R Squared  $$R^2 = 1 - \frac {\sum _{i=1}^m(\hat y^{(i)} - y^{(i)})^2} {\sum _{i=1}^m(\bar y  - y^{(i)})^2}$$

假设我们简单的取y的均值,即$y=\bar y$作为我们的模型,那误差就是$\sum_{i=1}^m(\bar y - y^{i})^2$。所以$R^2$表达的就是我们的模型相较于简单的取$\bar y$作为我们的模型有多少差异.

当$R^2$接近0时,说明我们的模型和直接取均值差别不大

当$R^2$接近1时,说明我们的模型相当不错,我们预测值和真实值几乎没误差.

当$R^2$为负时,说明我们的模型比直接取均值还要烂.此时你的数据可能就不存在线性关系.

比较常用的是RMSE和R平方.

 


现在问题变成了我们怎么求出a,b使得$ {\sum _{i=1}^m(\hat y^{(i)} - y^{(i)})^2} = {\sum _{i=1}^m(ax^{i}+b - y^{(i)})^2} $最小.这个函数就是所谓的损失函数.注意这个函数的未知数是a,b。这是很多机器学习算法的一个套路,首先定义出一个合适的损失函数,然后最小化损失函数从而得出我们的模型.

以上,我们是用一个特征做例子的,实际上,当样本有N个特征,道理也是一样的。

$y = a_1x_1+a_2x_2+…+a_nx_n+b$

那么第i个样本的预测值为$y^i =  a_1x_1^i+a_2x_2+…+a_nx_n+b$我们改写成向量的形势就是

$$\hat y^{(i)} = \begin{bmatrix} 1& X_1^{(i)}&X_2^{(i)}& … &X_n^{(i)}\end{bmatrix}\begin{bmatrix}  \theta_ 0 \\  \theta_ 1 \\  \theta_ 2 \\  … \\  \theta_ n \\ \end{bmatrix}$$

令$X_b=\left[ \begin{matrix} 1 & x_{11} & x_{12} & ... & x_{1n} \\ 1 & x_{21} & x_{22} & ... & x_{2n} \\ ...\\ 1 & x_{m1} & x_{m2} & ... & x_{mn} \end{matrix} \right] $

则$\hat y^{i} = X_b^{(i)}\theta$,$\hat y^ = X_b\theta$,此时我们的损失函数变为$f_{loss} = \sum_{i=1}^m(y^i - X_b^i  \theta)^2$

转换成矩阵的表达$f_{loss} = (y-X_b\theta)^T(y - X_b\theta)$。现在我们的目标变为使这个$f_{loss}$最小,注意未知数是$\theta$。注意一下这个$\theta$是个向量,是一系列值,不是标量.在二维平面中比如$y=f(x)$中,我们知道求极值即求导数$f^{'}(x)=0$.同样的为了求出$f_{loss}$的最小值,我们对$f_{loss}$求导$\frac {\partial f_{loss}}{\partial \theta}$,实际上就是对$\theta$的每一项求偏导数.一系列复杂的数学推导后,我们可得$$\theta=(X_b^TX_b)^{-1}X_b^Ty$$

$\theta=\begin{bmatrix}  \theta_ 0\\  \theta_ 1\\  \theta_ 2\\  …\\  \theta_ n\\ \end{bmatrix}$

其中$\theta_0$是多元线性方程的截距(intercept), $\theta_1$到$\theta_n$是系数(coefficients).

 


 

线性回归具有很好的可解释性,下面通过一个具体例子看一下.

Boston House Prices dataset
===========================Notes
------
Data Set Characteristics:  :Number of Instances: 506 :Number of Attributes: 13 numeric/categorical predictive:Median Value (attribute 14) is usually the target:Attribute Information (in order):- CRIM     per capita crime rate by town- ZN       proportion of residential land zoned for lots over 25,000 sq.ft.- INDUS    proportion of non-retail business acres per town- CHAS     Charles River dummy variable (= 1 if tract bounds river; 0 otherwise)- NOX      nitric oxides concentration (parts per 10 million)- RM       average number of rooms per dwelling- AGE      proportion of owner-occupied units built prior to 1940- DIS      weighted distances to five Boston employment centres- RAD      index of accessibility to radial highways- TAX      full-value property-tax rate per $10,000- PTRATIO  pupil-teacher ratio by town- B        1000(Bk - 0.63)^2 where Bk is the proportion of blacks by town- LSTAT    % lower status of the population- MEDV     Median value of owner-occupied homes in $1000's:Missing Attribute Values: None:Creator: Harrison, D. and Rubinfeld, D.L.This is a copy of UCI ML housing dataset.
http://archive.ics.uci.edu/ml/datasets/HousingThis dataset was taken from the StatLib library which is maintained at Carnegie Mellon University.The Boston house-price data of Harrison, D. and Rubinfeld, D.L. 'Hedonic
prices and the demand for clean air', J. Environ. Economics & Management,
vol.5, 81-102, 1978.   Used in Belsley, Kuh & Welsch, 'Regression diagnostics
...', Wiley, 1980.   N.B. Various transformations are used in the table on
pages 244-261 of the latter.The Boston house-price data has been used in many machine learning papers that address regression
problems.   **References**- Belsley, Kuh & Welsch, 'Regression diagnostics: Identifying Influential Data and Sources of Collinearity', Wiley, 1980. 244-261.- Quinlan,R. (1993). Combining Instance-Based and Model-Based Learning. In Proceedings on the Tenth International Conference of Machine Learning, 236-243, University of Massachusetts, Amherst. Morgan Kaufmann.- many more! (see http://archive.ics.uci.edu/ml/datasets/Housing)

boston数据集有13个特征,包括了房间数目,房龄,是否临河,离商圈距离等等,一个label,表示房屋价格.

用sklearn中的LinearRegression来做训练.

boston = datasets.load_boston()  
X = boston.data
y = boston.target  
X = X[y < 50.0] 
y = y[y < 50.0]from sklearn.linear_model import LinearRegression lin_reg = LinearRegression() lin_reg.fit(X, y) print(lin_reg.coef_)
####
array([ -1.05574295e-01, 3.52748549e-02, -4.35179251e-02,
         4.55405227e-01,  -1.24268073e+01,   3.75411229e+00,-2.36116881e-02,  -1.21088069e+00,   2.50740082e-01,-1.37702943e-02,  -8.38888137e-01,   7.93577159e-03,-3.50952134e-01]

print(boston.feature_names[np.argsort(lin_reg.coef_)])
####
array(['NOX', 'DIS', 'PTRATIO', 'LSTAT', 'CRIM', 'INDUS', 'AGE', 'TAX',
'B', 'ZN', 'RAD', 'CHAS', 'RM'], dtype='<U7')
 

coef系数越大越正相关,越小越负相关.上面例子里可以看出,特征'NOX'最不想干,特征'RM'最相关.

 

有关LinearRegression更多的详细解释和用法请戳官方文档.

转载于:https://www.cnblogs.com/sdu20112013/p/10186516.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

仿微信朋友圈项目梳理

项目功能简介&#xff1a; 用户通过手机号验证码进行登录和注册 可以浏览动态列表中的所有动态 登录成功后用户可以发表自己的动态 也可以对自己认可欣赏的动态进行点赞和评论 也可以通过动态结识志同道合的朋友 进行聊天和探讨 前端&#xff1a;采用Vue框架搭建 weui进行页面…

echarts鼠标事件以及自定义数据获取

事件添加方法&#xff1a; 对应官网位置&#xff1a;https://www.echartsjs.com/api.html#events 鼠标事件包括 click、dblclick、mousedown、mousemove、mouseup、mouseover、mouseout、globalout、contextmenu。 myChart.on(click, function (params) {console.log(params); …

[数学]点、线、面分割问题

平面分割问题 p条直线相交于一点时&#xff0c;分割的图形有 2*(n-1) 个&#xff0c;此时再加一条直线&#xff0c;在 2*(n-1) 的基础上再加 n条&#xff0c;此时为2*n n条曲线&#xff0c;其中有m条相交于一点&#xff0c;每两个曲线都交于两点 平面上有n条直线&#xff0c;且…

移动开发

1.移动端基础 1.1 浏览器现状 PC端浏览器 360浏览器、谷歌浏览器、火狐浏览器、QQ浏览器、百度浏览器&#xff08;停止服务&#xff09;、搜狗浏览器、IE浏览器 移动端浏览器 UC、QQ浏览器、欧朋浏览器、百度手机浏览器、360、搜狗、猎豹、谷歌等其他手机自带的浏览器 国…

Django之路由系统

Django的路由系统 Django 1.11版本 URLConf官方文档 URL配置(URLconf)就像Django 所支撑网站的目录。它的本质是URL与要为该URL调用的视图函数之间的映射表。 你就是以这种方式告诉Django&#xff0c;对于这个URL调用这段代码&#xff0c;对于那个URL调用那段代码。 URLconf配置…

微信小程序——操作数据库

案例一&#xff1a;统计用户的访问次数 业务需求&#xff1a; 统计每个用户对程序的访问次数将访问次数存储到数据库中访问次数应该与用户进行关联 业务逻辑&#xff1a; 如果用户是第一次访问此程序&#xff0c;向数据库添加一条记录&#xff1a;{openid&#xff1a;45454…

shop--12.阿里云部署以及域名绑定

一、申请阿里云服务器&#xff08;1&#xff09;PC访问阿里云https://www.aliyun.com/&#xff0c;申请阿里云帐号&#xff08;可以用您的支付宝帐号登录&#xff0c;因为支付宝帐号已经进行了实名认证&#xff0c;使用起来更方便&#xff09;并登录&#xff08;2&#xff09;找…

微信小程序——获取用户的运动步数

程序获取用户信息步骤 点击参考微信文档中的授权首先程序先向用户申请访问哪些权限用户做出选择后返回给程序程序携带权限访问服务器如果用户允许则返回信息如果用户为允许则不返回 自定义函数getUserRun 为获取用户的微信运动数据 页面加载调用此函数函数中执行下面操作 1…

第一次个人作业

该作业所属课程&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2作业要求地址&#xff1a;https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass2/homework/3340团队名称&#xff1a;脑壳痛 作业的目标 1.通过测试其他组的软件项目学习其…

微信小程序——解决上传并部署云函数时报错ResourceNotFound.Function, 未找到函数版本,请创建后再试。 (7f2d9d2d-5eac-4575-9n57-acd66cfa587g

1. 上传部署我们的云函数 2. 报错 错误信息为&#xff1a;Error: ResourceNotFound.Function, 未找到函数版本&#xff0c;请创建后再试。 (7f2d9d2d-5eac-4575-9b57-acd66cfa587e) 3. 原因 原因是可能我们在调试的时候不小心将我们开发控制台中的云函数删除了 4. 解决办法…

【IT界的厨子】酱香鲈鱼

食材: 前世曾经回眸的鲈鱼一条(主要选刺少的鱼&#xff0c;适合孩子吃&#xff0c;大人吃随意&#xff0c;草鱼比较大) 五花肉少许(肥一些的) 豆腐 辅料: 葱姜 蒜(选) 大料 香菜 调味: 啤酒(两罐) 黄豆酱或豆瓣酱(选) 老抽 生抽 料酒 盐 步骤: 1、鱼肉划开&#xff0c;方便炖的…

for each....in、for in、for of

一、一般的遍历数组的方法: var array [1,2,3,4,5,6,7]; for (var i 0; i < array.length; i) { console.log(i,array[i]); } 二、用for in的方遍历数组 for(let index in array) { console.log(index,array[index]); }; 三、forEach array.forEach(v>{ cons…

Vue cli3.0创建Vue项目

创建Vue项目 在要创建项目的文件夹下面打开Powershell窗口 输入命令 vue create 项目名称 选择第二项 回车后 选择是否使用历史路由 no 回车 选择 Less 回车 选择第三个 回车 选择第一个 回车 选择第一个 回车 是否保存模板 选择no 完成啦 完成

Remote desktop manager共享账号

因为多个远程机器&#xff0c;是会用了域账号进行登录的。而域账号的密码&#xff0c;三个月之后&#xff0c;密码强制过期 添加一个新的entry&#xff0c;类型是Credential Entry&#xff0c;然后选择用户名/密码 在remote desktop编辑的页面&#xff0c;Credentials选择Crede…

Mui常用的方法

中对话框 语法&#xff1a;mui.confirm 用法 mui.confirm("确认要切换角色&#xff1f;", "提示", btnArray, function(e) {if(e.index 1) {} else {}});组件名作用alert警告框confirm确认框prompt输入对话框toast消息提示框&#xff08;自动消失&#x…

java ListMapString,Object遍历的方法

java List<Map<String,Object>遍历的方法 public class Test {public static void main(String[] args) {List<Map<String, Object>> listMaps new ArrayList<Map<String, Object>>();Map<String, Object> map1 new HashMap<Strin…

vue如何更换网页标签的logo

Vue2 版本更换图标 在我们项目的根目录下面去添加或者替换 favicon.icon文件 找到我们的 build 文件夹下面的这两个文件 进行如下配置 favicon: resolveApp(’./favicon.ico’) 刷新后发现并没有什么效果 莫慌 最后一步 重启项目 改变端口 如果重启后还没有起到作用的话就…

《JavaScript高级程序设计》笔记总结

在北京上班的我每天在上下班路上的时间总共是两个半小时&#xff0c;为了充实这两个多小时的时间&#xff0c;我便花了银子换得了下面这个宝贝 本书内容&#xff08;引用书中前言&#xff09; 本书提供了JavaScript开发人员必须掌握的内容&#xff0c;全面涵盖了JavaScript的…

MUI H5+ 开发app基础

加载子页面(防止手机性能差,出现上下滑动卡顿) 其中 url 就是子页面的路径 id 为自定义 通常和页面名称一致页面的跳转和传值 切记 如果使用mui组件内的底部导航跳转的方式只能使用document获取元素的id 页面跳转传值 新页面接收参数 页面初始化 H5加载完毕 判断某个元素中是…

uni-app 组件传值

uni-app中的组件之间的传值 我们将compontents中的test文件作为子组件 引入到index中使用 引入并使用 效果如下 父传子 首先我们在父组件中使用子组件的标签中去自定义title 在子组件中 通过props去接收并处理 效果如下&#xff1a; 子传父 子组件中 设置一个按钮…