本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理

最基本的机器学习算法必须是具有单个变量的线性回归算法。如今,可用的高级机器学习算法,库和技术如此之多,以至于线性回归似乎并不重要。但是,学习基础知识总是一个好主意。这样,您将非常清楚地理解这些概念。在本文中,我将逐步解释线性回归算法。

想法和公式

线性回归使用非常基本的预测思想。公式如下:

Y = C + BX

我们在学校都学过这个公式。提醒您,这是一条直线方程。在此,Y是因变量,B是斜率,C是截距。通常,对于线性回归,

它写为:

在这里," h"是假设或预测的因变量,X是输入特征,theta0和theta1是系数。Theta值从头开始随机初始化。然后使用梯度下降,我们将更新theta值以最小化成本函数。这是成本函数和梯度下降的解释。

成本函数和梯度下降

成本函数确定预测与原始因变量的距离。这是公式

任何机器学习算法的想法都是最小化成本函数,以使假设接近于原始因变量。为此,我们需要优化theta值。如果我们分别基于theta0和theta1取成本函数的偏导数,则会得到梯度下降。要更新theta值,我们需要从相应的theta值中减去梯度下降:

经过偏导数后,以上公式将变为:

此处,m是训练数据的数量,而alpha是学习率。我正在谈论一种变量线性回归。这就是为什么我只有两个theta值的原因。如果有很多变量,则每个变量都有theta值。

工作实例

我将要使用的数据集来自安德鲁·伍(Andrew Ng)的Coursera机器学习课程。这是在Python中逐步实现线性回归的过程。

(1) 导入包和数据集。

import numpy as np 
import pandas as pd 
df = pd.read_csv('ex1data1.txt', header = None) 
df.head() 

在此数据集中,列零是输入要素,列1是输出变量或因变量。我们将使用列0使用上面的直线公式预测列1。

(2) 将第1列与第0列相对应。

输入变量和输出变量之间的关系是线性的。当关系为线性时,线性回归效果最佳。

(3) 初始化theta值。我正在将theta值初始化为零。但是任何其他值也应该起作用。

theta = [0,0] 

(4) 根据前面讨论的公式定义假设和成本函数。

def hypothesis(theta, X):  
    return theta[0] + theta[1]*X 
 
def cost_calc(theta, X, y):  
    return (1/2*m) * np.sum((hypothesis(theta, X) - y)**2) 

(5) 计算训练数据的数量作为DataFrame的长度。然后定义梯度下降函数。在此函数中,我们将更新theta值,直到cost函数达到最小值为止。可能需要任何数量的迭代。在每次迭代中,它将更新theta值,并使用每个更新的theta值来计算成本以跟踪成本。

m = len(df) 
def gradient_descent(theta, X, y, epoch, alpha): 
    cost = [] 
    i = 0 
    while i < epoch: 
        hx = hypothesis(theta, X) 
        theta[0] -= alpha*(sum(hx-y)/m) 
        theta[1] -= (alpha * np.sum((hx - y) * X))/m 
        cost.append(cost_calc(theta, X, y)) 
        i += 1 
    return theta, cost 

(6) 最后,定义预测函数。它将从梯度下降函数获得更新的theta并预测假设或预测的输出变量。

def predict(theta, X, y, epoch, alpha): 
    theta, cost = gradient_descent(theta, X, y, epoch, alpha) 
    return hypothesis(theta, X), cost, theta 

(7) 使用预测函数,找到假设,成本和更新的theta值。我选择学习率为0.01,然后将这个算法运行2000个时期或迭代。

y_predict, cost, theta = predict(theta, df[0], df[1], 2000, 0.01) 

最终theta值为-3.79和1.18。

(8) 在同一图中绘制原始y和假设或预测y。

%matplotlib inline 
import matplotlib.pyplot as plt 
plt.figure() 
plt.scatter(df[0], df[1], label = 'Original y') 
plt.scatter(df[0], y_predict, label = 'predicted y') 
plt.legend(loc = "upper left") 
plt.xlabel("input feature") 
plt.ylabel("Original and Predicted Output") 
plt.show() 

假设图是公式中所预期的一条直线,并且该直线正在最佳位置通过。

(9) 记住,我们在每次迭代中都跟踪成本函数。让我们绘制成本函数。

plt.figure() 
plt.scatter(range(0, len(cost)), cost) 
plt.show() 

如前所述,我们的目的是优化theta值以最小化成本。从该图可以看出,成本从一开始就急剧下降,然后稳定下来。这意味着theta值已按照我们的预期正确优化。

想要获取更多Python学习资料可以加
QQ:2955637827私聊
或加Q群630390733
大家一起来学习讨论吧!

