线性回归算法

2019-11-29  本文已影响0人  当_下

I‘m Linear Regression, One of the most important mathematical models and Mother of Models.

最小二乘法

在机器学习中,所有的算法模型其实都依赖于最小化或最大化某一个函数,我们称之为“目标函数”。

最小化的这组函数被称为“损失函数”。什么是损失函数呢?

损失函数描述了单个样本预测值和真实值之间误差的程度。用来度量模型一次预测的好坏。

损失函数是衡量预测模型预测期望结果表现的指标。损失函数越小,模型的鲁棒性越好。

找到a和b,使得损失函数:

尽可能最小。

将简单线性问题转为最优化问题。下面对函数的各个位置分量求导,导数为0的地方就是极值:

分别对a,b求导,最终我们通过最小二乘法得到a、b的表达式:

线性回归

定义:给定数据集D={(x1, y1), (x2, y2), ... },我们试图从此数据集中学习得到一个线性模型,这个模型尽可能准确地反应x(i)和y(i)的对应关系。这里的线性模型,就是属性(x)的线性组合的函数,可表示为:

向量表示为:

        
其中,w=(w1; w2;w3; ..., wd) 表示列向量

这里w表示weight,权重的意思,表示对应的属性在预测结果的权重,这个很好理解,权重越大,对于结果的影响越大;更一般化的表示是theta,是线性模型的参数,用于计算结果。

那么通常的线性回归,就变成了如何求得变量参数的问题,根据求得的参数,我们可以对新的输入来计算预测的值。(也可以用于对训练数据计算模型的准确度)

通俗的理解:x(i)就是一个个属性,theta(或者w/b),就是对应属性的参数(或者权重),我们根据已有数据集来求得属性的参数(相当于求得函数的参数),然后根据模型来对于新的输入或者旧的输入来进行预测(或者评估)。

import numpy as np

import random

from sklearn.linear_model import LinearRegression

import matplotlib.pyplot as plt

def linear_regression_demo(n = 25):

    #模拟一个 y = k * x 的数据集,并做一个线性回归,求解k,并做预测

    #首先随机构造一个近似于y = k * x + b 的数据集

    k = random.random()

    b = random.random() * 1

    x = np.linspace(0,n,n)

    y = [ item * k +(random.random() - 0.5) * k * 5 + b for item in x]

    true_y = [ item * k for item in x]

    #进行一元线性回归

    model = LinearRegression()

    model.fit(np.reshape(x,[len(x),1]), np.reshape(y,[len(y),1]))

    yy = model.predict(np.reshape(x,[len(x),1]))

    #绘图

    plt.figure()

    kk = model.coef_[0][0] # 获得预测模型的参数

    bb = model.intercept_[0] #获得预测模型的截距

    plt.title('MebiuW\'s Scikit-Learn Notes : Linear Regression Demo \n True: y='+str(k)[0:4]+'x +'+str(b)[0:4]+'  Predicted:y='+str(kk)[0:4]+'x +'+str(bb)[0:4] );

    plt.xlabel('X')

    plt.ylabel('Y')

    plt.grid(True) # 显示网格

    plt.plot(x,y,'r.') # 绘图

    plt.plot(x,yy,'g-') # 绘图

    plt.show() # 显示图像

linear_regression_demo()

线性回归鉴于其简单易用,易理解(注意上面提到的权重的理解),所以得到了很广泛的应用,在某些场景下或许有优于其它复杂方法的表现。 

上一篇 下一篇

猜你喜欢

热点阅读