机器学习四(学习笔记) 回归算法(转)

回归算法

回归是统计学中最有力的工具之一。机器学习监督学习算法分为分类算法和回归算法两种,其实就是根据类别标签分布类型为离散型、连续性而定义的。回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。

回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。那么什么是线性关系和非线性关系?

比如说在房价上,房子的面积和房子的价格有着明显的关系。那么X=房间大小,Y=房价,那么在坐标系中可以看到这些点:

那么通过一条直线把这个关系描述出来,叫线性关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sfksavSk-1577722401544)(./images/房价线性.png)]

如果是一条曲线,那么叫非线性关系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VoVGRBqI-1577722401546)(./images/房价非线性.png)]

那么回归的目的就是建立一个回归方程(函数)用来预测目标值,回归的求解就是求这个回归方程的回归系数。

一、回归算法之线性回归

线性回归的定义是:目标值预期是输入变量的线性组合。线性模型形式简单、易于建模,但却蕴含着机器学习中一些重要的基本思想。线性回归,是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。

优点:结果易于理解,计算不复杂

缺点:对非线性的数据拟合不好

适用数据类型:数值型和标称型

对于单变量线性回归,例如:前面房价例子中房子的大小预测房子的价格。f(x) = w1*x+w0,这样通过主要参数w1就可以得出预测的值。

通用公式为:

h\left(\theta\right){=}\theta_0+\theta_1{x}h(θ)=θ0+θ1x

那么对于多变量回归,例如:瓜的好坏程度 f(x) = w0+0.2色泽+0.5根蒂+0.3*敲声,得出的值来判断一个瓜的好与不好的程度。

通用公式为:

h\left(\theta\right){=}\theta_{0}+\theta_{1}{x_{1}}+\theta_{2}{x_{2}}h(θ)=θ0+θ1x1+θ2x2

线性模型中的向量W值,客观的表达了各属性在预测中的重要性,因此线性模型有很好的解释性。对于这种“多特征预测”也就是(多元线性回归),那么线性回归就是在这个基础上得到这些W的值,然后以这些值来建立模型,预测测试数据。简单的来说就是学得一个线性模型以尽可能准确的预测实值输出标记。

那么如果对于多变量线性回归来说我们可以通过向量的方式来表示W值与特征X值之间的关系:

\theta = \begin{pmatrix}\theta_0 \\theta_1 \\theta_2 \\theta_3\end{pmatrix}θ=⎝⎜⎜⎛θ0θ1θ2θ3⎠⎟⎟⎞ X = \begin{pmatrix}x_0\x_1\x_2\x_3\end{pmatrix}X=⎝⎜⎜⎛x0x1x2x3⎠⎟⎟⎞

两向量相乘,结果为一个整数是估计值,其中所有特征集合的第一个特征值x_0x0=1,那么我们可以通过通用的向量公式来表示线性模型:

h(\theta) = \theta^T * xh(θ)=θT∗x

一个列向量的转置与特征的乘积,得出我们预测的结果,但是显然我们这个模型得到的结果可定会有误差,如下图所示:

单变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HsnIQR34-1577722401549)(./images/房价误差.png)]

多变量

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VjsF2nyj-1577722401552)(./images/多变量回归误差.png)]

损失函数

损失函数是一个贯穿整个机器学习重要的一个概念,大部分机器学习算法都会有误差,我们得通过显性的公式来描述这个误差,并且将这个误差优化到最小值。

对于线性回归模型,将模型与数据点之间的距离差之和做为衡量匹配好坏的标准,误差越小,匹配程度越大。我们要找的模型就是需要将f(x)和我们的真实值之间最相似的状态。于是我们就有了误差公式,模型与数据差的平方和最小:

J\left(\theta\right){=}\sum_{i=1}^{m} \left({h_\theta}({x}{(i)}){-}{y}{(i)}\right)^{2}J(θ)=∑i=1m(hθ(x(i))−y(i))2

上面公式定义了所有的误差和,那么现在需要使这个值最小?那么有两种方法,一种使用梯度下降算法另一种使正规方程解法(只适用于简单的线性回归)

梯度下降算法

上面误差公式是一个通式,我们取两个单个变量来求最小值,误差和可以表示为:

cost\left({w_0+w_1x_1}\right){=}\sum_{i=1}^{N} \left({w_0+w_1x_i}{-}{y_i}\right)^{2}cost(w0+w1x1)=∑i=1N(w0+w1xi−yi)2

可以通过调整不同的w_1w1和w_0w0的值,就能使误差不断变化,而当你找到这个公式的最小值时,你就能得到最好的w_1w1,w_0w0 而这对\left({w_1},{w_0}\right)(w1,w0)就是能最好描述你数据关系的模型参数。

怎么找cost\left({w_0+w_1x_1}\right)cost(w0+w1x1)的最小? cost\left({w_0+w_1x_1}\right)cost(w0+w1x1)的图像其实像一个山谷一样,有一个最低点。找这个最低点的办法就是,先随便找一个点(w_1w1=5, w_0w0=4), 然后 沿着这个碗下降的方向找,最后就能找到山谷的最低点。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CT5Bi52R-1577722401555)(./images/梯度下降.png)]

1、LinearRegression

sklearn.linear_model.LinearRegression

class LinearRegression(fit_intercept = True,normalize = False,copy_X = True,n_jobs = 1)
  """
  :param normalize:如果设置为True时,数据进行标准化。请在使用normalize = False的估计器调时用fit之前使用preprocessing.StandardScaler

  :param copy_X:boolean,可选,默认为True,如果为True,则X将被复制

  :param n_jobs:int,可选,默认1。用于计算的CPU核数
  """

实例代码:

from sklearn.linear_model import LinearRegression
reg = LinearRegression()
1.方法

fit(X,y,sample_weight = None)

使用X作为训练数据拟合模型,y作为X的类别值。X,y为数组或者矩阵

reg.fit ([[0, 0], [1, 1], [2, 2]], [0, 1, 2])

predict(X)

预测提供的数据对应的结果

reg.predict([[3,3]])

array([ 3.])
2.属性

coef_

表示回归系数w=(w1,w2…)

reg.coef_

array([ 0.5,  0.5])

intercept_ 表示w0

加入交叉验证

前面我们已经提到了模型的交叉验证,那么我们这个自己去建立数据集,然后通过线性回归的交叉验证得到模型。由于sklearn中另外两种回归岭回归、lasso回归都本省提供了回归CV方法,比如linear_model.Lasso,交叉验证linear_model.LassoCV;linear_model.Ridge,交叉验证linear_model.RidgeCV。所以我们需要通过前面的cross_validation提供的方法进行k-折交叉验证。

from sklearn.datasets.samples_generator import make_regression
from sklearn.model_selection import cross_val_score
from sklearn import linear_model
import matplotlib.pyplot as plt

lr = linear_model.LinearRegression()
X, y = make_regression(n_samples=200, n_features=5000, random_state=0)
result = cross_val_score(lr, X, y)
print result

3、线性回归案例分析

波士顿房价预测

使用scikit-learn中内置的回归模型对“美国波士顿房价”数据进行预测。对于一些比赛数据,可以从kaggle官网上获取,网址:https://www.kaggle.com/data

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值