Python机器学习课程:线性回归算法的更多相关文章

  1. 通过机器学习的线性回归算法预测股票走势(用Python实现)

    在本人的新书里,将通过股票案例讲述Python知识点,让大家在学习Python的同时还能掌握相关的股票知识,所谓一举两得.这里给出以线性回归算法预测股票的案例,以此讲述通过Python的sklearn ...

  2. 机器学习---用python实现最小二乘线性回归算法并用随机梯度下降法求解 (Machine Learning Least Squares Linear Regression Application SGD)

    在<机器学习---线性回归(Machine Learning Linear Regression)>一文中,我们主要介绍了最小二乘线性回归算法以及简单地介绍了梯度下降法.现在,让我们来实践 ...

  3. python机器学习的常用算法

    Python机器学习 学习意味着通过学习或经验获得知识或技能.基于此,我们可以定义机器学习(ML)如下 - 它可以被定义为计算机科学领域,更具体地说是人工智能的应用,其为计算机系统提供了学习数据和从经 ...

  4. python机器学习实现线性回归

    线性回归 关注公众号"轻松学编程"了解更多. [关键词]最小二乘法,线性 一.普通线性回归 1.原理 分类的目标变量是标称型数据,而回归将会对连续型的数据做出预测. 应当怎样从一大 ...

  5. python 机器学习 K-近邻算法

    本人想边写文章,边学习,用的是 网上最火的<机器学习实战>machine learning in action 来做一次实践. 希望在过程中理顺思路之余,也有分享自己的一些理解,学习.加油 ...

  6. 吴裕雄 python 机器学习——支持向量机线性回归SVR模型

    import numpy as np import matplotlib.pyplot as plt from sklearn import datasets, linear_model,svm fr ...

  7. 李宏毅机器学习课程笔记-2.5线性回归Python实战

    本文为作者学习李宏毅机器学习课程时参照样例完成homework1的记录. 任务描述(Task Description) 现在有某地空气质量的观测数据,请使用线性回归拟合数据,预测PM2.5. 数据集描 ...

  8. 机器学习|线性回归算法详解 (Python 语言描述)

    原文地址 ? 传送门 线性回归 线性回归是一种较为简单,但十分重要的机器学习方法.掌握线性的原理及求解方法,是深入了解线性回归的基本要求.除此之外,线性回归也是监督学习回归部分的基石. 线性回归介绍 ...

  9. [机器学习Lesson 2]代价函数之线性回归算法

    本章内容主要是介绍:单变量线性回归算法(Linear regression with one variable) 1. 线性回归算法(linear regression) 1.1 预测房屋价格 该问题 ...

随机推荐

  1. Stream初步认识(一)

    Stream初步认识(一)测试 简介 Stream 是 Java8 中处理集合的关键抽象概念,它可以指定你希望对 集合进行的操作,可以执行非常复杂的查找.过滤和映射数据等操作. 使用Stream AP ...

  2. 使用javaxmail发送文字邮件

    package com.rupeng.javaMail; import java.util.Properties; import javax.mail.Authenticator;import jav ...

  3. C语言精华——内存管理,很多学校学习不到的知识~

    在编写程序时,通常并不知道需要处理的数据量,或者难以评估所需处理数据量的变动程度.在这种情况下,要达到有效的资源利用--使用内存管理,必须在运行时动态地分配所需内存,并在使用完毕后尽早释放不需要的内存 ...

  4. 二:robot framework基本组成

    1.RF组成:套件.用例.关键字 套件:测试用例的集合,可以是一个模块的功能点的集合.也可以是很多模块功能点的集合 用例:一般是由多个关键字组成的 关键字:测试库.资源文件.用例所在文件的关键字表 2 ...

  5. flink:StreamExecutionEnvironment、DataStream和Transformation与StreamOperator

    1.StreamExecutionEnvironment: StreamExecutionEnvironment是构建执行任务环境以及任务的启动的入口,主要具备以下几方面的职责: a.存储全局相关的参 ...

  6. 华为模拟器ensp老是弹出一堆英文up down,关闭

    英文内容: Mar 25 2015 20:38:21-08:00 Huawei DS/4/DATASYNC_CFGCHANGE:OID 1.3.6.1.4.1.2011.5.25.191.3.1 co ...

  7. Fiddler 4 (利用Fiddler模拟恶劣网络环境)

    1.模拟弱网环境 打开Fiddler,Rules->Performance->勾选 Simulate Modem Speeds,勾选之后访问网站会发现网络慢了很多 解决办法去掉勾选的地方网 ...

  8. Gitlab勾选Remove Source Branch后本地仍然能够看到该分支

    现象: Gitlab合并Merge Request时,勾选了Remove Source Branch,但是本地仍然能够看到该分支(git branch -a),而远程仓库中该分支已经不存在. 解决: ...

  9. Mac下查看端口占用情况

    为什么 后端开发时,有时会碰到服务无法正常启动,端口被占用.这时需要查看端口占用情况. 是什么 需要用到一些Linux命令. 怎么做 查看占用端口51805的进程 lsof -n -P -i TCP ...

  10. 2. Spring早期类型转换,基于PropertyEditor实现

    青年时种下什么,老年时就收获什么.关注公众号[BAT的乌托邦],有Spring技术栈.MyBatis.JVM.中间件等小而美的原创专栏供以免费学习.分享.成长,拒绝浅尝辄止.本文已被 https:// ...