目录:

一、线性模型概念

二、LR算法直观原理

三、Python代码实现算法


(notice:

1)公式中,字母粗体以示向量

2)本文中LR指代Linear Regression,而非Logistic Regression)


一、线性模型概念

1、线性模型

所谓线性模型,就是把事物的特征属性,按照线性组合的方式构造出假设函数(Hypothesis)并加以训练的一种算法模型。

2、线性模型一般式

h θ ( x ) = θ T ⋅ x + b h_\theta(x) = \boldsymbol\theta^T·\textbf{x} + b hθ​(x)=θT⋅x+b
= θ 1 ⋅ x 1 + θ 2 ⋅ x 2 + ⋯ + θ n ⋅ x n + b = \theta_1·x_1 + \theta_2·x_2 +\cdots+ \theta_n·x_n + b =θ1​⋅x1​+θ2​⋅x2​+⋯+θn​⋅xn​+b

很多入门教程也会写做 h ( x ) = w T ⋅ x + b h(x)= w^T·x + b h(x)=wT⋅x+b

3、权重参数

这里的 θ \theta θ或者 w w w作用都是当做权重参数, θ i ⋅ x i \theta_i·x_i θi​⋅xi​中的 θ i \theta_i θi​表示特征 x i x_i xi​的重要程度。

举例: h θ ( x ) = 0.03 ⋅ x 1 + 0.8 ⋅ x 2 + 0.2 h_\theta(x) = 0.03·x_1 + 0.8·x_2 + 0.2 hθ​(x)=0.03⋅x1​+0.8⋅x2​+0.2

简言之,对于这个假设函数,事物的特征 x 2 x_2 x2​比 x 1 x_1 x1​更重要,更有助于提高算法模型的最终预测准确率。

二、LR算法直观原理

1、线性模型中最为经典的就数线性归回(Linear Regression)算法。

以Ng课程的房价预测为例,样本只有一个特征 x x x:房屋面积。价格price为数据样本标签的 y y y。

放在 X o Y XoY XoY坐标轴上,如下图:

经过训练集的数据训练,LR算法最终学习得到一个假设函数, h θ ( x ) = θ T ⋅ x + b h_\theta(x) = \boldsymbol\theta^T·\textbf{x} + b hθ​(x)=θT⋅x+b, 就是图中的直线。有了这个函数,随便输入一个房屋的面积值,就可以得到一个预测价格,以供业务参考。

2、以上便是LR最直观的原理解释,就是通过训练得到一组合适的权重参数而已。但这里只有面积这一个特征,实际中会有n多个特征供以选择,很可能无法图形化展示出来。而如何选择特征就涉及到特征工程了。

3、算法步骤

(1) 初始化特征集

首先设置偏置项bias,即假设函数中 b b b。一般性做法是在首(尾)加入一列特征值全为1的列,如下表示例:

b x 1 x_1 x1​ x 2 x_2 x2​
1 3 10
1 6 11
1 8 10

(2) 初始化参数集 θ \boldsymbol\theta θ

θ = ( θ 0 , θ 1 , θ 2 ) = ( 0 , 0 , 0 ) \boldsymbol\theta = (\theta_0,\theta_1,\theta_2)=(0,0,0) θ=(θ0​,θ1​,θ2​)=(0,0,0)

θ \boldsymbol\theta θ一般初始化全为0,若初始化为随机值对梯度下降算法收敛速度提升与否,暂时还没验证

(3) 构造$h_\theta(x) = \theta_0·1 + \theta_1·x_1 + \theta_2·x_2 $

(4) 结合 h θ h_\theta hθ​和标签 y y y,使用梯度下降算法收敛时,得到一组可行参数 θ ( θ 0 , θ 1 , θ 2 ) \boldsymbol\theta(\theta_0,\theta_1,\theta_2) θ(θ0​,θ1​,θ2​)


三、Python代码实现算法

1、构造特征集和样本标签集

