机器学习之路12

线性回归

当要预测的目标值是连续型的数据时,这一问题被称为回归问题。线性回归是利用回归方程对一个或多个自变量(特征值)和因变量(目标值)之间的关系进行建模的一种分析方式。

只有一个自变量的情况成为单变量回归,多于一个自变量的情况叫多元回归。

通用公式:
机器学习之路12_第1张图片

那该怎么理解呢?我们来看几个小例子

机器学习之路12_第2张图片 线性回归的特征与目标之间的关系分析:

线性回归中的线性模型有两种,一是线性关系,二是非线性关系。线性模型是说,要么自变量是一次方(如:y = w1x1+w2x2+...+wnxn+b),要么参数是一次方(如:y = w1x1+w2x2^2 + w3x3^3+b)。

机器学习之路12_第3张图片

机器学习之路12_第4张图片

机器学习之路12_第5张图片

线性回归的损失和优化原理:

那么回到我们之前的问题,假如刚才的房价的真是数据之间存在这样的关系:

 我们的预测值是这样一种关系:

 那么房价的真实结果和预测结果就会存在一定的误差。用图示表达的话,如下图:误差就是所有圆点点到我们预测的直线的那个距离之和

机器学习之路12_第6张图片

既然存在这些误差,那么就用损失函数把这些误差给衡量出来。

损失函数

机器学习之路12_第7张图片

如何让损失函数的值最小?

如何去求模型中的参数,是的损失最小?(目的就是找到最小损失对应的w值)可以用线性回归经常使用的两种优化算法。

1 正规方程法

直接计算出参数值。 

机器学习之路12_第8张图片

2 梯度下降法

通过计算梯度,使梯度逐渐减小而使梯度下降来找到loss的最小值

机器学习之路12_第9张图片

那么我自己也写了一下梯度下降算法(字迹太丑,,,),上图: 

机器学习之路12_第10张图片 就是分别让loss对k,b求偏导数,之后来一个循环,循环的结束条件是梯度小于某一值,循环体的内容是计算梯度,然后,梯度等于梯度减去梯度乘学习率(相当于步长)

SKlearn 中的线性回归法的API:

机器学习之路12_第11张图片

 回归性的评估

我们用均方误差来实现回归性评估。其公式为:

机器学习之路12_第12张图片

下面分别用正规方程和梯度下降来对波士顿房价进行预估:

#导入波士顿房价的数据集模块
from sklearn.datasets import load_boston
#导入划分数据集的模块
from sklearn.model_selection import train_test_split
#导入数据集标准化的模块
from sklearn.preprocessing import StandardScaler
#导入正规方程,梯度下降和岭回归的优化模块
from sklearn.linear_model import LinearRegression,SGDRegressor,Ridge
#导入模型评估的模块
from sklearn.metrics import mean_squared_error
#用正规方程来对放假进行预测
def linear1():
    '''
    正规方程的优化方法来对波士顿的房价进行预测
    :return:
    '''
    #1 获取数据
    boston = load_boston()
    #2 划分数据集
    x_train,x_test,y_train,y_test = train_test_split(boston.data,boston.target,random_state=22)
    #3 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    #4 预估器
    estimator = LinearRegression()
    estimator.fit(x_train,y_train)
    #5 得出模型,特征有几个,权重系数就有几个。
    print("正规方程权重系数为:\n",estimator.coef_)
    print("正规方程偏执为:\n",estimator.intercept_)
    #6 模型评估
    y_predict = estimator.predict(x_test)
    print("预测房价:\n",y_predict)
    error = mean_squared_error(y_test,y_predict)
    print("正规方程均方误差为:\n",error)
    return None
#用梯度下降来对放假进行预测
def linear2():
    '''
    梯度下降的优化方法来对波士顿的房价进行预测
    :return:
    '''
    #1 获取数据
    boston = load_boston()
    print("特征数量\n",boston.data.shape)
    #2 划分数据集
    x_train,x_test,y_train,y_test = train_test_split(boston.data,boston.target,random_state=22)
    #3 标准化
    transfer = StandardScaler()
    x_train = transfer.fit_transform(x_train)
    x_test = transfer.transform(x_test)
    #4 预估器.eta0为学习率,max_iter为迭代次数,learning_rate为学习率的算法
    estimator = SGDRegressor(learning_rate="constant", eta0=0.007,max_iter=10000)
    estimator.fit(x_train,y_train)
    #5 得出模型
    print("梯度下降权重系数为:\n",estimator.coef_)
    print("梯度下降偏执为:\n",estimator.intercept_)
    #6 模型评估
    y_predict = estimator.predict(x_test)
    print("预测房价:\n",y_predict)
    error = mean_squared_error(y_test,y_predict)
    #均方误差越小越好
    print("梯度下降均方误差为:\n",error)
    return None

输出

机器学习之路12_第13张图片

机器学习之路12_第14张图片 

机器学习之路12_第15张图片

 

正规方程和梯度下降的对比:

机器学习之路12_第16张图片

GD,SGD 与SAG

机器学习之路12_第17张图片

机器学习之路12_第18张图片

总结 :

机器学习之路12_第19张图片

 

 

 

 

你可能感兴趣的:(机器学习,回归,逻辑回归)