前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >机器学习sklearn线性回归

机器学习sklearn线性回归

作者头像
老钱
发布2018-08-14 17:48:37
5390
发布2018-08-14 17:48:37
举报
文章被收录于专栏:码洞码洞

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

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

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

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

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

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

代码语言:javascript
复制
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个点,还要加上浮动,避免所有的点能连成一条直线。

代码语言:javascript
复制
# -*- 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的线性回归模块

代码语言:javascript
复制
# -*- 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转换成多维形式,否则模型不接受输入。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 码洞 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
命令行工具
腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档