def Create_Train_Set(data_set_path):#get train_data_settrain_data = Get_Data_Set(path = data_set_path + 'ds1_train.csv')#create train_data label ytrain_data_y = train_data.iloc[:, -1].values.reshape((len(train_data),1))#create train_data features and  insert bias into featurestrain_data_X = train_data.iloc[:, :-1]train_data_X.insert(0,'bias',1)train_data_X = train_data_X.valuesreturn train_data_X, train_data_y

2、构造初始化 θ \boldsymbol\theta θ

def Linear_Regression(data_set_path):#get train datatrain_data_X, train_data_y = Create_Train_Set(data_set_path)#initialize theta theta = np.zeros((train_data_X.shape[1],1))
print(theta)

3、调用梯度下降算法

按照梯度下降算法的原理,迭代更新 θ \boldsymbol\theta θ参数

下图中的alpha,iters属于根据主观意愿选择数值,就是通常意义上的调参

代码:

def Gradient_Descent(X,y,theta,alpha, iters):for _ in range(iters):theta = theta - (X.T @ (X@theta - y) ) * alpha / len(X)return theta

θ \boldsymbol\theta θ迭代6000次后的结果:

4、对于LR来说,一般得到权重参数 θ \boldsymbol\theta θ后,任务就基本完成了。剩余的就是对于测试集中的数据做特征工程,以及代入Hypothesis函数得出预测值等任务了

5、完整代码

import pandas as pd
import numpy as npdef Get_Data_Set(path):data = pd.read_csv(path)return datadef Create_Train_Set(data_set_path):#get initial train datatrain_data = Get_Data_Set(path = data_set_path + 'ds1_train.csv')#create train_data label ytrain_data_y = train_data.iloc[:, -1].values.reshape((len(train_data),1))#create train_data features and  insert bias into featurestrain_data_X = train_data.iloc[:, :-1]train_data_X.insert(0,'bias',1)train_data_X = train_data_X.valuesreturn train_data_X, train_data_ydef Hypothesis(theta,X):"""hypothesis function"""return X @ thetadef Cost_Function(theta,X,y):"""cost function"""cost = np.power(Hypothesis(theta,X) - y, 2)return np.sum(cost) / 2def Gradient_Descent(X,y,theta,alpha, iters):"""gradient descent algorithm"""for _ in range(iters):theta = theta - (X.T @ (X@theta - y) ) * alpha / len(X)return thetadef Linear_Regression(data_set_path):#get train datatrain_data_X, train_data_y = Create_Train_Set(data_set_path)#initialize thetatheta = np.zeros((train_data_X.shape[1],1))#call Gradient Descent,#alpha = 0.0001, iters = 6000theta = Gradient_Descent(train_data_X,train_data_y,theta,0.0001,6000)if __name__ == '__main__':data_set_path = './data/PS1/'Linear_Regression(data_set_path)


