机器学习sklearn线性回归

回归算法是机器学习的一个基础算法,简单的就是线性回归,还有非线性回归。本节我们讲解简单的线性回归。

线性回归就是用直线来描述两个变量之间的线性关系。我们在中学时可以根据平面上的两个点来计算出通过这两个点的直线。而线性回归呢跟这个类似,只不过这里有无穷多个点,我们知道一条直线一般是不能同时通过这无穷多个点的,所以呢,线性回归要求这条直线像下面的图所显示的那样能大致通过这些点就可以。而回归的目标就是使得直线尽量不要偏离这些点太远。因为直线要照顾所有的点,所以要有一个整体性的表达式来衡量直线偏离所有点的程度。然后我们调整直线的系数,使得这个偏离程度表达式最小化。

其中的数学化公式小编不做详细讲解,虽然线性回归是机器学习算法中最简单的一个,但是其数学表达也超出了很多菜鸟的理解范围。不过我可以做一下简单的说明

上文提到的直线偏离所有点的程度,这个偏离程度在机器学习里有一个专门的词汇叫着损失,而表达这种损失的表达式叫着损失函数。我们的目标是最小化损失函数。

当我们定义线性回归的损失函数是每个点到直线的距离的平方和时,这种线性回归算法称之为最小二乘法。

下面我们使用sklearn提供的LinearRegression[最小二乘法]模块来练练手,先使用virtualenv安装一下sklearn,如果网络不好,下面的过程可能会比较长,请耐心等待。

mkdir -p ~/source/skl
cd ~/source/skl
virtualenv .py --python=python2.7
source .py/bin/activate
pip install sklearn
pip install scipy  # 科学计算
pip install matplotlib  # 画图
pip install ipython # 命令行工具

我们先用y=5x+2直线生成100个点,还要加上浮动,避免所有的点能连成一条直线。

# -*- coding: utf-8 -*-
import random
import matplotlib.pyplot as plt

xs = range(100)
ys = []for x in xs:
    y.append(5*x+2+random.random()*50)  # random加上浮动
plt.scatter(xs, ys, marker='.')  # 画点
plt.show()  # 显示图形窗口

于是画图窗口打开了,我们看到

接下来我们开始使用sklearn的线性回归模块

# -*- coding: utf-8 -*-
import random
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

xs = range(100)
ys = []for x in xs:
    ys.append(5*x+2+random.random()*50) # 生成随机散点
model = LinearRegression()
model.fit([[x] for x in xs], ys) # 拟合直线,*转换输入为多维*
ys_ = model.predict([[x] for x in xs])  # 预测所有的样本
plt.scatter(xs, ys, marker='.')  # 画样本点,随机散点
plt.scatter(xs, ys_, marker='+')  # 画预测点,直线点
plt.show()

于是我们看到一条完美的黄色直线生成了

机器学习的目的是从输入数据中习得一个模型,然后用这个模型去预测世界。在本例中,模型是一条直线以及直线的系数,LinearRegressionModel是该模型的一个封装。模型有fit方法灌入输入数据,进行复杂的数学计算后,模型就训练出来了。然后我们就可以使用predict方法去预测世界。例子中我们通过输入数据本身和模型对输入数据的预测进行了图形比对,直观上就可以看出这是一个正确的直线拟合。

线性回归的每条输入是一个数据对(x,y),x在本例中是一个数值,在实际应用中x则是一个数组,它代表中输入对象的多维属性。比如颜色对象的RGB就有三个值。例子中拟合的是一条直线,实际应用中拟合的则是一个多维平面。所以代码中我们对输入xs做了转换[[x] for x in xs]将输入x转换成多维形式,否则模型不接受输入。

原文发布于微信公众号 - 码洞(codehole)

原文发表时间:2018-03-14

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏人人都是极客

AI芯片之卷积神经网络原理

卷积神经网络(Convolutional Neural Network,CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图...

1313
来自专栏深度学习那些事儿

深度学习中IU、IoU(Intersection over Union)的概念理解以及python程序实现

Intersection over Union是一种测量在特定数据集中检测相应物体准确度的一个标准。我们可以在很多物体检测挑战中,例如PASCAL VOC ch...

8943
来自专栏PPV课数据科学社区

【算法】什么是神经网络?

本文结构: 什么是神经网络 什么是神经元 神经网络的计算和训练 代码实现 1. 什么是神经网络 神经网络就是按照一定规则将多个神经元连接起来的网络 例如全连接(...

4359
来自专栏AI研习社

SSD: Single Shot MultiBox Detector 深度学习笔记之SSD物体检测模型

算法概述 本文提出的SSD算法是一种直接预测目标类别和bounding box的多目标检测算法。 与faster rcnn相比,该算法没有生成 propos...

6667
来自专栏AI研习社

手把手教你如何用 TensorFlow 实现 CNN

CNN 的引入 在人工的全连接神经网络中,每相邻两层之间的每个神经元之间都是有边相连的。当输入层的特征维度变得很高时,这时全连接网络需要训练的参数就会增大很...

70312
来自专栏素质云笔记

无监督︱异常、离群点检测 一分类——OneClassSVM

OneClassSVM两个功能:异常值检测、解决极度不平衡数据 因为之前一直在做非平衡样本分类的问题,其中如果有一类比例严重失调,就可以直接用这个方式来做:On...

1.5K6
来自专栏算法channel

深度学习|卷积神经网络(CNN)介绍(后篇)

01 — 回顾 昨天介绍了CNN的卷积操作,能减少权重参数的个数,卷积操作涉及到三个超参数: 深度(Depth) 步长(Stride) 零填充(Zero-pad...

5025
来自专栏杨熹的专栏

什么是神经网络

本文结构: 什么是神经网络 什么是神经元 神经网络的计算和训练 代码实现 ---- 1. 什么是神经网络 神经网络就是按照一定规则将多个神经元连接起来的网络 例...

3415
来自专栏大数据挖掘DT机器学习

机器学习线性分类算法:感知器原理

感知器PLA是一种最简单,最基本的线性分类算法(二分类)。其前提是数据本身是线性可分的。 模型可以定义为 ? ,sign函数是阶跃函数,阈值决定取0或1。 模型...

4446
来自专栏SnailTyan

Single Shot MultiBox Detector论文翻译——中英文对照

SSD: Single Shot MultiBox Detector Abstract We present a method for detecting ob...

2700

扫码关注云+社区

领取腾讯云代金券