线性模型|| 线性回归(Linear Regression)相关推荐

  1. 机器学习方法:回归(一):线性回归Linear regression

    欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 开一个机器学习方法科普系列:做基础回顾之用,学而时习之:也拿出来与大家分享.数学水平有限,只求易懂,学习与工 ...

  2. Coursera公开课笔记: 斯坦福大学机器学习第四课“多变量线性回归(Linear Regression with Multiple Variables)”

    Coursera公开课笔记: 斯坦福大学机器学习第四课"多变量线性回归(Linear Regression with Multiple Variables)" 斯坦福大学机器学习第 ...

  3. Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”

    Coursera公开课笔记: 斯坦福大学机器学习第二课"单变量线性回归(Linear regression with one variable)" 发表于 2012年05月6号 由 ...

  4. Ng第二课:单变量线性回归(Linear Regression with One Variable)

    二.单变量线性回归(Linear Regression with One Variable) 2.1  模型表示 2.2  代价函数 2.3  代价函数的直观理解 2.4  梯度下降 2.5  梯度下 ...

  5. Stanford机器学习---第二讲. 多变量线性回归 Linear Regression with multiple variable

    本栏目(Machine learning)包括单参数的线性回归.多参数的线性回归.Octave Tutorial.Logistic Regression.Regularization.神经网络.机器学 ...

  6. 复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥

    复盘:手推LR(逻辑回归logistics regression),它和线性回归linear regression的区别是啥? 提示:系列被面试官问的问题,我自己当时不会,所以下来自己复盘一下,认真学 ...

  7. 线性回归 Linear Regression 与逻辑回归 Logistic Regression

    1 线性回归 Linear Regression 理论 线性回归模型研究多个变量x与y之间的关系,通过回归模型预测位置样本的数据. 假设函数 损失函数 损失函数寻优,最小二乘法 即: 注:最小二乘法需 ...

  8. 西瓜书+实战+吴恩达机器学习(四)监督学习之线性回归 Linear Regression

    文章目录 0. 前言 1. 线性回归参数求解方法 2. 线性回归正则化 2.1. 岭回归 2.2. LASSO 3. 局部加权线性回归 4. 广义线性模型 如果这篇文章对你有一点小小的帮助,请给个关注 ...

  9. 多元线性回归算法: 线性回归Linear Regression、岭回归Ridge regression、Lasso回归、主成分回归PCR、偏最小二乘PLS

    0. 问题描述 输入数据:X=(x1,x2,....,xm)\mathbf{X} = (x_1, x_2,...., x_m)X=(x1​,x2​,....,xm​), 相应标签 Y=(y1,y2,. ...

最新文章

  1. 植物数据库-小RNA注释数据库 sRNAanno(2021)
  2. 技术人写作和写代码一样重要
  3. STM32与MS5837压力传感器的I2C通讯
  4. excel文件无法打印提示内存不足_U盘拷贝文件提示目标文件过大无法复制怎么解决...
  5. 【英语学习】【Python】Programming in Python 3 的目录
  6. vue.js axios实现跨域http请求接口
  7. kafka_2.10-0.8.1.1.tgz的1或3节点集群的下载、安装和配置(图文详细教程)绝对干货...
  8. 褪去华衣 裸视学习 - 机器学习 - 转
  9. GL和DX中关于纹理操作(包括多重纹理)与混合的问题
  10. Jmater (十九) 分布式测试(性能测试大并发、远程启动解决方案)
  11. 【Elasticsearch源码】 GET分析
  12. 百度排名批量查询_企业网站核心关键词排名消失,什么原因?
  13. 男怕入错行 完美池宇峰畅谈创业点滴
  14. 天平游码读数例题_天平游码读数
  15. 资深投资人: VC的“增值平台”就是一坨狗屎
  16. 单线激光雷达原理深度解析
  17. 响应式设计中怎样布局?
  18. 使用RTOS系统如何选取大容量存储芯片NAND FLASH
  19. discuz db_mysql.calss.php,discuz 7.0 db_mysql.php 详解
  20. DELL液晶显示器如何进入工程模式

热门文章

  1. 求解多变量非线性全局最优解_一种求解约束条件下多变量非线性函数所有全局最优解的区间算法...
  2. Ubuntu 16.04 取消搜狗输入法 ctrl+space 快捷键
  3. select ..from..where..=(select ..from ..where=‘‘)子查询的用法及理解
  4. latex 文字出现在float之前_Latex排版的报错,学会看懂之后的你有多厉害?
  5. java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String at java.lang.It
  6. 马斯克脑机接口_马斯克脑机接口是真的吗
  7. 【随笔】博客质量分计算,如何让自己的博客脱颖而出,也许文章能够给你答案
  8. 晒晒我的通用数据访问层
  9. IOS证书申请(失败,香蕉云编要续费,待更新)
  10. 当右键新建当中没有新建word、powerpoint、excel文档的选项